From bb746dfbfbf98fc21f32abefe09f8a7b5b46fcdd Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Sat, 23 Jan 2021 17:57:05 +0800 Subject: [PATCH] update --- nasal_bytecode_vm.h | 48 ++++++++++++++++++++++----------------------- nasal_gc.h | 12 ++++-------- nasal_parse.h | 46 +++---------------------------------------- 3 files changed, 31 insertions(+), 75 deletions(-) diff --git a/nasal_bytecode_vm.h b/nasal_bytecode_vm.h index 37bb652..16745be 100644 --- a/nasal_bytecode_vm.h +++ b/nasal_bytecode_vm.h @@ -251,7 +251,7 @@ void nasal_bytecode_vm::opr_entry() } void nasal_bytecode_vm::opr_unot() { - nasal_scalar* val_addr=*value_stack_top--; + nasal_scalar* val_addr=*value_stack_top; int type=val_addr->get_type(); nasal_scalar* new_value_address=NULL; if(type==vm_nil) @@ -280,26 +280,26 @@ void nasal_bytecode_vm::opr_unot() } else die("unot: incorrect value type"); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(val_addr); return; } void nasal_bytecode_vm::opr_usub() { - nasal_scalar* val_addr=*value_stack_top--; + nasal_scalar* val_addr=*value_stack_top; nasal_scalar* new_value_address=vm.gc_alloc(vm_number); new_value_address->set_number(-val_addr->to_number()); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(val_addr); return; } void nasal_bytecode_vm::opr_add() { nasal_scalar* val_addr2=*value_stack_top--; - nasal_scalar* val_addr1=*value_stack_top--; + nasal_scalar* val_addr1=*value_stack_top; nasal_scalar* new_value_address=vm.gc_alloc(vm_number); new_value_address->set_number(val_addr1->to_number()+val_addr2->to_number()); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(val_addr1); vm.del_reference(val_addr2); return; @@ -307,10 +307,10 @@ void nasal_bytecode_vm::opr_add() void nasal_bytecode_vm::opr_sub() { nasal_scalar* val_addr2=*value_stack_top--; - nasal_scalar* val_addr1=*value_stack_top--; + nasal_scalar* val_addr1=*value_stack_top; nasal_scalar* new_value_address=vm.gc_alloc(vm_number); new_value_address->set_number(val_addr1->to_number()-val_addr2->to_number()); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(val_addr1); vm.del_reference(val_addr2); return; @@ -318,10 +318,10 @@ void nasal_bytecode_vm::opr_sub() void nasal_bytecode_vm::opr_mul() { nasal_scalar* val_addr2=*value_stack_top--; - nasal_scalar* val_addr1=*value_stack_top--; + nasal_scalar* val_addr1=*value_stack_top; nasal_scalar* new_value_address=vm.gc_alloc(vm_number); new_value_address->set_number(val_addr1->to_number()*val_addr2->to_number()); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(val_addr1); vm.del_reference(val_addr2); return; @@ -329,10 +329,10 @@ void nasal_bytecode_vm::opr_mul() void nasal_bytecode_vm::opr_div() { nasal_scalar* val_addr2=*value_stack_top--; - nasal_scalar* val_addr1=*value_stack_top--; + nasal_scalar* val_addr1=*value_stack_top; nasal_scalar* new_value_address=vm.gc_alloc(vm_number); new_value_address->set_number(val_addr1->to_number()/val_addr2->to_number()); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(val_addr1); vm.del_reference(val_addr2); return; @@ -340,10 +340,10 @@ void nasal_bytecode_vm::opr_div() void nasal_bytecode_vm::opr_lnk() { nasal_scalar* val_addr2=*value_stack_top--; - nasal_scalar* val_addr1=*value_stack_top--; + nasal_scalar* val_addr1=*value_stack_top; nasal_scalar* new_value_address=vm.gc_alloc(vm_string); new_value_address->set_string(val_addr1->to_string()+val_addr2->to_string()); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(val_addr1); vm.del_reference(val_addr2); return; @@ -352,12 +352,12 @@ void nasal_bytecode_vm::opr_addeq() { nasal_scalar** mem_addr=pointer_stack.top(); pointer_stack.pop(); - nasal_scalar* val_addr2=*value_stack_top--; + nasal_scalar* val_addr2=*value_stack_top; nasal_scalar* val_addr1=*mem_addr; nasal_scalar* new_value_address=vm.gc_alloc(vm_number); new_value_address->set_number(val_addr1->to_number()+val_addr2->to_number()); vm.add_reference(new_value_address); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(*mem_addr); *mem_addr=new_value_address; vm.del_reference(val_addr2); @@ -367,12 +367,12 @@ void nasal_bytecode_vm::opr_subeq() { nasal_scalar** mem_addr=pointer_stack.top(); pointer_stack.pop(); - nasal_scalar* val_addr2=*value_stack_top--; + nasal_scalar* val_addr2=*value_stack_top; nasal_scalar* val_addr1=*mem_addr; nasal_scalar* new_value_address=vm.gc_alloc(vm_number); new_value_address->set_number(val_addr1->to_number()-val_addr2->to_number()); vm.add_reference(new_value_address); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(*mem_addr); *mem_addr=new_value_address; vm.del_reference(val_addr2); @@ -382,12 +382,12 @@ void nasal_bytecode_vm::opr_muleq() { nasal_scalar** mem_addr=pointer_stack.top(); pointer_stack.pop(); - nasal_scalar* val_addr2=*value_stack_top--; + nasal_scalar* val_addr2=*value_stack_top; nasal_scalar* val_addr1=*mem_addr; nasal_scalar* new_value_address=vm.gc_alloc(vm_number); new_value_address->set_number(val_addr1->to_number()*val_addr2->to_number()); vm.add_reference(new_value_address); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(*mem_addr); *mem_addr=new_value_address; vm.del_reference(val_addr2); @@ -397,12 +397,12 @@ void nasal_bytecode_vm::opr_diveq() { nasal_scalar** mem_addr=pointer_stack.top(); pointer_stack.pop(); - nasal_scalar* val_addr2=*value_stack_top--; + nasal_scalar* val_addr2=*value_stack_top; nasal_scalar* val_addr1=*mem_addr; nasal_scalar* new_value_address=vm.gc_alloc(vm_number); new_value_address->set_number(val_addr1->to_number()/val_addr2->to_number()); vm.add_reference(new_value_address); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(*mem_addr); *mem_addr=new_value_address; vm.del_reference(val_addr2); @@ -412,12 +412,12 @@ void nasal_bytecode_vm::opr_lnkeq() { nasal_scalar** mem_addr=pointer_stack.top(); pointer_stack.pop(); - nasal_scalar* val_addr2=*value_stack_top--; + nasal_scalar* val_addr2=*value_stack_top; nasal_scalar* val_addr1=*mem_addr; nasal_scalar* new_value_address=vm.gc_alloc(vm_string); new_value_address->set_string(val_addr1->to_string()+val_addr2->to_string()); vm.add_reference(new_value_address); - *(++value_stack_top)=new_value_address; + *value_stack_top=new_value_address; vm.del_reference(*mem_addr); *mem_addr=new_value_address; vm.del_reference(val_addr2); diff --git a/nasal_gc.h b/nasal_gc.h index 4816314..f03bb6c 100644 --- a/nasal_gc.h +++ b/nasal_gc.h @@ -616,10 +616,10 @@ double nasal_scalar::to_number() { switch(type) { - case vm_nil:return 0; + case vm_nil: return 0; case vm_number: return ptr.num; case vm_string: return trans_string_to_number(*ptr.str); - default: return std::nan(""); + default: return std::nan(""); } return 0; } @@ -720,16 +720,12 @@ nasal_scalar* nasal_virtual_machine::gc_alloc(int val_type) } void nasal_virtual_machine::add_reference(nasal_scalar* value_address) { - if(value_address) - ++value_address->ref_cnt; + ++value_address->ref_cnt; return; } void nasal_virtual_machine::del_reference(nasal_scalar* value_address) { - if(value_address) - --value_address->ref_cnt; - else - return; + --value_address->ref_cnt; if(!value_address->ref_cnt) { value_address->clear(); diff --git a/nasal_parse.h b/nasal_parse.h index 7b925bb..315b79c 100644 --- a/nasal_parse.h +++ b/nasal_parse.h @@ -133,12 +133,6 @@ void nasal_parse::main_process() if(ptr=tok_list_size || tok_list[ptr].type!=tok_right_brace) { std::string lb_line=""; - while(left_brace_line>1) + while(left_brace_line) { lb_line=(char)('0'+(left_brace_line%10))+lb_line; left_brace_line/=10; @@ -551,9 +544,7 @@ nasal_ast nasal_parse::exprs_gen() else { node.add_child(expr()); - ++ptr; - if(ptr>=tok_list_size || tok_list[ptr].type!=tok_semi) - --ptr; + if(++ptr