diff --git a/src/interpret_functions.h b/src/interpret_functions.h index 21d86f1c9143da2bff30e3e383b49afc07b7d8c8..0db899384e8637567950e3b783d150bcd64d860b 100644 --- a/src/interpret_functions.h +++ b/src/interpret_functions.h @@ -2014,13 +2014,13 @@ OPCODE2_ALIAS(F_SSCANF, "sscanf", I_UPDATE_SP, o_sscanf); #define MKAPPLY(OP,OPCODE,NAME,TYPE, ARG2, ARG3) \ PIKE_CONCAT(OP,_JUMP)(PIKE_CONCAT(F_,OPCODE),NAME, \ I_UPDATE_ALL, { \ - LOCAL_VAR(PIKE_OPCODE_T *pc); \ + LOCAL_VAR(PIKE_OPCODE_T *addr); \ JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr); \ -if((pc=low_mega_apply(TYPE,DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)), \ +if((addr=low_mega_apply(TYPE,DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)), \ ARG2, ARG3))) \ { \ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL; \ - DO_JUMP_TO(pc); \ + DO_JUMP_TO(addr); \ } \ else { \ DO_JUMP_TO_NEXT; \ @@ -2029,29 +2029,30 @@ else { \ \ PIKE_CONCAT(OP,_JUMP)(PIKE_CONCAT3(F_,OPCODE,_AND_POP),NAME " & pop", \ I_UPDATE_ALL, { \ - LOCAL_VAR(PIKE_OPCODE_T *pc); \ + LOCAL_VAR(PIKE_OPCODE_T *addr); \ JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr); \ - if((pc=low_mega_apply(TYPE, DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)), \ + if((addr=low_mega_apply(TYPE, DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)), \ ARG2, ARG3))) \ { \ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL | PIKE_FRAME_RETURN_POP; \ - DO_JUMP_TO(pc); \ + DO_JUMP_TO(addr); \ }else{ \ pop_stack(); \ - DO_JUMP_TO_NEXT; \ + DO_JUMP_TO_NEXT; \ } \ }); \ \ PIKE_CONCAT(OP,_RETURN)(PIKE_CONCAT3(F_,OPCODE,_AND_RETURN), \ - NAME " & return", \ - I_UPDATE_ALL, { \ - LOCAL_VAR(PIKE_OPCODE_T *pc); \ - if((pc = low_mega_apply(TYPE,DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)), \ - ARG2,ARG3))) \ + NAME " & return", \ + I_UPDATE_ALL, { \ + LOCAL_VAR(PIKE_OPCODE_T *addr); \ + if((addr = low_mega_apply(TYPE,DO_NOT_WARN( \ + (INT32)(Pike_sp - *--Pike_mark_sp)), \ + ARG2,ARG3))) \ { \ DO_IF_DEBUG(Pike_fp->next->pc=0); \ unlink_previous_frame(); \ - DO_JUMP_TO(pc); \ + DO_JUMP_TO(addr); \ }else{ \ DO_DUMB_RETURN; \ } \ @@ -2062,34 +2063,34 @@ PIKE_CONCAT(OP,_RETURN)(PIKE_CONCAT3(F_,OPCODE,_AND_RETURN), \ \ MKAPPLY(OP,OPCODE,NAME,TYPE, ARG2, ARG3); \ \ -PIKE_CONCAT(OP,_JUMP)(PIKE_CONCAT(F_MARK_,OPCODE),"mark, " NAME, \ - I_UPDATE_ALL, { \ - LOCAL_VAR(PIKE_OPCODE_T *pc); \ - JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr); \ - if((pc=low_mega_apply(TYPE, 0, \ +PIKE_CONCAT(OP,_JUMP)(PIKE_CONCAT(F_MARK_,OPCODE),"mark, " NAME, \ + I_UPDATE_ALL, { \ + LOCAL_VAR(PIKE_OPCODE_T *addr); \ + JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr); \ + if((addr=low_mega_apply(TYPE, 0, \ ARG2, ARG3))) \ { \ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL; \ - DO_JUMP_TO(pc); \ + DO_JUMP_TO(addr); \ + } \ + else { \ + DO_JUMP_TO_NEXT; \ } \ - else { \ - DO_JUMP_TO_NEXT; \ - } \ }); \ \ PIKE_CONCAT(OP,_JUMP)(PIKE_CONCAT3(F_MARK_,OPCODE,_AND_POP), \ "mark, " NAME " & pop", \ I_UPDATE_ALL, { \ - LOCAL_VAR(PIKE_OPCODE_T *pc); \ + LOCAL_VAR(PIKE_OPCODE_T *addr); \ JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr); \ - if((pc=low_mega_apply(TYPE, 0, \ + if((addr=low_mega_apply(TYPE, 0, \ ARG2, ARG3))) \ { \ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL | PIKE_FRAME_RETURN_POP; \ - DO_JUMP_TO(pc); \ + DO_JUMP_TO(addr); \ }else{ \ pop_stack(); \ - DO_JUMP_TO_NEXT; \ + DO_JUMP_TO_NEXT; \ } \ }); \ \ diff --git a/src/interpreter.h b/src/interpreter.h index bf95f1aaced74c799246bdf3a3ed970e6ff89bbd..d97766ee7d2aaf1654d7a25670e69bbc09b1785c 100644 --- a/src/interpreter.h +++ b/src/interpreter.h @@ -101,6 +101,7 @@ static int eval_instruction(PIKE_OPCODE_T *pc) struct program *p; struct object *o; struct svalue *s; + PIKE_OPCODE_T *addr; DO_IF_DEBUG(dynamic_buffer save_buf); #undef LOCAL_VAR