From 759bcdafa83d9c087f65ef90f0854a5c2527bf2e Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Thu, 30 Jul 2020 20:55:32 -0700 Subject: [PATCH] update --- version3.0/nasal_gc.h | 412 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 403 insertions(+), 9 deletions(-) diff --git a/version3.0/nasal_gc.h b/version3.0/nasal_gc.h index c13173c..6fc9284 100644 --- a/version3.0/nasal_gc.h +++ b/version3.0/nasal_gc.h @@ -58,6 +58,7 @@ public: bool set_type(int); void set_number(double); void set_string(std::string); + // parameter: memory_manager_memory address int nasal_scalar_add(int,int); int nasal_scalar_sub(int,int); int nasal_scalar_mult(int,int); @@ -311,51 +312,444 @@ int nasal_scalar::nasal_scalar_add(int a,int b) } int nasal_scalar::nasal_scalar_sub(int a,int b) { - return -1; + int a_scalar_addr=nasal_vm.mem_get(a); + int b_scalar_addr=nasal_vm.mem_get(b); + if(a_scalar_addr<0 || b_scalar_addr<0) + { + std::cout<<">> [vm] scalar_sub: memory returned an invalid address"<> [vm] scalar_sub: error value type.only number and string can take part in sub."<> [vm] scalar_sub: "<<*(std::string*)a_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_sub: "<<*(std::string*)b_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_mult: memory returned an invalid address"<> [vm] scalar_mult: error value type.only number and string can take part in mult."<> [vm] scalar_mult: "<<*(std::string*)a_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_mult: "<<*(std::string*)b_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_div: memory returned an invalid address"<> [vm] scalar_div: error value type.only number and string can take part in div."<> [vm] scalar_div: "<<*(std::string*)a_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_div: "<<*(std::string*)b_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_link: memory returned an invalid address"<> [vm] scalar_link: error value type.only number and string can take part in link."<> [vm] scalar_unary_sub: memory returned an invalid address"<> [vm] scalar_unary_sub: error value type.only number and string can take part in unary sub."<> [vm] scalar_unary_sub: "<<*(std::string*)a_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_unary_not: memory returned an invalid address"<> [vm] scalar_cmp_equal: memory returned an invalid address"<> [vm] scalar_cmp_not_equal: memory returned an invalid address"<> [vm] scalar_cmp_less: memory returned an invalid address"<> [vm] scalar_cmp_less: error value type.only number and string can take part in cmp_less."<> [vm] scalar_cmp_less: "<<*(std::string*)a_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_cmp_less: "<<*(std::string*)b_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_cmp_greater: memory returned an invalid address"<> [vm] scalar_cmp_greater: error value type.only number and string can take part in cmp_greater."<> [vm] scalar_cmp_greater: "<<*(std::string*)a_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_cmp_greater: "<<*(std::string*)b_ref.scalar_ptr<<" is not a numerable string."<b_num); + 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(result); + return new_value_address; } int nasal_scalar::nasal_scalar_cmp_less_or_equal(int a,int b) { - return -1; + int a_scalar_addr=nasal_vm.mem_get(a); + int b_scalar_addr=nasal_vm.mem_get(b); + if(a_scalar_addr<0 || b_scalar_addr<0) + { + std::cout<<">> [vm] scalar_cmp_lequal: memory returned an invalid address"<> [vm] scalar_cmp_lequal: error value type.only number and string can take part in cmp_less_or_equal."<> [vm] scalar_cmp_lequal: "<<*(std::string*)a_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_cmp_lequal: "<<*(std::string*)b_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_cmp_gequal: memory returned an invalid address"<> [vm] scalar_cmp_gequal: error value type.only number and string can take part in cmp_greater_or_equal."<> [vm] scalar_cmp_gequal: "<<*(std::string*)a_ref.scalar_ptr<<" is not a numerable string."<> [vm] scalar_cmp_gequal: "<<*(std::string*)b_ref.scalar_ptr<<" is not a numerable string."<=b_num); + 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(result); + return new_value_address; } /*functions of nasal_virtual_machine*/