--- gforth/cross.fs 2002/09/26 11:36:42 1.129 +++ gforth/cross.fs 2003/01/01 17:28:29 1.133 @@ -1175,6 +1175,7 @@ false DefaultValue backtrace false DefaultValue new-input false DefaultValue peephole false DefaultValue abranch +true DefaultValue control-rack [THEN] true DefaultValue interpreter @@ -1703,7 +1704,7 @@ Ghost (loop) Ghost (+loop) Ghost (next) drop Ghost (does>) Ghost (compile) 2drop Ghost (.") Ghost (S") Ghost (ABORT") 2drop drop -Ghost (C") drop +Ghost (C") Ghost c(abort") Ghost type 2drop drop Ghost ' drop \ user ghosts @@ -1732,7 +1733,9 @@ Ghost state drop : ht-string, ( addr count -- ) dup there swap last-string 2! - dup T c, H bounds ?DO I c@ T c, H LOOP ; + dup T c, H bounds ?DO I c@ T c, H LOOP ; +: ht-mem, ( addr count ) + bounds ?DO I c@ T c, H LOOP ; >TARGET @@ -2267,6 +2270,7 @@ Defer setup-prim-semantics Variable prim# : first-primitive ( n -- ) prim# ! ; +: group 0 word drop prim# @ 1- -$200 and prim# ! ; : Primitive ( -- ) \ name >in @ skip? IF drop EXIT THEN >in ! s" prims" T $has? H 0= @@ -2926,17 +2930,23 @@ compile: does-resolved ;compile : >mark ( -- sys ) T here ( dup ." M" hex. ) 0 , H ; -: branchoffset ( src dest -- ) - tchar / ; \ ?? jaw +X has? abranch [IF] + : branchoffset ( src dest -- ) drop ; + : offset, ( n -- ) X A, ; +[ELSE] + : branchoffset ( src dest -- ) - tchar / ; \ ?? jaw + : offset, ( n -- ) X , ; +[THEN] -:noname compile branch X here branchoffset X , ; +:noname compile branch X here branchoffset offset, ; IS branch, ( target-addr -- ) -:noname compile ?branch X here branchoffset X , ; +:noname compile ?branch X here branchoffset offset, ; IS ?branch, ( target-addr -- ) -:noname compile branch T here 0 , H ; +:noname compile branch T here 0 H offset, ; IS branchmark, ( -- branchtoken ) -:noname compile ?branch T here 0 , H ; +:noname compile ?branch T here 0 H offset, ; IS ?branchmark, ( -- branchtoken ) -:noname T here 0 , H ; +:noname T here 0 H offset, ; IS ?domark, ( -- branchtoken ) :noname dup X @ ?struc X here over branchoffset swap X ! ; IS branchtoresolve, ( branchtoken -- ) @@ -3009,7 +3019,7 @@ Cond: ?LEAVE ?leave, ;Cond : loop] ( target-addr -- ) branchto, - dup X here branchoffset X , + dup X here branchoffset offset, tcell - (done) ; : skiploop] ?dup IF branchto, branchtoresolve, THEN ; @@ -3114,63 +3124,25 @@ Cond: LOOP 1 ncontrols? loop, ;Cond Cond: +LOOP 1 ncontrols? +loop, ;Cond Cond: NEXT 1 ncontrols? next, ;Cond -\ Absoulte branches 26sep02jaw - -\ This section defined different semantics for -\ conditionals, using and compiling absolute branches - -X has? abranch [IF] - -Ghost abranch drop -Ghost a?branch drop -Ghost a(?do) drop -Ghost a(do) drop -Ghost a(next) drop -Ghost a(+loop) drop -Ghost a(loop) drop - -:noname compile abranch X a, ; plugin-of branch, - -:noname compile a?branch X a, ; plugin-of ?branch, - -:noname compile abranch T here 0 a, H ; plugin-of branchmark, - -:noname compile a?branch T here 0 a, H ; plugin-of ?branchmark, - -:noname - dup X @ ABORT" CROSS: branch already resolved" - X here swap X a! ; plugin-of branchtoresolve, - -:noname - 0 compile a(?do) ?domark, (leave) - branchtomark, 2 to1 ; plugin-of ?do, - -: aloop] ( target-addr -- ) - branchto, - dup X a, - tcell - (done) ; - -:noname - 1to compile a(loop) aloop] - compile unloop skiploop] ; plugin-of loop, - -:noname - 1to compile a(+loop) aloop] - compile unloop skiploop] ; plugin-of +loop, - -:noname - compile a(next) aloop] compile unloop ; plugin-of next, - -[THEN] - \ String words 23feb93py : ," [char] " parse ht-string, X align ; +X has? control-rack [IF] Cond: ." compile (.") T ," H ;Cond Cond: S" compile (S") T ," H ;Cond Cond: C" compile (C") T ," H ;Cond Cond: ABORT" compile (ABORT") T ," H ;Cond +[ELSE] +Cond: ." '" parse tuck 2>r ahead, there 2r> ht-mem, X align + >r then, r> compile ALiteral compile Literal compile type ;Cond +Cond: S" '" parse tuck 2>r ahead, there 2r> ht-mem, X align + >r then, r> compile ALiteral compile Literal ;Cond +Cond: C" ahead, there [char] " parse ht-string, X align + >r then, r> compile ALiteral ;Cond +Cond: ABORT" if, ahead, there [char] " parse ht-string, X align + >r then, r> compile ALiteral compile c(abort") then, ;Cond +[THEN] Cond: IS T ' >body H compile ALiteral compile ! ;Cond : IS T >address ' >body ! H ; @@ -3215,7 +3187,7 @@ Cond: postpone ( -- ) \ name hex >CROSS -Create magic s" Gforth2x" here over allot swap move +Create magic s" Gforth3x" here over allot swap move bigendian 1+ \ strangely, in magic big=0, little=1 tcell 1 = 0 and or @@ -3704,7 +3676,6 @@ previous : bye bye ; \ dummy -: group 0 word drop ; \ turnkey direction : H forth ; immediate