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