aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tokenize.c
diff options
context:
space:
mode:
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);