bug fixed
This commit is contained in:
parent
c186662b2f
commit
b8c8d89cfd
|
@ -785,11 +785,6 @@ int nasal_scalar::nasal_scalar_and(int a_scalar_addr,int b_scalar_addr)
|
|||
nasal_vm.gc_get(new_value_addr).set_number(0);
|
||||
return new_value_addr;
|
||||
}
|
||||
else
|
||||
{
|
||||
nasal_vm.add_reference(a_scalar_addr);
|
||||
return a_scalar_addr;
|
||||
}
|
||||
}
|
||||
else if(a_ref.type==vm_nil)
|
||||
{
|
||||
|
@ -818,11 +813,6 @@ int nasal_scalar::nasal_scalar_and(int a_scalar_addr,int b_scalar_addr)
|
|||
nasal_vm.gc_get(new_value_addr).set_number(0);
|
||||
return new_value_addr;
|
||||
}
|
||||
else
|
||||
{
|
||||
nasal_vm.add_reference(a_scalar_addr);
|
||||
return a_scalar_addr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1029,6 +1019,15 @@ int nasal_scalar::nasal_scalar_cmp_equal(int a_scalar_addr,int b_scalar_addr)
|
|||
}
|
||||
else if((a_ref.type==vm_number || a_ref.type==vm_string) && (b_ref.type==vm_number || b_ref.type==vm_string))
|
||||
{
|
||||
if(a_ref.type==vm_string && b_ref.type==vm_string)
|
||||
{
|
||||
std::string astr=*(std::string*)a_ref.scalar_ptr;
|
||||
std::string bstr=*(std::string*)b_ref.scalar_ptr;
|
||||
int new_value_address=nasal_vm.gc_alloc();
|
||||
nasal_vm.gc_get(new_value_address).set_type(vm_number);
|
||||
nasal_vm.gc_get(new_value_address).set_number((double)(astr==bstr));
|
||||
return new_value_address;
|
||||
}
|
||||
double a_num;
|
||||
double b_num;
|
||||
if(a_ref.type==vm_number) a_num=*(double*)a_ref.scalar_ptr;
|
||||
|
@ -1038,8 +1037,10 @@ int nasal_scalar::nasal_scalar_cmp_equal(int a_scalar_addr,int b_scalar_addr)
|
|||
a_num=trans_string_to_number(*(std::string*)a_ref.scalar_ptr);
|
||||
else
|
||||
{
|
||||
std::cout<<">> [vm] scalar_cmp_equal: "<<*(std::string*)a_ref.scalar_ptr<<" is not a numerable string."<<std::endl;
|
||||
return -1;
|
||||
int new_value_address=nasal_vm.gc_alloc();
|
||||
nasal_vm.gc_get(new_value_address).set_type(vm_number);
|
||||
nasal_vm.gc_get(new_value_address).set_number((double)0);
|
||||
return new_value_address;
|
||||
}
|
||||
}
|
||||
if(b_ref.type==vm_number) b_num=*(double*)b_ref.scalar_ptr;
|
||||
|
@ -1049,8 +1050,10 @@ int nasal_scalar::nasal_scalar_cmp_equal(int a_scalar_addr,int b_scalar_addr)
|
|||
b_num=trans_string_to_number(*(std::string*)b_ref.scalar_ptr);
|
||||
else
|
||||
{
|
||||
std::cout<<">> [vm] scalar_cmp_equal: "<<*(std::string*)b_ref.scalar_ptr<<" is not a numerable string."<<std::endl;
|
||||
return -1;
|
||||
int new_value_address=nasal_vm.gc_alloc();
|
||||
nasal_vm.gc_get(new_value_address).set_type(vm_number);
|
||||
nasal_vm.gc_get(new_value_address).set_number((double)0);
|
||||
return new_value_address;
|
||||
}
|
||||
}
|
||||
int new_value_address=nasal_vm.gc_alloc();
|
||||
|
@ -1110,8 +1113,10 @@ int nasal_scalar::nasal_scalar_cmp_not_equal(int a_scalar_addr,int b_scalar_addr
|
|||
a_num=trans_string_to_number(*(std::string*)a_ref.scalar_ptr);
|
||||
else
|
||||
{
|
||||
std::cout<<">> [vm] scalar_cmp_equal: "<<*(std::string*)a_ref.scalar_ptr<<" is not a numerable string."<<std::endl;
|
||||
return -1;
|
||||
int new_value_address=nasal_vm.gc_alloc();
|
||||
nasal_vm.gc_get(new_value_address).set_type(vm_number);
|
||||
nasal_vm.gc_get(new_value_address).set_number((double)1);
|
||||
return new_value_address;
|
||||
}
|
||||
}
|
||||
if(b_ref.type==vm_number) b_num=*(double*)b_ref.scalar_ptr;
|
||||
|
@ -1121,8 +1126,10 @@ int nasal_scalar::nasal_scalar_cmp_not_equal(int a_scalar_addr,int b_scalar_addr
|
|||
b_num=trans_string_to_number(*(std::string*)b_ref.scalar_ptr);
|
||||
else
|
||||
{
|
||||
std::cout<<">> [vm] scalar_cmp_equal: "<<*(std::string*)b_ref.scalar_ptr<<" is not a numerable string."<<std::endl;
|
||||
return -1;
|
||||
int new_value_address=nasal_vm.gc_alloc();
|
||||
nasal_vm.gc_get(new_value_address).set_type(vm_number);
|
||||
nasal_vm.gc_get(new_value_address).set_number((double)1);
|
||||
return new_value_address;
|
||||
}
|
||||
}
|
||||
int new_value_address=nasal_vm.gc_alloc();
|
||||
|
|
|
@ -1349,11 +1349,16 @@ int nasal_runtime::calculation(nasal_ast& node,int local_scope_addr)
|
|||
else if(calculation_type==ast_or)
|
||||
{
|
||||
int left_gc_addr=calculation(node.get_children()[0],local_scope_addr);
|
||||
int right_gc_addr=calculation(node.get_children()[1],local_scope_addr);
|
||||
ret_address=nasal_scalar_calculator.nasal_scalar_or(left_gc_addr,right_gc_addr);
|
||||
// delete the reference of temporary values
|
||||
nasal_vm.del_reference(left_gc_addr);
|
||||
nasal_vm.del_reference(right_gc_addr);
|
||||
if(check_condition(left_gc_addr))
|
||||
ret_address=left_gc_addr;
|
||||
else
|
||||
{
|
||||
int right_gc_addr=calculation(node.get_children()[1],local_scope_addr);
|
||||
ret_address=nasal_scalar_calculator.nasal_scalar_or(left_gc_addr,right_gc_addr);
|
||||
// delete the reference of temporary values
|
||||
nasal_vm.del_reference(left_gc_addr);
|
||||
nasal_vm.del_reference(right_gc_addr);
|
||||
}
|
||||
}
|
||||
else if(calculation_type==ast_unary_not)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue