From 89540475cfc0ea3fcd3cc7f84855681d77931ae9 Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Sun, 20 Dec 2020 20:18:02 +0800 Subject: [PATCH] update --- nasal_bytecode_vm.h | 6 +++--- nasal_gc.h | 26 ++++++++++++++------------ 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/nasal_bytecode_vm.h b/nasal_bytecode_vm.h index ae43fe0..0ba8c69 100644 --- a/nasal_bytecode_vm.h +++ b/nasal_bytecode_vm.h @@ -677,7 +677,7 @@ void nasal_bytecode_vm::opr_counter() void nasal_bytecode_vm::opr_forindex() { nasal_vector& ref=(*value_stack_top)->get_vector(); - counter_stack.top()++; + ++counter_stack.top(); if(counter_stack.top()>=ref.size()) { vm.del_reference(*value_stack_top--); @@ -693,7 +693,7 @@ void nasal_bytecode_vm::opr_forindex() void nasal_bytecode_vm::opr_foreach() { nasal_vector& ref=(*value_stack_top)->get_vector(); - counter_stack.top()++; + ++counter_stack.top(); if(counter_stack.top()>=ref.size()) { vm.del_reference(*value_stack_top--); @@ -701,7 +701,7 @@ void nasal_bytecode_vm::opr_foreach() ptr=exec_code[ptr].index-1; return; } - nasal_scalar* res=ref.get_value_address(counter_stack.top()); + nasal_scalar* res=ref[counter_stack.top()]; vm.add_reference(res); *(++value_stack_top)=res; return; diff --git a/nasal_gc.h b/nasal_gc.h index ad758e3..4816314 100644 --- a/nasal_gc.h +++ b/nasal_gc.h @@ -195,20 +195,22 @@ nasal_scalar* nasal_vector::get_value_address(int index) int vec_size=elems.size(); if(index<-vec_size || index>=vec_size) { - std::cout<<">> [runtime] nasal_vector::get_value_address: index out of range: "<> [vm] nasal_vector::get_value_address: index out of range: "<=0]]; } nasal_scalar** nasal_vector::get_mem_address(int index) { int vec_size=elems.size(); if(index<-vec_size || index>=vec_size) { - std::cout<<">> [runtime] nasal_vector::get_mem_address: index out of range: "<> [vm] nasal_vector::get_mem_address: index out of range: "<=0]]; } void nasal_vector::print() { @@ -462,26 +464,26 @@ nasal_closure::~nasal_closure() void nasal_closure::add_scope() { std::map new_scope; - elems.push_back(new_scope); + elems.push_front(new_scope); return; } void nasal_closure::del_scope() { - std::map& last_scope=elems.back(); + std::map& last_scope=elems.front(); for(std::map::iterator i=last_scope.begin();i!=last_scope.end();++i) vm.del_reference(i->second); - elems.pop_back(); + elems.pop_front(); return; } void nasal_closure::add_new_value(int key,nasal_scalar* value_address) { - if(elems.back().find(key)!=elems.back().end()) + if(elems.front().find(key)!=elems.front().end()) { // if this value already exists,delete the old value and update a new value - nasal_scalar* old_val_address=elems.back()[key]; + nasal_scalar* old_val_address=elems.front()[key]; vm.del_reference(old_val_address); } - elems.back()[key]=value_address; + elems.front()[key]=value_address; return; } nasal_scalar* nasal_closure::get_value_address(int key) @@ -489,7 +491,7 @@ nasal_scalar* nasal_closure::get_value_address(int key) nasal_scalar* ret_address=NULL; for(std::list >::iterator i=elems.begin();i!=elems.end();++i) if(i->find(key)!=i->end()) - ret_address=(*i)[key]; + return (*i)[key]; return ret_address; } nasal_scalar** nasal_closure::get_mem_address(int key) @@ -497,7 +499,7 @@ nasal_scalar** nasal_closure::get_mem_address(int key) nasal_scalar** ret_address=NULL; for(std::list >::iterator i=elems.begin();i!=elems.end();++i) if(i->find(key)!=i->end()) - ret_address=&((*i)[key]); + return &((*i)[key]); return ret_address; } void nasal_closure::set_closure(nasal_closure& tmp)