--- gforth/engine/threaded.h 2005/01/23 21:54:09 1.31 +++ gforth/engine/threaded.h 2005/01/26 21:24:16 1.33 @@ -102,7 +102,8 @@ #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);} 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: @@ -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