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 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:
|
||||||
|
|||||||
Reference in New Issue
Block a user