--- gforth/prim 2001/12/25 16:55:10 1.87 +++ gforth/prim 2002/02/10 14:02:25 1.92 @@ -1356,7 +1356,6 @@ a_addr = (Cell *)DOES_CODE(xt); code-address! ( c_addr xt -- ) gforth code_address_store ""Create a code field with code address @i{c-addr} at @i{xt}."" MAKE_CF(xt, c_addr); -CACHE_FLUSH(xt,(size_t)PFA(0)); : ! ; @@ -1364,7 +1363,6 @@ does-code! ( a_addr xt -- ) gforth does ""Create a code field at @i{xt} for a child of a @code{DOES>}-word; @i{a-addr} is the start of the Forth code after @code{DOES>}."" MAKE_DOES_CF(xt, a_addr); -CACHE_FLUSH(xt,(size_t)PFA(0)); : dodoes: over ! cell+ ! ; @@ -1372,7 +1370,6 @@ does-handler! ( a_addr -- ) gforth does_ ""Create a @code{DOES>}-handler at address @i{a-addr}. Normally, @i{a-addr} points just behind a @code{DOES>}."" MAKE_DOES_HANDLER(a_addr); -CACHE_FLUSH((caddr_t)a_addr,DOES_HANDLER_SIZE); : drop ; @@ -2396,6 +2393,13 @@ xt = peephole_opt(xt1, xt2, wpeeptable); call ( #a_callee -- R:a_retaddr ) new ""Call callee (a variant of docol with inline argument)."" +#ifdef DEBUG + { + CFA_TO_NAME((((Cell *)a_callee)-2)); + fprintf(stderr,"%08lx: call %08lx %.*s\n",(Cell)ip,(Cell)a_callee, + len,name); + } +#endif a_retaddr = (Cell *)IP; SET_IP((Xt *)a_callee); @@ -2405,6 +2409,28 @@ a_addr = (Cell *)(up+u); compile-prim ( xt1 -- xt2 ) new compile_prim xt2 = (Xt)compile_prim((Label)xt1); +lit@ / lit_fetch = lit @ + +lit-perform ( #a_addr -- ) new lit_perform +ip=IP; +SUPER_END; +EXEC(*(Xt *)a_addr); + +lit+ / lit_plus = lit + + +does-exec ( #a_cfa -- R:nest a_pfa ) new does_exec +a_pfa = PFA(a_cfa); +nest = (Cell)ip; +IF_spTOS(spTOS = sp[0]); +#ifdef DEBUG + { + CFA_TO_NAME(a_cfa); + fprintf(stderr,"%08lx: does %08lx %.*s\n", + (Cell)ip,(Cell)a_cfa,len,name); + } +#endif +SET_IP(DOES_CODE1(a_cfa)); + include(peeprules.vmg) \+