Working on making sure functions return a value
This commit is contained in:
13
parser.cpp
13
parser.cpp
@@ -183,7 +183,7 @@ static const std::string generate_anonymous_labelname() {
|
||||
/****************************************************************************************/
|
||||
|
||||
static void parse_expression();
|
||||
static void parse_statements();
|
||||
static const bool parse_statements();
|
||||
|
||||
/* XXX [RZC 27/04/2021] No usat en JailBasic
|
||||
//static void parse_strleft();
|
||||
@@ -466,6 +466,7 @@ static void parse_struct() {
|
||||
}
|
||||
|
||||
static void parse_function() {
|
||||
|
||||
if (!global_closed) {
|
||||
emmit(OP_RET);
|
||||
global_closed = true;
|
||||
@@ -508,7 +509,7 @@ static void parse_function() {
|
||||
function_set_type(type_num);
|
||||
tkn_next();
|
||||
}
|
||||
parse_statements();
|
||||
if (!parse_statements() && (function_get_type() != -1)) HALT("Function must return a value");
|
||||
scope_close_local();
|
||||
EXPECT(TOKEN_END, "Expected statement or 'end'");
|
||||
tkn_next();
|
||||
@@ -756,7 +757,8 @@ static void parse_call() {
|
||||
}
|
||||
}
|
||||
*/
|
||||
static void parse_statements() {
|
||||
static const bool parse_statements() {
|
||||
bool return_called = false;
|
||||
while (!parser_finished) {
|
||||
current_line = tkn_get_line();
|
||||
switch (tkn_get_token()) {
|
||||
@@ -775,7 +777,7 @@ static void parse_statements() {
|
||||
tkn_next(); parse_continue(); break;
|
||||
*/
|
||||
case TOKEN_RETURN:
|
||||
tkn_next(); parse_return(); break;
|
||||
tkn_next(); parse_return(); return_called = true; break;
|
||||
case TOKEN_REM:
|
||||
tkn_next(); break;
|
||||
|
||||
@@ -787,9 +789,10 @@ static void parse_statements() {
|
||||
parse_let(); break;
|
||||
*/
|
||||
default:
|
||||
return;
|
||||
return return_called;
|
||||
}
|
||||
}
|
||||
return return_called;
|
||||
}
|
||||
|
||||
static void parse_global_statements() {
|
||||
|
||||
Reference in New Issue
Block a user