Implemented closing of global scope

This commit is contained in:
2021-05-05 10:14:57 +02:00
parent 37fdf1f42f
commit 8b101e4d3c

View File

@@ -96,6 +96,7 @@ static int num_constants;
*/ */
static bool parser_finished = false; static bool parser_finished = false;
static bool global_closed = false;
/****************************************************************************************/ /****************************************************************************************/
/* GENERIC FUNCTIONS */ /* GENERIC FUNCTIONS */
@@ -507,6 +508,10 @@ static void parse_struct() {
} }
static void parse_function() { static void parse_function() {
if (!global_closed) {
emmit(OP_RET);
global_closed = true;
}
EXPECT(TOKEN_IDENTIFIER, "Expected identifier"); EXPECT(TOKEN_IDENTIFIER, "Expected identifier");
const std::string function_name = tkn_get_string(); const std::string function_name = tkn_get_string();
if (identifier_exists(function_name)) HALT("Identifier already exists"); if (identifier_exists(function_name)) HALT("Identifier already exists");
@@ -832,11 +837,11 @@ static void parse_global_statements() {
current_line = tkn_get_line(); current_line = tkn_get_line();
switch (tkn_get_token()) { switch (tkn_get_token()) {
case TOKEN_CONST: case TOKEN_CONST:
tkn_next(); parse_const(); break; tkn_next(); if (!global_closed) { parse_const(); } else { HALT("Global constants must be defined before functions"); } break;
case TOKEN_VAR: case TOKEN_VAR:
tkn_next(); parse_var(); break; tkn_next(); if (!global_closed) { parse_var(); } else { HALT("Global variables must be defined before functions"); } break;
case TOKEN_STRUCT: case TOKEN_STRUCT:
tkn_next(); parse_struct(); break; tkn_next(); if (!global_closed) { parse_struct(); } else { HALT("Structs must be defined before functions") } break;
case TOKEN_FUNCTION: case TOKEN_FUNCTION:
tkn_next(); parse_function(); break; tkn_next(); parse_function(); break;
case TOKEN_REM: case TOKEN_REM: