From 86bb7ad464ada8d220414065067fcc3aa66c8309 Mon Sep 17 00:00:00 2001 From: paladin-t Date: Wed, 16 Mar 2016 16:14:27 +0800 Subject: [PATCH] *fixed an execution issue after a lambda. --- HISTORY | 1 + core/my_basic.c | 32 +++++++++++++++++--------------- output/my_basic.exe | Bin 367104 -> 367104 bytes 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/HISTORY b/HISTORY index 6b09593..f0f39ba 100755 --- a/HISTORY +++ b/HISTORY @@ -1,4 +1,5 @@ Mar. 16 2016 +Fixed an execution issue after a lambda Fixed a cannot RETURN bug from a FOR loop in a sub routine Fixed a memory leak with referenced data in a variable argument list diff --git a/core/my_basic.c b/core/my_basic.c index b2272f6..a187284 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -1673,7 +1673,7 @@ static void _tidy_intermediate_value(_ref_t* ref, void* data); static _object_t* _eval_var_in_print(mb_interpreter_t* s, _object_t** val_ptr, _ls_node_t** ast, _object_t* obj); static void _stepped(mb_interpreter_t* s, _ls_node_t* ast); -static int _execute_statement(mb_interpreter_t* s, _ls_node_t** l); +static int _execute_statement(mb_interpreter_t* s, _ls_node_t** l, bool_t force_next); static int _common_end_looping(mb_interpreter_t* s, _ls_node_t** l); static int _common_keep_looping(mb_interpreter_t* s, _ls_node_t** l, _var_t* var_loop); static int _execute_normal_for_loop(mb_interpreter_t* s, _ls_node_t** l, _var_t* var_loop); @@ -3918,7 +3918,7 @@ static int _eval_script_routine(mb_interpreter_t* s, _ls_node_t** l, mb_value_t* } do { - result = _execute_statement(s, l); + result = _execute_statement(s, l, true); ast = (_ls_node_t*)*l; if(result == MB_SUB_RETURN) { result = MB_FUNC_OK; @@ -4025,7 +4025,7 @@ static int _eval_lambda_routine(mb_interpreter_t* s, _ls_node_t** l, mb_value_t* } do { - result = _execute_statement(s, l); + result = _execute_statement(s, l, true); ast = (_ls_node_t*)*l; if(result == MB_SUB_RETURN) { result = MB_FUNC_OK; @@ -9029,11 +9029,12 @@ static void _destroy_var_arg(void* data, void* extra, _gc_t* gc) { /* Destroy an object in variable argument list */ _object_t* obj = 0; mb_unrefvar(extra); + mb_unrefvar(gc); mb_assert(data); obj = (_object_t*)data; - _ADDGC(obj, gc); + _UNREF(obj); safe_free(obj); } @@ -9230,7 +9231,7 @@ static _object_t* _eval_var_in_print(mb_interpreter_t* s, _object_t** val_ptr, _ switch(obj->type) { case _DT_ROUTINE: - _execute_statement(s, ast); + _execute_statement(s, ast, true); _MAKE_NIL(&tmp); _public_value_to_internal_object(&s->running_context->intermediate_value, &tmp); if(tmp.type == _DT_STRING) { @@ -9277,7 +9278,7 @@ static void _stepped(mb_interpreter_t* s, _ls_node_t* ast) { } } -static int _execute_statement(mb_interpreter_t* s, _ls_node_t** l) { +static int _execute_statement(mb_interpreter_t* s, _ls_node_t** l, bool_t force_next) { /* Execute the ast, this is the core execution function */ int result = MB_FUNC_OK; _ls_node_t* ast = 0; @@ -9402,7 +9403,8 @@ _retry: if(!obj) { /* Do nothing */ } else if(_IS_EOS(obj)) { - ast = ast->next; + if(force_next || result != MB_SUB_RETURN) + ast = ast->next; } else if(_IS_SEP(obj, ':')) { skip_to_eoi = false; ast = ast->next; @@ -9485,7 +9487,7 @@ static int _common_keep_looping(mb_interpreter_t* s, _ls_node_t** l, _var_t* var obj = (_object_t*)ast->data; while(!_IS_FUNC(obj, _core_next)) { - result = _execute_statement(s, &ast); + result = _execute_statement(s, &ast, false); if(result == MB_LOOP_CONTINUE) { /* NEXT */ if(!running->next_loop_var || running->next_loop_var == var_loop) { /* This loop */ running->next_loop_var = 0; @@ -9547,7 +9549,7 @@ static int _execute_normal_for_loop(mb_interpreter_t* s, _ls_node_t** l, _var_t* ass_tuple3_ptr = &ass_tuple3; /* Get begin value */ - result = _execute_statement(s, &ast); + result = _execute_statement(s, &ast, true); if(result != MB_FUNC_OK) goto _exit; ast = ast->prev; @@ -11860,7 +11862,7 @@ int mb_run(struct mb_interpreter_t* s) { } do { - result = _execute_statement(s, &ast); + result = _execute_statement(s, &ast, true); if(result != MB_FUNC_OK && result != MB_SUB_RETURN) { if(result != MB_FUNC_SUSPEND && s->error_handler) { if(result >= MB_EXTENDED_ABORT) @@ -13029,7 +13031,7 @@ _elseif: break; } - result = _execute_statement(s, &ast); + result = _execute_statement(s, &ast, true); if(result != MB_FUNC_OK) goto _exit; if(ast) @@ -13090,7 +13092,7 @@ _elseif: break; } - result = _execute_statement(s, &ast); + result = _execute_statement(s, &ast, true); if(result != MB_FUNC_OK) goto _exit; if(ast) @@ -13283,7 +13285,7 @@ _loop_begin: /* Keep looping */ obj = (_object_t*)ast->data; while(!_IS_FUNC(obj, _core_wend)) { - result = _execute_statement(s, &ast); + result = _execute_statement(s, &ast, true); if(result == MB_LOOP_BREAK) { /* EXIT */ if(_skip_struct(s, &ast, _core_while, _core_wend) != MB_FUNC_OK) goto _exit; @@ -13362,7 +13364,7 @@ _loop_begin: obj = (_object_t*)ast->data; while(!_IS_FUNC(obj, _core_until)) { - result = _execute_statement(s, &ast); + result = _execute_statement(s, &ast, true); if(result == MB_LOOP_BREAK) { /* EXIT */ if(_skip_struct(s, &ast, _core_do, _core_until) != MB_FUNC_OK) goto _exit; @@ -13828,7 +13830,7 @@ static int _core_class(mb_interpreter_t* s, void** l) { /* Execute class body */ running = _push_scope_by_class(s, instance->scope); do { - result = _execute_statement(s, (_ls_node_t**)l); + result = _execute_statement(s, (_ls_node_t**)l, true); if(result != MB_FUNC_OK && s->error_handler) { if(result >= MB_EXTENDED_ABORT) s->last_error = SE_EA_EXTENDED_ABORT; diff --git a/output/my_basic.exe b/output/my_basic.exe index 9e01726dddd06c2d04b59e88f7897be5bd91edfc..12a0e8dd6384d308e65c31606a7564420953adb8 100755 GIT binary patch delta 12557 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 delta 12513 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