bug fixed
This commit is contained in:
parent
33e544387e
commit
c5d700d0bc
17
nasal_gc.h
17
nasal_gc.h
|
@ -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())
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue