Implemented closing of global scope
This commit is contained in:
11
parser.cpp
11
parser.cpp
@@ -96,6 +96,7 @@ static int num_constants;
|
||||
*/
|
||||
|
||||
static bool parser_finished = false;
|
||||
static bool global_closed = false;
|
||||
|
||||
/****************************************************************************************/
|
||||
/* GENERIC FUNCTIONS */
|
||||
@@ -507,6 +508,10 @@ static void parse_struct() {
|
||||
}
|
||||
|
||||
static void parse_function() {
|
||||
if (!global_closed) {
|
||||
emmit(OP_RET);
|
||||
global_closed = true;
|
||||
}
|
||||
EXPECT(TOKEN_IDENTIFIER, "Expected identifier");
|
||||
const std::string function_name = tkn_get_string();
|
||||
if (identifier_exists(function_name)) HALT("Identifier already exists");
|
||||
@@ -832,11 +837,11 @@ static void parse_global_statements() {
|
||||
current_line = tkn_get_line();
|
||||
switch (tkn_get_token()) {
|
||||
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:
|
||||
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:
|
||||
tkn_next(); parse_struct(); break;
|
||||
tkn_next(); if (!global_closed) { parse_struct(); } else { HALT("Structs must be defined before functions") } break;
|
||||
case TOKEN_FUNCTION:
|
||||
tkn_next(); parse_function(); break;
|
||||
case TOKEN_REM:
|
||||
|
||||
Reference in New Issue
Block a user