pike.git/
src/
interpret_functions.h
Branch:
Tag:
Non-build tags
All tags
No tags
2014-12-04
2014-12-04 19:24:02 by Per Hedbor <ph@opera.com>
bed43d335520aa1a0fccd1cb6df7d24685f97dba (
126
lines) (+
68
/-
58
)
[
Show
|
Annotate
]
Branch:
bill/master_archive_support
Since NULL is no longer possible, simplify CALL_MACHINE_CODE
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); \
JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr); \
-
if(low_mega_apply(TYPE,DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)),
\
-
ARG2, ARG3))
\
+
if(
(pc=
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(
Pike_fp->
pc); \
+
DO_JUMP_TO(pc);
\
} \ else { \ DO_JUMP_TO_NEXT; \
2028:
\ PIKE_CONCAT(OP,_JUMP)(PIKE_CONCAT3(F_,OPCODE,_AND_POP),NAME " & pop", \ I_UPDATE_ALL, { \
+
LOCAL_VAR(PIKE_OPCODE_T *pc); \
JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr); \
-
if(low_mega_apply(TYPE, DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)), \
-
ARG2, ARG3))
\
+
if(
(pc=
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(
Pike_fp->
pc); \
+
DO_JUMP_TO(pc);
\
}else{ \ pop_stack(); \ DO_JUMP_TO_NEXT; \
2043:
PIKE_CONCAT(OP,_RETURN)(PIKE_CONCAT3(F_,OPCODE,_AND_RETURN), \ NAME " & return", \ I_UPDATE_ALL, { \
-
if(low_mega_apply(TYPE,DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)),
\
-
ARG2,ARG3))
\
+
LOCAL_VAR(PIKE_OPCODE_T *pc); \
+
if(
(pc =
low_mega_apply(TYPE,DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)), \
+
ARG2,ARG3))
)
\
{ \
-
PIKE_OPCODE_T *addr = Pike_fp->pc; \
+
DO_IF_DEBUG(Pike_fp->next->pc=0); \ unlink_previous_frame(); \
-
DO_JUMP_TO(
addr
); \
+
DO_JUMP_TO(
pc
);
\
}else{ \ DO_DUMB_RETURN; \ } \
2062:
\ 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(low_mega_apply(TYPE, 0,
\
-
ARG2, ARG3))
\
+
if(
(pc=
low_mega_apply(TYPE, 0,
\
+
ARG2, ARG3))
)
\
{ \ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL; \
-
DO_JUMP_TO(
Pike_fp->
pc); \
+
DO_JUMP_TO(pc);
\
} \ else { \ DO_JUMP_TO_NEXT; \
2077:
PIKE_CONCAT(OP,_JUMP)(PIKE_CONCAT3(F_MARK_,OPCODE,_AND_POP), \ "mark, " NAME " & pop", \ I_UPDATE_ALL, { \
+
LOCAL_VAR(PIKE_OPCODE_T *pc); \
JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr); \
-
if(low_mega_apply(TYPE, 0,
\
-
ARG2, ARG3))
\
+
if(
(pc=
low_mega_apply(TYPE, 0,
\
+
ARG2, ARG3))
)
\
{ \ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL | PIKE_FRAME_RETURN_POP; \
-
DO_JUMP_TO(
Pike_fp->
pc); \
+
DO_JUMP_TO(pc);
\
}else{ \ pop_stack(); \ DO_JUMP_TO_NEXT; \
2092:
PIKE_CONCAT(OP,_RETURN)(PIKE_CONCAT3(F_MARK_,OPCODE,_AND_RETURN), \ "mark, " NAME " & return", \ I_UPDATE_ALL, { \
-
if
(
low
_
mega
_
apply(TYPE,
0,
\
-
ARG2,ARG3))
\
+
LOCAL_VAR
(
PIKE
_
OPCODE
_
T
*pc);
\
+
if((pc=low_mega_apply(TYPE,
0,
\
+
ARG2,ARG3))
)
\
{ \
-
PIKE_OPCODE_T *addr = Pike_fp->pc; \
+
DO_IF_DEBUG(Pike_fp->next->pc=0); \ unlink_previous_frame(); \
-
DO_JUMP_TO(
addr
); \
+
DO_JUMP_TO(
pc
);
\
}else{ \ DO_DUMB_RETURN; \ } \
2106:
OPCODE1_JUMP(F_CALL_LFUN , "call lfun", I_UPDATE_ALL, {
+
LOCAL_VAR(PIKE_OPCODE_T *addr);
JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr);
-
if(lower_mega_apply(DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)),
+
if(
(addr =
lower_mega_apply(DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)),
Pike_fp->current_object,
-
(arg1+Pike_fp->context->identifier_level) ))
+
(arg1+Pike_fp->context->identifier_level) ))
)
{ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL;
-
DO_JUMP_TO(
Pike_fp->pc
);
+
DO_JUMP_TO(
addr
);
} else {
2121:
}); OPCODE1_JUMP(F_CALL_LFUN_AND_POP, "call lfun & pop", I_UPDATE_ALL, {
+
LOCAL_VAR(PIKE_OPCODE_T *addr);
JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr);
-
-
if(lower_mega_apply(DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)),
+
if(
(addr =
lower_mega_apply(DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)),
Pike_fp->current_object,
-
(arg1+Pike_fp->context->identifier_level)))
+
(arg1+Pike_fp->context->identifier_level)))
)
{ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL | PIKE_FRAME_RETURN_POP;
-
DO_JUMP_TO(
Pike_fp->pc
);
+
DO_JUMP_TO(
addr
);
} else {
2138:
}); OPCODE1_RETURN(F_CALL_LFUN_AND_RETURN , "call lfun & return", I_UPDATE_ALL, {
-
if(lower_mega_apply(DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)),
+
LOCAL_VAR(PIKE_OPCODE_T *addr);
+
if(
(addr =
lower_mega_apply(DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp)),
Pike_fp->current_object,
-
(arg1+Pike_fp->context->identifier_level)))
+
(arg1+Pike_fp->context->identifier_level)))
)
{
-
PIKE_OPCODE_T *addr = Pike_fp->pc;
+
DO_IF_DEBUG(Pike_fp->next->pc=0); unlink_previous_frame(); DO_JUMP_TO(addr);
2152:
}); OPCODE1_JUMP(F_MARK_CALL_LFUN, "mark, call lfun" , I_UPDATE_ALL, {
+
LOCAL_VAR(PIKE_OPCODE_T *p);
JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr);
-
if(lower_mega_apply(0, Pike_fp->current_object,
-
(arg1+Pike_fp->context->identifier_level))) {
+
if(
(p =
lower_mega_apply(0, Pike_fp->current_object,
+
(arg1+Pike_fp->context->identifier_level)))
)
{
Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL;
-
DO_JUMP_TO(
Pike_fp->pc
);
+
DO_JUMP_TO(
p
);
} else { DO_JUMP_TO_NEXT; } }); OPCODE1_JUMP( F_MARK_CALL_LFUN_AND_POP , "mark, call lfun & pop", I_UPDATE_ALL, {
-
+
LOCAL_VAR(PIKE_OPCODE_T *p);
JUMP_SET_TO_PC_AT_NEXT (Pike_fp->return_addr);
-
if(lower_mega_apply(0, Pike_fp->current_object,
-
(arg1+Pike_fp->context->identifier_level) ))
+
if(
(p =
lower_mega_apply(0, Pike_fp->current_object,
+
(arg1+Pike_fp->context->identifier_level) ))
)
{ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL | PIKE_FRAME_RETURN_POP;
-
DO_JUMP_TO(
Pike_fp->pc
);
+
DO_JUMP_TO(
p
);
} else {
2178:
}); OPCODE1_RETURN(F_MARK_CALL_LFUN_AND_RETURN , "mark, call lfun & return", I_UPDATE_ALL, {
-
if(lower_mega_apply(0, Pike_fp->current_object,
-
(arg1+Pike_fp->context->identifier_level)))
+
LOCAL_VAR(PIKE_OPCODE_T *addr);
+
if(
(addr =
lower_mega_apply(0, Pike_fp->current_object,
+
(arg1+Pike_fp->context->identifier_level)))
)
{
-
PIKE_OPCODE_T *addr = Pike_fp->pc;
+
DO_IF_DEBUG(Pike_fp->next->pc=0); unlink_previous_frame(); DO_JUMP_TO(addr);
2212:
p = p->inherits[SUBTYPEOF(*s)].prog; if(FIND_LFUN(p, LFUN_ARROW) == -1) {
+
PIKE_OPCODE_T *addr;
int fun; fun=find_shared_string_identifier(Pike_fp->context->prog->strings[arg1], p); if(fun >= 0) { fun += o->prog->inherits[SUBTYPEOF(*s)].identifier_level;
-
if(lower_mega_apply(args-1, o, fun))
+
if(
(addr =
lower_mega_apply(args-1, o, fun))
)
{ Pike_fp->save_sp--; Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL;
-
DO_JUMP_TO(
Pike_fp->pc
);
+
DO_JUMP_TO(
addr
);
} stack_pop_keep_top(); DO_JUMP_TO_NEXT;
2234:
{ LOCAL_VAR(struct svalue tmp); LOCAL_VAR(struct svalue tmp2);
-
LOCAL_VAR(
void
*p);
+
LOCAL_VAR(
PIKE_OPCODE_T
*p);
SET_SVAL(tmp, PIKE_T_STRING, 1, string, Pike_fp->context->prog->strings[arg1]);
2243:
move_svalue (s, &tmp2); print_return_value();
-
if(p = low_mega_apply(APPLY_STACK, args, 0, 0))
+
if(
(
p = low_mega_apply(APPLY_STACK, args, 0, 0))
)
{ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL; DO_JUMP_TO(p);
2270:
if(FIND_LFUN(p, LFUN_ARROW) == -1) { int fun;
+
PIKE_OPCODE_T *addr;
fun=find_shared_string_identifier(Pike_fp->context->prog->strings[arg1], p); if(fun >= 0) { fun += o->prog->inherits[SUBTYPEOF(*s)].identifier_level;
-
if(lower_mega_apply(args-1, o, fun))
+
if(
(addr =
lower_mega_apply(args-1, o, fun))
)
{ Pike_fp->save_sp--; Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL | PIKE_FRAME_RETURN_POP;
-
DO_JUMP_TO(
Pike_fp->pc
);
+
DO_JUMP_TO(
addr
);
} pop_2_elems(); DO_JUMP_TO_NEXT;
2293:
{ LOCAL_VAR(struct svalue tmp); LOCAL_VAR(struct svalue tmp2);
-
LOCAL_VAR(
void
*p);
+
LOCAL_VAR(
PIKE_OPCODE_T
*p);
SET_SVAL(tmp, PIKE_T_STRING, 1, string, Pike_fp->context->prog->strings[arg1]);
2303:
move_svalue (s, &tmp2); print_return_value();
-
if(p = low_mega_apply(APPLY_STACK, args, 0, 0))
+
if(
(
p = low_mega_apply(APPLY_STACK, args, 0, 0))
)
{ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL | PIKE_FRAME_RETURN_POP; DO_JUMP_TO(p);
2330:
if(FIND_LFUN(p, LFUN_ARROW) == -1) { int fun;
+
PIKE_OPCODE_T *addr;
fun=find_shared_string_identifier(Pike_fp->context->prog->strings[arg1], p); if(fun >= 0) { fun += o->prog->inherits[SUBTYPEOF(*s)].identifier_level;
-
if(lower_mega_apply(args-1, o, fun))
+
if(
(addr =
lower_mega_apply(args-1, o, fun))
)
{
-
PIKE_OPCODE_T *addr = Pike_fp->pc;
+
Pike_fp->save_sp--; DO_IF_DEBUG(Pike_fp->next->pc=0); unlink_previous_frame();
2353:
{ LOCAL_VAR(struct svalue tmp); LOCAL_VAR(struct svalue tmp2);
-
LOCAL_VAR(
void
*p);
+
LOCAL_VAR(
PIKE_OPCODE_T
*p);
SET_SVAL(tmp, PIKE_T_STRING, 1, string, Pike_fp->context->prog->strings[arg1]);
2362:
move_svalue (s, &tmp2); print_return_value();
-
if(p = low_mega_apply(APPLY_STACK, args, 0, 0))
+
if(
(
p = low_mega_apply(APPLY_STACK, args, 0, 0))
)
{ DO_IF_DEBUG(Pike_fp->next->pc=0); unlink_previous_frame();
2675:
(ID_FROM_INT(p, arg1+Pike_fp->context->identifier_level)-> identifier_flags & IDENTIFIER_SCOPE_USED)) {
-
PIKE_OPCODE_T *faddr;
+
ptrdiff_t num_locals;
-
+
PIKE_OPCODE_T *faddr;
+
PIKE_OPCODE_T *addr2;
INT32 args = DO_NOT_WARN((INT32)(Pike_sp - *--Pike_mark_sp));
-
+
JUMP_SET_TO_PC_AT_NEXT (faddr); faddr += GET_JUMP();
-
if(lower_mega_apply(args,
+
if(
(addr2 =
lower_mega_apply(args,
Pike_fp->current_object,
-
(arg1+Pike_fp->context->identifier_level)))
+
(arg1+Pike_fp->context->identifier_level)))
)
{ Pike_fp->flags |= PIKE_FRAME_RETURN_INTERNAL;
-
addr =
Pike_fp->pc
;
+
addr =
addr2
;
} DO_JUMP_TO(addr); }