fixed bug of multi-definition
This commit is contained in:
parent
d1434ec5d1
commit
a289a488f1
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue