From 27b7dc336ab7c108d711d6ce00686467f1f0319c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 25 Feb 2018 14:36:41 +0000 Subject: [PATCH] Change parsing for floats and disallow `x.0` --- src/parser.cpp | 6 +++--- src/tokenizer.cpp | 8 +++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/parser.cpp b/src/parser.cpp index 763e7fca3..e03c7a71a 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -2106,9 +2106,9 @@ AstNode *parse_atom_expr(AstFile *f, AstNode *operand, bool lhs) { case Token_Ident: operand = ast_selector_expr(f, token, operand, parse_ident(f)); break; - case Token_Integer: - operand = ast_selector_expr(f, token, operand, parse_expr(f, lhs)); - break; + // case Token_Integer: + // operand = ast_selector_expr(f, token, operand, parse_expr(f, lhs)); + // break; case Token_OpenParen: { Token open = expect_token(f, Token_OpenParen); AstNode *type = parse_type(f); diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 668c38cc8..0caa748c3 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -536,6 +536,9 @@ Token scan_number_to_token(Tokenizer *t, bool seen_decimal_point) { token.pos.column = t->curr-t->line+1; if (seen_decimal_point) { + token.string.text -= 1; + token.string.len += 1; + token.pos.column -= 1; token.kind = Token_Float; scan_mantissa(t, 10); goto exponent; @@ -906,7 +909,6 @@ Token tokenizer_get_token(Tokenizer *t) { } break; case '.': - token.kind = Token_Period; // Default if (t->curr_rune == '.') { // Could be an ellipsis advance_to_next_rune(t); token.kind = Token_HalfClosed; @@ -914,6 +916,10 @@ Token tokenizer_get_token(Tokenizer *t) { advance_to_next_rune(t); token.kind = Token_Ellipsis; } + } else if ('0' <= t->curr_rune && t->curr_rune <= '9') { + token = scan_number_to_token(t, true); + } else { + token.kind = Token_Period; } break;