Working on making sure functions return a value

This commit is contained in:
2021-05-05 16:11:49 +02:00
parent 287bf565bd
commit 835cae35bb
3 changed files with 11 additions and 8 deletions

View File

@@ -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() {