bug fixed

This commit is contained in:
Valk Richard Li
2020-12-01 20:43:56 +08:00
parent 3e884bb20a
commit 2dfbb88738
2 changed files with 16 additions and 17 deletions
+2 -15
View File
@@ -307,8 +307,6 @@ int nasal_hash::get_value_address(std::string key)
}
}
}
else
std::cout<<">> [runtime] cannot find hash member \""<<key<<"\".\n";
return ret_value_addr;
}
int nasal_hash::get_mem_address(std::string key)
@@ -334,13 +332,6 @@ int nasal_hash::get_mem_address(std::string key)
}
}
}
else
{
int val_addr=vm.gc_alloc(vm_nil);
int mem_addr=vm.mem_alloc(val_addr);
elems[key]=mem_addr;
ret_mem_addr=mem_addr;
}
return ret_mem_addr;
}
bool nasal_hash::check_contain(std::string key)
@@ -656,12 +647,10 @@ nasal_virtual_machine::~nasal_virtual_machine()
{
garbage_collector_memory[i]->ref_cnt=0;
garbage_collector_memory[i]->collected=true;
garbage_collector_memory[i]->elem.clear();
}
for(int i=0;i<gc_mem_size;++i)
{
garbage_collector_memory[i]->elem.clear();
delete garbage_collector_memory[i];
}
while(!garbage_collector_free_space.empty())
garbage_collector_free_space.pop();
while(!memory_manager_free_space.empty())
@@ -699,12 +688,10 @@ void nasal_virtual_machine::clear()
{
garbage_collector_memory[i]->ref_cnt=0;
garbage_collector_memory[i]->collected=true;
garbage_collector_memory[i]->elem.clear();
}
for(int i=0;i<gc_mem_size;++i)
{
garbage_collector_memory[i]->elem.clear();
delete garbage_collector_memory[i];
}
while(!garbage_collector_free_space.empty())
garbage_collector_free_space.pop();
while(!memory_manager_free_space.empty())
+14 -2
View File
@@ -770,7 +770,13 @@ int nasal_runtime::call_hash(nasal_ast& node,int base_value_addr,int local_scope
die(node.get_line(),"called a value that is not a hash");
return -1;
}
int ret_value_addr=nasal_vm.gc_get(base_value_addr).get_hash().get_value_address(node.get_str());
std::string str=node.get_str();
int ret_value_addr=nasal_vm.gc_get(base_value_addr).get_hash().get_value_address(str);
if(ret_value_addr<0)
{
die(node.get_line(),"cannot find member named \""+str+"\"");
return -1;
}
nasal_vm.add_reference(ret_value_addr);
return ret_value_addr;
}
@@ -1073,7 +1079,13 @@ int nasal_runtime::call_hash_mem(nasal_ast& node,int base_mem_addr,int local_sco
die(node.get_line(),"called a value that is not a hash");
return -1;
}
int ret_mem_addr=nasal_vm.gc_get(base_value_addr).get_hash().get_mem_address(node.get_str());
nasal_hash& ref=nasal_vm.gc_get(base_value_addr).get_hash();
int ret_mem_addr=ref.get_mem_address(node.get_str());
if(ret_mem_addr<0)
{
ref.add_elem(node.get_str(),nasal_vm.gc_alloc(vm_nil));
ret_mem_addr=ref.get_mem_address(node.get_str());
}
return ret_mem_addr;
}
int nasal_runtime::nasal_scalar_add(int a_scalar_addr,int b_scalar_addr)