--- gforth/engine/threaded.h 2005/01/23 13:56:13 1.30 +++ gforth/engine/threaded.h 2005/01/24 22:18:34 1.32 @@ -102,11 +102,12 @@ #define GOTO(target) do {(real_ca=(target));} while(0) #define NEXT_P2 do {NEXT_P1_5; DO_GOTO;} while(0) -#define EXEC(XT) do { EXEC1(XT); DO_GOTO;} while (0) +#define EXEC(XT) do { real_ca=EXEC1(XT); DO_GOTO;} while (0) +#define VM_JUMP(target) do {GOTO(target); DO_GOTO;} while (0) #define NEXT do {DEF_CA NEXT_P1; NEXT_P2;} while(0) #define FIRST_NEXT_P2 NEXT_P1_5; GOTO_ALIGN; \ before_goto: goto *real_ca; after_goto: -#define FIRST_NEXT DEF_CA NEXT_P1; FIRST_NEXT_P2; +#define FIRST_NEXT do {DEF_CA NEXT_P1; FIRST_NEXT_P2;} while(0) #define IPTOS NEXT_INST @@ -128,10 +129,10 @@ before_goto: goto *real_ca; after_goto: fprintf(stderr,"NEXT encountered prim %p at ip=%p\n", cfa, ip); \ ip++;} while(0) # define NEXT_P1_5 do {ca=**cfa; GOTO(ca);} while(0) -# define EXEC1(XT) do {DEF_CA cfa=(XT);\ +# define EXEC1(XT) ({DEF_CA cfa=(XT);\ if (DEBUG_DITC && (cfa>vm_prims+DOESJUMP && cfa