fixed bug of multi-definition

This commit is contained in:
Valk Richard Li 2020-10-21 06:19:03 -07:00 committed by GitHub
parent d1434ec5d1
commit a289a488f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 2 additions and 3 deletions

View File

@ -1586,6 +1586,7 @@ void nasal_runtime::definition(nasal_ast& node,int local_scope_addr)
for(int i=0;i<id_size;++i)
{
int tmp_addr=ref_vector.get_value_address(i);
nasal_vm.add_reference(tmp_addr);
nasal_vm.gc_get(local_scope_addr<0?global_scope_address:local_scope_addr).get_closure().add_new_value(identifier_table[i],tmp_addr);
}
nasal_vm.del_reference(value_addr);
@ -1628,9 +1629,7 @@ void nasal_runtime::multi_assignment(nasal_ast& node,int local_scope_addr)
else
{
int value_addr=calculation(value_node,local_scope_addr);
if(value_addr<0)
return;
if(nasal_vm.gc_get(value_addr).get_type()!=vm_vector)
if(value_addr<0 || nasal_vm.gc_get(value_addr).get_type()!=vm_vector)
{
std::cout<<">> [runtime] multi_assignment: must use vector in multi-assignment.\n";
++error;