From c8d18f2dda333a2d6f9399c8525355ffebe30579 Mon Sep 17 00:00:00 2001 From: paladin-t Date: Tue, 12 Jan 2016 17:01:13 +0800 Subject: [PATCH] *improved sub routine by unreference objects which were out of scope. --- HISTORY | 1 + core/my_basic.c | 39 +++++++++++++++++++++++++++++++++++++-- output/my_basic.exe | Bin 347648 -> 348160 bytes 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/HISTORY b/HISTORY index b49748c..09d4dc2 100755 --- a/HISTORY +++ b/HISTORY @@ -1,4 +1,5 @@ Jan. 12 2016 +Improved sub routine by unreference objects which were out of scope Fixed a routine evaluation bug when it's stored in a variable Fixed a disposing issue with collection iterators Fixed some memory leak with lambda diff --git a/core/my_basic.c b/core/my_basic.c index 31fcaf2..8a15998 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -1459,6 +1459,7 @@ static int _destroy_object_not_compile_time(void* data, void* extra); static int _destroy_object_capsule_only(void* data, void* extra); static int _destroy_object_capsule_only_with_extra(void* data, void* extra); static int _do_nothing_on_object(void* data, void* extra); +static int _lose_object(void* data, void* extra); static int _remove_source_object(void* data, void* extra); static int _destroy_memory(void* data, void* extra); static int _compare_numbers(const _object_t* first, const _object_t* second); @@ -6723,9 +6724,10 @@ void _out_of_scope(mb_interpreter_t* s, _running_context_t* running) { _ls_destroy(running->refered_lambdas); running->refered_lambdas = 0; } -#else /* MB_ENABLE_LAMBDA */ - mb_unrefvar(running); #endif /* MB_ENABLE_LAMBDA */ + + if(running->var_dict) + _ht_foreach(running->var_dict, _lose_object); } _running_context_t* _find_scope(mb_interpreter_t* s, _running_context_t* p) { @@ -7234,6 +7236,39 @@ int _do_nothing_on_object(void* data, void* extra) { return result; } +int _lose_object(void* data, void* extra) { + /* Lose an object of of scope */ + int result = _OP_RESULT_NORMAL; + _object_t* obj = 0; + bool_t make_nil = true; + + mb_assert(data && extra); + + obj = (_object_t*)data; + switch(obj->type) { + case _DT_VAR: + _lose_object(obj->data.variable->data, extra); + make_nil = false; + + break; + _UNREF_USERTYPE_REF(obj) + _UNREF_ARRAY(obj) + _UNREF_COLL(obj) + _UNREF_CLASS(obj) + _UNREF_ROUTINE(obj) + default: + make_nil = false; + + break; + } + + if(make_nil) { + _MAKE_NIL(obj); + } + + return result; +} + int _remove_source_object(void* data, void* extra) { /* Remove an object referenced to source code */ int result = _OP_RESULT_DEL_NODE; diff --git a/output/my_basic.exe b/output/my_basic.exe index f581d914e1cdd6e2f847b0c3bac032c5c339cd4b..458ffb2f39cdb6b822ddd364bc9940d448cad53d 100755 GIT binary patch delta 15666 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

%UohcV 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 delta 15459 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 a;~#>bqM4z=)s@*3BWtf=iN8DR`~LtcJeBbP