| |
|
| \ condbranch(forthname,stackeffect,restline,code1,code2,forthcode) |
\ condbranch(forthname,stackeffect,restline,code1,code2,forthcode) |
| \ this is non-syntactical: code must open a brace that is closed by the macro |
\ this is non-syntactical: code must open a brace that is closed by the macro |
| \ condbranch(forthname,stackeffect,restline,code1,code2,forthcode) |
|
| \ this is non-syntactical: code must open a brace that is closed by the macro |
|
| define(condbranch, |
define(condbranch, |
| $1 ( `#'a_target $2 ) $3 |
$1 ( `#'a_target $2 ) $3 |
| $4 #ifdef NO_IP |
$4 #ifdef NO_IP |
| JUMP(a_target); |
JUMP(a_target); |
| #else |
#else |
| SET_IP((Xt *)a_target); |
SET_IP((Xt *)a_target); |
| |
ifelse(condbranch_opt,`1',`INST_TAIL; NEXT_P2;',`/* condbranch_opt=0 */') |
| #endif |
#endif |
| } |
} |
| |
ifelse(condbranch_opt,`1',`SUPER_CONTINUE;',`/* condbranch_opt=0 */') |
| $6 |
$6 |
| |
|
| \+glocals |
\+glocals |
| JUMP(a_target); |
JUMP(a_target); |
| #else |
#else |
| SET_IP((Xt *)a_target); |
SET_IP((Xt *)a_target); |
| |
ifelse(condbranch_opt,`1',`INST_TAIL; NEXT_P2;',`/* condbranch_opt=0 */') |
| #endif |
#endif |
| } |
} |
| |
ifelse(condbranch_opt,`1',`SUPER_CONTINUE;',`/* condbranch_opt=0 */') |
| \+ |
|
| ) |
|
| |
|
| \ version that generates two jumps (not good for PR 15242 workaround) |
|
| define(condbranch_twojump, |
|
| $1 ( `#'a_target $2 ) $3 |
|
| $4 #ifdef NO_IP |
|
| INST_TAIL; |
|
| #endif |
|
| $5 #ifdef NO_IP |
|
| JUMP(a_target); |
|
| #else |
|
| SET_IP((Xt *)a_target); |
|
| INST_TAIL; NEXT_P2; |
|
| #endif |
|
| } |
|
| SUPER_CONTINUE; |
|
| $6 |
|
| |
|
| \+glocals |
|
| |
|
| $1-lp+!`#' ( `#'a_target `#'nlocals $2 ) $3_lp_plus_store_number |
|
| $4 #ifdef NO_IP |
|
| INST_TAIL; |
|
| #endif |
|
| $5 lp += nlocals; |
|
| #ifdef NO_IP |
|
| JUMP(a_target); |
|
| #else |
|
| SET_IP((Xt *)a_target); |
|
| INST_TAIL; NEXT_P2; |
|
| #endif |
|
| } |
|
| SUPER_CONTINUE; |
|
| |
|
| \+ |
\+ |
| ) |
) |