diff --git a/src/interpret_functions.h b/src/interpret_functions.h index 0709b389f3f21ea89c410164aef477649a25f947..f1a602aaf983330a6b74f9ca672e99bb54598af3 100644 --- a/src/interpret_functions.h +++ b/src/interpret_functions.h @@ -1,5 +1,5 @@ /* - * $Id: interpret_functions.h,v 1.67 2001/07/02 07:02:45 hubbe Exp $ + * $Id: interpret_functions.h,v 1.68 2001/07/06 14:07:55 grubba Exp $ * * Opcode definitions for the interpreter. */ @@ -898,15 +898,14 @@ OPCODE1_JUMP(F_BRANCH_IF_LOCAL,"branch if local") } BREAK; - CASE(F_BRANCH_IF_NOT_LOCAL); - instr=GET_ARG(); - if(!IS_ZERO(Pike_fp->locals + instr)) - { - SKIPJUMP(); - }else{ - DOJUMP(); - } - break; +OPCODE1_JUMP(F_BRANCH_IF_NOT_LOCAL, "branch if !local") + if(!IS_ZERO(Pike_fp->locals + arg1)) + { + SKIPJUMP(); + }else{ + DOJUMP(); + } +BREAK; CJUMP(F_BRANCH_WHEN_EQ, is_eq); CJUMP(F_BRANCH_WHEN_NE,!is_eq); @@ -915,82 +914,82 @@ BREAK; CJUMP(F_BRANCH_WHEN_GT, is_gt); CJUMP(F_BRANCH_WHEN_GE,!is_lt); - CASE(F_BRANCH_AND_POP_WHEN_ZERO); - if(!IS_ZERO(Pike_sp-1)) - { - SKIPJUMP(); - }else{ - DOJUMP(); - pop_stack(); - } - break; +OPCODE0_JUMP(F_BRANCH_AND_POP_WHEN_ZERO, "branch & pop if zero") + if(!IS_ZERO(Pike_sp-1)) + { + SKIPJUMP(); + }else{ + DOJUMP(); + pop_stack(); + } +BREAK; - CASE(F_BRANCH_AND_POP_WHEN_NON_ZERO); - if(IS_ZERO(Pike_sp-1)) - { - SKIPJUMP(); - }else{ - DOJUMP(); - pop_stack(); - } - break; +OPCODE0_JUMP(F_BRANCH_AND_POP_WHEN_NON_ZERO, "branch & pop if !zero") + if(IS_ZERO(Pike_sp-1)) + { + SKIPJUMP(); + }else{ + DOJUMP(); + pop_stack(); + } +BREAK; - CASE(F_LAND); - if(!IS_ZERO(Pike_sp-1)) - { - SKIPJUMP(); - pop_stack(); - }else{ - DOJUMP(); - } - break; +OPCODE0_JUMP(F_LAND, "&&") + if(!IS_ZERO(Pike_sp-1)) + { + SKIPJUMP(); + pop_stack(); + }else{ + DOJUMP(); + } +BREAK; - CASE(F_LOR); - if(IS_ZERO(Pike_sp-1)) - { - SKIPJUMP(); - pop_stack(); - }else{ - DOJUMP(); - } - break; +OPCODE0_JUMP(F_LOR, "||") + if(IS_ZERO(Pike_sp-1)) + { + SKIPJUMP(); + pop_stack(); + }else{ + DOJUMP(); + } +BREAK; - CASE(F_EQ_OR); - if(!is_eq(Pike_sp-2,Pike_sp-1)) - { - pop_n_elems(2); - SKIPJUMP(); - }else{ - pop_n_elems(2); - push_int(1); - DOJUMP(); - } - break; +OPCODE0_JUMP(F_EQ_OR, "==||") + if(!is_eq(Pike_sp-2,Pike_sp-1)) + { + pop_n_elems(2); + SKIPJUMP(); + }else{ + pop_n_elems(2); + push_int(1); + DOJUMP(); + } +BREAK; - CASE(F_EQ_AND); - if(is_eq(Pike_sp-2,Pike_sp-1)) - { - pop_n_elems(2); - SKIPJUMP(); - }else{ - pop_n_elems(2); - push_int(0); - DOJUMP(); - } - break; +OPCODE0_JUMP(F_EQ_AND, "==&&") + if(is_eq(Pike_sp-2,Pike_sp-1)) + { + pop_n_elems(2); + SKIPJUMP(); + }else{ + pop_n_elems(2); + push_int(0); + DOJUMP(); + } +BREAK; - CASE(F_CATCH); - switch (o_catch(pc+sizeof(INT32))) { - case 1: - /* There was a return inside the evaluated code */ - goto do_dumb_return; - case 2: - pc = Pike_fp->pc; - break; - default: - pc+=GET_JUMP(); - } - break; +OPCODE0_JUMP(F_CATCH, "catch") + switch (o_catch(pc+sizeof(INT32))) { + case 1: + /* There was a return inside the evaluated code */ + goto do_dumb_return; + case 2: + pc = Pike_fp->pc; + break; + default: + pc+=GET_JUMP(); + } +BREAK; OPCODE0(F_ESCAPE_CATCH, "escape catch") { diff --git a/src/lex.c b/src/lex.c index c6620d3abc863ea6fd5ee0a3e180e61f5042622b..29a9e00b666c5504c8ced636f16a6862f7da65bd 100644 --- a/src/lex.c +++ b/src/lex.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: lex.c,v 1.91 2001/07/02 04:09:49 hubbe Exp $"); +RCSID("$Id: lex.c,v 1.92 2001/07/06 14:07:55 grubba Exp $"); #include "language.h" #include "array.h" #include "lex.h" @@ -207,24 +207,16 @@ struct keyword instr_names[]= { "for", F_FOR,0 }, { "index", F_INDEX,0 }, -{ "branch if !local", F_BRANCH_IF_NOT_LOCAL, I_HASARG }, { "branch if <", F_BRANCH_WHEN_LT, I_ISJUMP }, { "branch if >", F_BRANCH_WHEN_GT, I_ISJUMP }, { "branch if <=", F_BRANCH_WHEN_LE, I_ISJUMP }, { "branch if >=", F_BRANCH_WHEN_GE, I_ISJUMP }, { "branch if ==", F_BRANCH_WHEN_EQ, I_ISJUMP }, { "branch if !=", F_BRANCH_WHEN_NE, I_ISJUMP }, -{ "branch & pop if zero", F_BRANCH_AND_POP_WHEN_ZERO, I_ISJUMP }, -{ "branch & pop if !zero", F_BRANCH_AND_POP_WHEN_NON_ZERO, I_ISJUMP }, { "++Loop", F_INC_LOOP, I_ISJUMP }, { "++Loop!=", F_INC_NEQ_LOOP, I_ISJUMP }, { "--Loop", F_DEC_LOOP, I_ISJUMP }, { "--Loop!=", F_DEC_NEQ_LOOP, I_ISJUMP }, -{ "&&", F_LAND, I_ISJUMP }, -{ "||", F_LOR, I_ISJUMP }, -{ "==||", F_EQ_OR, I_ISJUMP }, -{ "==&&", F_EQ_AND, I_ISJUMP }, -{ "catch", F_CATCH, I_ISJUMP }, { "foreach", F_FOREACH, I_ISJUMP }, { "foreach++", F_NEW_FOREACH, I_ISJUMP }, { "pointer", F_POINTER, I_ISPOINTER }, diff --git a/src/opcodes.h b/src/opcodes.h index edfa42fc15b20d44484f4094302dacdf7fea5cc2..b15d6af6a47f3e70d279e4951e79c51740e361c1 100644 --- a/src/opcodes.h +++ b/src/opcodes.h @@ -5,7 +5,7 @@ \*/ /* - * $Id: opcodes.h,v 1.17 2001/06/23 10:33:11 hubbe Exp $ + * $Id: opcodes.h,v 1.18 2001/07/06 14:07:55 grubba Exp $ */ #ifndef OPCODES_H #define OPCODES_H @@ -47,15 +47,12 @@ enum Pike_opcodes F_PREFIX2_WORDX256, F_PREFIX2_24BITX256, - F_BRANCH_AND_POP_WHEN_ZERO, - F_BRANCH_AND_POP_WHEN_NON_ZERO, F_BRANCH_WHEN_LT, F_BRANCH_WHEN_GT, F_BRANCH_WHEN_LE, F_BRANCH_WHEN_GE, F_BRANCH_WHEN_EQ, F_BRANCH_WHEN_NE, - F_BRANCH_IF_NOT_LOCAL, F_INC_LOOP, F_DEC_LOOP, F_INC_NEQ_LOOP, @@ -81,12 +78,7 @@ enum Pike_opcodes F_GE, F_LE, F_NE, - F_LAND, - F_LOR, - F_EQ_OR, - F_EQ_AND, - F_CATCH, F_FOREACH, F_NEW_FOREACH,