pike.git/
src/
interpret_functions.h
Branch:
Tag:
Non-build tags
All tags
No tags
2014-12-04
2014-12-04 19:24:03 by Tobias S. Josefowitz <tobij@tobij.de>
de9a4dab7833d358de9317f93b67c1a58ea66b5a (
54
lines) (+
28
/-
26
)
[
Show
|
Annotate
]
Branch:
bill/master_archive_support
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;
\
} \ }); \ \