mirror of
https://github.com/ValKmjolnir/Nasal-Interpreter.git
synced 2026-07-23 11:28:45 +08:00
bug fixed
This commit is contained in:
+2
-15
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user