--- gforth/prim 2007/03/31 21:43:18 1.210 +++ gforth/prim 2007/06/23 19:45:14 1.214 @@ -209,10 +209,16 @@ goto *next_code; a_retaddr = next_code; a_body = PFA(CFA); INST_TAIL; +#ifdef DEBUG +fprintf(stderr, "dodoes to %x, push %x\n", a_retaddr, a_body); +#endif goto **(Label *)DOES_CODE1(CFA); #else /* !defined(NO_IP) */ a_retaddr = (Cell *)IP; a_body = PFA(CFA); +#ifdef DEBUG +fprintf(stderr, "dodoes to %x, push %x\n", a_retaddr, a_body); +#endif SET_IP(DOES_CODE1(CFA)); #endif /* !defined(NO_IP) */ @@ -332,8 +338,6 @@ SET_IP((Xt *)a_target); \ condbranch(forthname,stackeffect,restline,code1,code2,forthcode) \ 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, $1 ( `#'a_target $2 ) $3 $4 #ifdef NO_IP @@ -343,8 +347,10 @@ $5 #ifdef NO_IP JUMP(a_target); #else SET_IP((Xt *)a_target); +ifelse(condbranch_opt,`1',`INST_TAIL; NEXT_P2;',`/* condbranch_opt=0 */') #endif } +ifelse(condbranch_opt,`1',`SUPER_CONTINUE;',`/* condbranch_opt=0 */') $6 \+glocals @@ -358,43 +364,10 @@ $5 lp += nlocals; JUMP(a_target); #else SET_IP((Xt *)a_target); +ifelse(condbranch_opt,`1',`INST_TAIL; NEXT_P2;',`/* condbranch_opt=0 */') #endif } - -\+ -) - -\ 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; +ifelse(condbranch_opt,`1',`SUPER_CONTINUE;',`/* condbranch_opt=0 */') \+ ) @@ -751,6 +724,9 @@ n = n1+n2; \ lit+ / lit_plus = lit + lit+ ( n1 #n2 -- n ) new lit_plus +#ifdef DEBUG +fprintf(stderr, "lit+ %08x\n", n2); +#endif n=n1+n2; \ PFE-0.9.14 has it differently, but the next release will have it as follows @@ -1742,12 +1718,9 @@ nhour =ltime->tm_hour; nmin =ltime->tm_min; nsec =ltime->tm_sec; -ms ( n -- ) facility-ext +ms ( u -- ) facility-ext ""Wait at least @i{n} milli-second."" -struct timeval timeout; -timeout.tv_sec=n/1000; -timeout.tv_usec=1000*(n%1000); -(void)select(0,0,0,0,&timeout); +gforth_ms(u); allocate ( u -- a_addr wior ) memory ""Allocate @i{u} address units of contiguous data space. The initial @@ -1794,7 +1767,7 @@ u = strlen((char *)c_addr); call-c ( ... w -- ... ) gforth call_c ""Call the C function pointed to by @i{w}. The C function has to access the stack itself. The stack pointers are exported in the global -variables @code{SP} and @code{FP}."" +variables @code{gforth_SP} and @code{gforth_FP}."" /* This is a first attempt at support for calls to C. This may change in the future */ gforth_FP=fp;