diff options
Diffstat (limited to 'src/tokenizer.c')
| -rw-r--r-- | src/tokenizer.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/tokenizer.c b/src/tokenizer.c index 6c7f76c02..bd012519b 100644 --- a/src/tokenizer.c +++ b/src/tokenizer.c @@ -7,6 +7,7 @@ TOKEN_KIND(Token__LiteralBegin, "_LiteralBegin"), \ TOKEN_KIND(Token_Ident, "identifier"), \ TOKEN_KIND(Token_Integer, "integer"), \ TOKEN_KIND(Token_Float, "float"), \ + TOKEN_KIND(Token_Imag, "imaginary"), \ TOKEN_KIND(Token_Rune, "rune"), \ TOKEN_KIND(Token_String, "string"), \ TOKEN_KIND(Token__LiteralEnd, "_LiteralEnd"), \ @@ -547,18 +548,18 @@ Token scan_number_to_token(Tokenizer *t, bool seen_decimal_point) { } } - token.string.len = t->curr - token.string.text; - return token; + goto end; } scan_mantissa(t, 10); + fraction: if (t->curr_rune == '.') { // HACK(bill): This may be inefficient TokenizerState state = save_tokenizer_state(t); advance_to_next_rune(t); - if (digit_value(t->curr_rune) >= 10) { + if (t->curr_rune == '.') { // TODO(bill): Clean up this shit restore_tokenizer_state(t, &state); goto end; @@ -577,6 +578,11 @@ exponent: scan_mantissa(t, 10); } + if (t->curr_rune == 'i') { + token.kind = Token_Imag; + advance_to_next_rune(t); + } + end: token.string.len = t->curr - token.string.text; return token; |