aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tokenize.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-07 19:06:29 +0900
committernsfisis <nsfisis@gmail.com>2026-02-07 19:06:38 +0900
commit0ae64ed2c00f66c7f3ddec8689169bacafff87ea (patch)
treec72db385bca5de58910f2769168a7b0918309c21 /src/tokenize.c
parent7ba8a506a215846d14d71487807f5e525e9e5c16 (diff)
downloadducc-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.c15
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);