diff --git a/HISTORY b/HISTORY index 1a4ac14..d9bd96c 100755 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,6 @@ +May. 6 2017 +Added a tobe returned parameter to the mb_eval_routine function + May. 3 2017 Added reenterable running Fixed a multiple disposing bug diff --git a/MY-BASIC Quick Reference.pdf b/MY-BASIC Quick Reference.pdf index e044a9a..f482385 100644 Binary files a/MY-BASIC Quick Reference.pdf and b/MY-BASIC Quick Reference.pdf differ diff --git a/core/my_basic.c b/core/my_basic.c index c68c854..4ac66d5 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -1535,17 +1535,17 @@ static void _real_to_str(real_t r, char* str, size_t size, size_t afterpoint); break; # define _UNREF_COLL_IT(__o) \ case _DT_LIST_IT: \ - _destroy_list_it(obj->data.list_it); \ + _destroy_list_it((__o)->data.list_it); \ break; \ case _DT_DICT_IT: \ - _destroy_dict_it(obj->data.dict_it); \ + _destroy_dict_it((__o)->data.dict_it); \ break; # define _ADDGC_COLL_IT(__o, __g) \ case _DT_LIST_IT: \ - _destroy_list_it(obj->data.list_it); \ + _destroy_list_it((__o)->data.list_it); \ break; \ case _DT_DICT_IT: \ - _destroy_dict_it(obj->data.dict_it); \ + _destroy_dict_it((__o)->data.dict_it); \ break; #else /* MB_ENABLE_COLLECTION_LIB */ # define _REF_COLL(__o) { (void)(__o); } @@ -12934,7 +12934,7 @@ _exit: } /* Evaluate a sub routine */ -int mb_eval_routine(struct mb_interpreter_t* s, void** l, mb_value_t val, mb_value_t* args, unsigned argc) { +int mb_eval_routine(struct mb_interpreter_t* s, void** l, mb_value_t val, mb_value_t* args, unsigned argc, mb_value_t* ret) { int result = MB_FUNC_OK; _object_t obj; @@ -12952,6 +12952,14 @@ int mb_eval_routine(struct mb_interpreter_t* s, void** l, mb_value_t val, mb_val _public_value_to_internal_object(&val, &obj); result = _eval_routine(s, (_ls_node_t**)l, args, argc, obj.data.routine, _has_routine_fun_arg, _pop_routine_fun_arg); + if(ret) { + _running_context_t* running = s->running_context; + _assign_public_value(ret, &running->intermediate_value); + _MAKE_NIL(&obj); + _public_value_to_internal_object(ret, &obj); + _ADDGC(&obj, &s->gc); + } + _exit: return result; } diff --git a/core/my_basic.h b/core/my_basic.h index 851909b..d5f20a9 100755 --- a/core/my_basic.h +++ b/core/my_basic.h @@ -629,7 +629,7 @@ MBAPI int mb_dispose_value(struct mb_interpreter_t* s, mb_value_t val); MBAPI int mb_get_routine(struct mb_interpreter_t* s, void** l, const char* n, mb_value_t* val); MBAPI int mb_set_routine(struct mb_interpreter_t* s, void** l, const char* n, mb_routine_func_t f, bool_t force); -MBAPI int mb_eval_routine(struct mb_interpreter_t* s, void** l, mb_value_t val, mb_value_t* args, unsigned argc); +MBAPI int mb_eval_routine(struct mb_interpreter_t* s, void** l, mb_value_t val, mb_value_t* args, unsigned argc, mb_value_t* ret/* = NULL*/); MBAPI int mb_load_string(struct mb_interpreter_t* s, const char* l, bool_t reset/* = true*/); MBAPI int mb_load_file(struct mb_interpreter_t* s, const char* f);