--- gforth/cross.fs 2010/12/31 18:09:02 1.175 +++ gforth/cross.fs 2011/11/11 18:29:09 1.177 @@ -765,6 +765,7 @@ Plugin ?do, ( -- ?do-token ) Plugin for, ( -- for-token ) Plugin loop, ( do-token / ?do-token -- ) Plugin +loop, ( do-token / ?do-token -- ) +Plugin -loop, ( do-token / ?do-token -- ) Plugin next, ( for-token ) Plugin leave, ( -- ) Plugin ?leave, ( -- ) @@ -1726,7 +1727,7 @@ T has? relocate H Ghost (do) Ghost (?do) 2drop Ghost (for) drop -Ghost (loop) Ghost (+loop) 2drop +Ghost (loop) Ghost (+loop) Ghost (-loop) 2drop drop Ghost (next) drop Ghost !does drop Ghost compile, drop @@ -2965,6 +2966,24 @@ Builder input-var Build: ( m v size -- m v' ) over T , H + ;Build DO: abort" Not in cross mode" ;DO +\ Mini-OOF + +\ Builder method +\ Build: ( m v -- m' v ) over T , swap cell+ swap H ;Build +\ DO: abort" Not in cross mode" ;DO + +\ Builder var +\ Build: ( m v size -- m v+size ) over T , H + ;Build +\ DO: ( o -- addr ) T @ H + ;DO + +\ Builder end-class +\ Build: ( addr m v -- ) +\ T here >r , dup , 2 cells H ?DO T ['] noop , 1 cells H +LOOP +\ T cell+ dup cell+ r> rot @ 2 cells /string move H ;Build +\ by: Variable + +\ : defines ( xt class -- ) T ' >body @ + ! H ; + \ Peephole optimization 05sep01jaw \ this section defines different compilation @@ -3233,6 +3252,10 @@ Cond: ENDCASE endcase, ;Cond 1to compile (+loop) loop] compile unloop skiploop] ; ' (+loop,) plugin-of +loop, +: (-loop,) ( target-addr -- ) + 1to compile (-loop) loop] + compile unloop skiploop] ; ' (-loop,) plugin-of -loop, + : (next,) compile (next) loop] compile unloop ; ' (next,) plugin-of next, @@ -3242,6 +3265,7 @@ Cond: FOR for, ;Cond Cond: LOOP 1 ncontrols? loop, ;Cond Cond: +LOOP 1 ncontrols? +loop, ;Cond +Cond: -LOOP 1 ncontrols? -loop, ;Cond Cond: NEXT 1 ncontrols? next, ;Cond \ String words 23feb93py