From 0ae64ed2c00f66c7f3ddec8689169bacafff87ea Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 7 Feb 2026 19:06:29 +0900 Subject: feat: partially support float/double --- src/tokenize.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/tokenize.c') diff --git a/src/tokenize.c b/src/tokenize.c index ceba12d..6e9ad43 100644 --- a/src/tokenize.c +++ b/src/tokenize.c @@ -350,8 +350,19 @@ static void do_tokenize_all(Lexer* l) { strbuilder_append_char(&builder, infile_peek_char(l->src)); infile_next_char(l->src); } - tok->kind = TokenKind_literal_int; - tok->value.integer = strtol(builder.buf, NULL, 0); + if (infile_peek_char(l->src) == '.' && isdigit(infile_peek_char2(l->src))) { + strbuilder_append_char(&builder, infile_peek_char(l->src)); + infile_next_char(l->src); + while (isdigit(infile_peek_char(l->src))) { + strbuilder_append_char(&builder, infile_peek_char(l->src)); + infile_next_char(l->src); + } + tok->kind = TokenKind_literal_double; + tok->value.floating = strtod(builder.buf, NULL); + } else { + tok->kind = TokenKind_literal_int; + tok->value.integer = strtol(builder.buf, NULL, 0); + } } else if (isalpha(c) || c == '_') { StrBuilder builder; strbuilder_init(&builder); -- cgit v1.3-1-g0d28