bug fixed

This commit is contained in:
Valk Richard Li 2020-09-17 22:06:25 -07:00 committed by GitHub
parent fb908e5606
commit 6c7e7d50ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 6 deletions

View File

@ -1571,7 +1571,7 @@ void nasal_runtime::multi_assignment(nasal_ast& node,int local_scope_addr)
for(int i=0;i<id_size;++i) for(int i=0;i<id_size;++i)
{ {
nasal_ast& tmp_node=multi_call_node.get_children()[i]; nasal_ast& tmp_node=multi_call_node.get_children()[i];
if(tmp_node.get_type()!=ast_call) if(tmp_node.get_type()!=ast_call && tmp_node.get_type()!=ast_identifier)
{ {
std::cout<<">> [runtime] multi_assignment: multi-assignment must use available memory address."<<std::endl; std::cout<<">> [runtime] multi_assignment: multi-assignment must use available memory address."<<std::endl;
++error; ++error;
@ -1588,11 +1588,11 @@ void nasal_runtime::multi_assignment(nasal_ast& node,int local_scope_addr)
++error; ++error;
return; return;
} }
std::vector<int> value_table;
for(int i=0;i<val_size;++i) for(int i=0;i<val_size;++i)
{ value_table.push_back(calculation(value_node.get_children()[i],local_scope_addr));
int tmp_addr=calculation(value_node.get_children()[i],local_scope_addr); for(int i=0;i<val_size;++i)
nasal_vm.mem_change(mem_table[i],tmp_addr); nasal_vm.mem_change(mem_table[i],value_table[i]);
}
} }
else else
{ {
@ -1612,11 +1612,15 @@ void nasal_runtime::multi_assignment(nasal_ast& node,int local_scope_addr)
++error; ++error;
return; return;
} }
std::vector<int> value_table;
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.mem_change(mem_table[i],tmp_addr); nasal_vm.add_reference(tmp_addr);
value_table.push_back(tmp_addr);
} }
for(int i=0;i<id_size;++i)
nasal_vm.mem_change(mem_table[i],value_table[i]);
nasal_vm.del_reference(value_addr); nasal_vm.del_reference(value_addr);
} }
return; return;