From 8b101e4d3c3e7fe97279ccc87bda2816cca0262a Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Wed, 5 May 2021 10:14:57 +0200 Subject: [PATCH] Implemented closing of global scope --- parser.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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: