Branch: Tag:

2014-12-04

2014-12-04 19:24:03 by Tobias S. Josefowitz <tobij@tobij.de>

interpret_functions: Don't wrongfully set PROGRAM_COUNTER to NULL.

2014:   #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:    \    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:    \   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; \    } \   }); \    \