diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-07 19:06:29 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-07 19:06:38 +0900 |
| commit | 0ae64ed2c00f66c7f3ddec8689169bacafff87ea (patch) | |
| tree | c72db385bca5de58910f2769168a7b0918309c21 /src/tokenize.c | |
| parent | 7ba8a506a215846d14d71487807f5e525e9e5c16 (diff) | |
| download | ducc-0ae64ed2c00f66c7f3ddec8689169bacafff87ea.tar.gz ducc-0ae64ed2c00f66c7f3ddec8689169bacafff87ea.tar.zst ducc-0ae64ed2c00f66c7f3ddec8689169bacafff87ea.zip | |
feat: partially support float/double
Diffstat (limited to 'src/tokenize.c')
| -rw-r--r-- | src/tokenize.c | 15 |
1 files changed, 13 insertions, 2 deletions
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); |
