From b8c8d89cfd7365af77c4e5cc860d24ce1cdd4b28 Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Sun, 13 Sep 2020 00:53:28 -0700 Subject: [PATCH] bug fixed --- version3.0/nasal_gc.h | 43 ++++++++++++++++++++++---------------- version3.0/nasal_runtime.h | 15 ++++++++----- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/version3.0/nasal_gc.h b/version3.0/nasal_gc.h index 44a1aa2..51326bb 100644 --- a/version3.0/nasal_gc.h +++ b/version3.0/nasal_gc.h @@ -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."<> [vm] scalar_cmp_equal: "<<*(std::string*)b_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_cmp_equal: "<<*(std::string*)a_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_cmp_equal: "<<*(std::string*)b_ref.scalar_ptr<<" is not a numerable string."<