From c99d5ab781abc6d777cce3f603921b2817d08ede Mon Sep 17 00:00:00 2001 From: JailDoctor Date: Mon, 3 May 2021 19:09:30 +0200 Subject: [PATCH] [BUG] Parser skipped following token. [BUG] Const being declared could be used in its init expression --- parser.cpp | 7 ++++--- test.vb | 4 +--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/parser.cpp b/parser.cpp index e8e9ba0..679a8b7 100644 --- a/parser.cpp +++ b/parser.cpp @@ -294,7 +294,7 @@ static void parse_expr_atom() { return; } else { // [RZC 03/05/2021] TODO: Revisar funcions - parser_finished = true; error_raise("Syntax error"); + parser_finished = true; error_raise("Unknown identifier"); return; } // [RZC 27/04/2021] Per ara llevem les constants @@ -413,18 +413,19 @@ static void parse_const() { EXPECT(TOKEN_IDENTIFIER, "Expected identifier"); char const_name[40]; strcpy(const_name, tkn_get_string()); + if (scope_variable_exists(const_name)) HALT("Identifier already exists"); tkn_next(); EXPECT(TOKEN_AS, "Expected 'as'"); tkn_next(); EXPECT(TOKEN_IDENTIFIER, "Expected type identifier"); char type_name[40]; strcpy(type_name, tkn_get_string()); const int type_num = types_exist(type_name); if (type_num == -1) HALT("Unknown type"); - const int var_address = scope_declare_variable(const_name, type_num, 0); tkn_next(); EXPECT(TOKEN_EQ, "Expected '='"); tkn_next(); parse_expression(); + const int var_address = scope_declare_variable(const_name, type_num, 0); emmit(scope_is_local() ? OP_STL : OP_ST); emmit_dw(var_address); - tkn_next(); + //tkn_next(); } /*static void parse_dim() { diff --git a/test.vb b/test.vb index 4bd08a8..893a280 100644 --- a/test.vb +++ b/test.vb @@ -1,4 +1,2 @@ - ' Esto es un comentario - -const perico as number = 4-2 +const perico as number = 4-perico