*fixed a multiple disposing bug with upvalues.
This commit is contained in:
parent
851c63b639
commit
f1fba035ac
3
HISTORY
3
HISTORY
@ -1,3 +1,6 @@
|
|||||||
|
Jul. 14 2018
|
||||||
|
Fixed a multiple disposing bug with upvalues
|
||||||
|
|
||||||
May. 13 2018
|
May. 13 2018
|
||||||
Added platform dependent macros for Emscripten
|
Added platform dependent macros for Emscripten
|
||||||
|
|
||||||
|
@ -8915,6 +8915,10 @@ static void _mark_upvalue(mb_interpreter_t* s, _lambda_t* lambda, _object_t* obj
|
|||||||
running = s->running_context;
|
running = s->running_context;
|
||||||
scp = _search_identifier_in_scope_chain(s, running, n, _PATHING_NORMAL, 0, &found_in_scope);
|
scp = _search_identifier_in_scope_chain(s, running, n, _PATHING_NORMAL, 0, &found_in_scope);
|
||||||
if(scp && found_in_scope) {
|
if(scp && found_in_scope) {
|
||||||
|
_object_t* rot = (_object_t*)scp->data;
|
||||||
|
rot = _GET_ROUTINE(rot);
|
||||||
|
if(rot && lambda->scope && lambda->scope->prev != found_in_scope)
|
||||||
|
return;
|
||||||
if(!found_in_scope->refered_lambdas)
|
if(!found_in_scope->refered_lambdas)
|
||||||
found_in_scope->refered_lambdas = _ls_create();
|
found_in_scope->refered_lambdas = _ls_create();
|
||||||
if(!_ls_find(found_in_scope->refered_lambdas, lambda, (_ls_compare_t)_ht_cmp_intptr, 0))
|
if(!_ls_find(found_in_scope->refered_lambdas, lambda, (_ls_compare_t)_ht_cmp_intptr, 0))
|
||||||
@ -9041,17 +9045,19 @@ static int _fill_with_upvalue(void* data, void* extra, _upvalue_scope_tuple_t* t
|
|||||||
ast = tuple->lambda->entry;
|
ast = tuple->lambda->entry;
|
||||||
while(ast && ast != tuple->lambda->end->next) {
|
while(ast && ast != tuple->lambda->end->next) {
|
||||||
_object_t* aobj = (_object_t*)ast->data;
|
_object_t* aobj = (_object_t*)ast->data;
|
||||||
switch(aobj->type) {
|
if(aobj) {
|
||||||
case _DT_VAR:
|
switch(aobj->type) {
|
||||||
if(!strcmp(aobj->data.variable->name, ovar->data.variable->name)) {
|
case _DT_VAR:
|
||||||
|
if(!strcmp(aobj->data.variable->name, ovar->data.variable->name)) {
|
||||||
#ifdef MB_ENABLE_CLASS
|
#ifdef MB_ENABLE_CLASS
|
||||||
aobj->data.variable->pathing = _PATHING_UPVALUE;
|
aobj->data.variable->pathing = _PATHING_UPVALUE;
|
||||||
#endif /* MB_ENABLE_CLASS */
|
#endif /* MB_ENABLE_CLASS */
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default: /* Do nothing */
|
default: /* Do nothing */
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ast = ast->next;
|
ast = ast->next;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user