bug fixed

This commit is contained in:
Valk Richard Li 2020-12-01 20:43:56 +08:00
parent 33e544387e
commit c5d700d0bc
2 changed files with 16 additions and 17 deletions

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())

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)