From e03da2f73712b230889c02a7a60c770d60fe12fa Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Sun, 20 Dec 2020 13:39:24 +0800 Subject: [PATCH] update --- nasal_bytecode_vm.h | 6 +----- nasal_gc.h | 10 +++++++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/nasal_bytecode_vm.h b/nasal_bytecode_vm.h index 4a2da07..ae43fe0 100644 --- a/nasal_bytecode_vm.h +++ b/nasal_bytecode_vm.h @@ -213,11 +213,7 @@ void nasal_bytecode_vm::opr_newfunc() if(local_scope_top) val_addr->get_func().set_closure_addr(local_scope_top); else - { - nasal_scalar* tmp_closure=vm.gc_alloc(vm_closure); - val_addr->get_func().set_closure_addr(tmp_closure); - vm.del_reference(tmp_closure); - } + val_addr->get_func().set_new_closure(); *(++value_stack_top)=val_addr; return; } diff --git a/nasal_gc.h b/nasal_gc.h index fb4154a..ad758e3 100644 --- a/nasal_gc.h +++ b/nasal_gc.h @@ -84,6 +84,7 @@ public: int get_dynamic_para(); std::vector& get_default(); void set_closure_addr(nasal_scalar*); + void set_new_closure(); nasal_scalar* get_closure_addr(); }; @@ -390,7 +391,7 @@ nasal_function::~nasal_function() if(closure_addr) vm.del_reference(closure_addr); for(int i=0;i=0) + if(default_para_addr[i]) vm.del_reference(default_para_addr[i]); return; } @@ -428,13 +429,16 @@ std::vector& nasal_function::get_default() } void nasal_function::set_closure_addr(nasal_scalar* value_address) { - if(closure_addr) - vm.del_reference(closure_addr); nasal_scalar* new_closure=vm.gc_alloc(vm_closure); new_closure->get_closure().set_closure(value_address->get_closure()); closure_addr=new_closure; return; } +void nasal_function::set_new_closure() +{ + closure_addr=vm.gc_alloc(vm_closure); + return; +} nasal_scalar* nasal_function::get_closure_addr() { return closure_addr;