fixed bug of subvec

This commit is contained in:
Valk Richard Li 2020-10-28 22:43:02 +08:00
parent 2923d24e6c
commit 269d81ae5b
1 changed files with 6 additions and 9 deletions

View File

@ -774,16 +774,13 @@ int nasal_runtime::call_vector(nasal_ast& node,int base_value_addr,int local_sco
{
end_index=begin_index<0? -1:reference_value.size()-1;
}
else if(!begin_is_nil && !end_is_nil)
else if(!begin_is_nil && !end_is_nil && begin_index>=end_index)
{
if(begin_index>=end_index)
{
std::cout<<">> [runtime] call_vector: begin index must be less than end index.\n";
++error;
return -1;
}
std::cout<<">> [runtime] call_vector: begin index must be less than end index.\n";
++error;
return -1;
}
for(int i=begin_index;i<end_index;++i)
for(int i=begin_index;i<=end_index;++i)
called_value_addrs.push_back(reference_value.get_value_address(i));
nasal_vm.del_reference(begin_value_addr);
nasal_vm.del_reference(end_value_addr);
@ -818,7 +815,7 @@ int nasal_runtime::call_vector(nasal_ast& node,int base_value_addr,int local_sco
}
}
// generate sub-vector
if(called_value_addrs.size()==1)
if(call_size==1 && node.get_children()[0].get_type()!=ast_subvec)
{
int value_addr=called_value_addrs[0];
nasal_vm.add_reference(value_addr);