diff --git a/parser.cpp b/parser.cpp index 99083b0..3f5aa3a 100644 --- a/parser.cpp +++ b/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: