[BUG] Parser skipped following token.
[BUG] Const being declared could be used in its init expression
This commit is contained in:
@@ -294,7 +294,7 @@ static void parse_expr_atom() {
|
|||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
// [RZC 03/05/2021] TODO: Revisar funcions
|
// [RZC 03/05/2021] TODO: Revisar funcions
|
||||||
parser_finished = true; error_raise("Syntax error");
|
parser_finished = true; error_raise("Unknown identifier");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// [RZC 27/04/2021] Per ara llevem les constants
|
// [RZC 27/04/2021] Per ara llevem les constants
|
||||||
@@ -413,18 +413,19 @@ static void parse_const() {
|
|||||||
EXPECT(TOKEN_IDENTIFIER, "Expected identifier");
|
EXPECT(TOKEN_IDENTIFIER, "Expected identifier");
|
||||||
char const_name[40];
|
char const_name[40];
|
||||||
strcpy(const_name, tkn_get_string());
|
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_AS, "Expected 'as'");
|
||||||
tkn_next(); EXPECT(TOKEN_IDENTIFIER, "Expected type identifier");
|
tkn_next(); EXPECT(TOKEN_IDENTIFIER, "Expected type identifier");
|
||||||
char type_name[40];
|
char type_name[40];
|
||||||
strcpy(type_name, tkn_get_string());
|
strcpy(type_name, tkn_get_string());
|
||||||
const int type_num = types_exist(type_name);
|
const int type_num = types_exist(type_name);
|
||||||
if (type_num == -1) HALT("Unknown type");
|
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(); EXPECT(TOKEN_EQ, "Expected '='");
|
||||||
tkn_next(); parse_expression();
|
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(scope_is_local() ? OP_STL : OP_ST);
|
||||||
emmit_dw(var_address);
|
emmit_dw(var_address);
|
||||||
tkn_next();
|
//tkn_next();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*static void parse_dim() {
|
/*static void parse_dim() {
|
||||||
|
|||||||
Reference in New Issue
Block a user