diff options
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); |
