--- gforth/cross.fs 2002/01/05 20:16:17 1.118 +++ gforth/cross.fs 2002/03/19 11:13:08 1.120 @@ -249,21 +249,26 @@ hex \ the defualt base for the cross hex +\ FIXME delete` \ 1 Constant Cross-Flag \ to check whether assembler compiler plug-ins are \ for cross-compiling \ No! we use "[IFUNDEF]" there to find out whether we are target compiling!!! +\ FIXME move down : comment? ( c-addr u -- c-addr u ) 2dup s" (" compare 0= IF postpone ( ELSE 2dup s" \" compare 0= IF postpone \ THEN THEN ; -: X bl word count [ ' target >wordlist ] Literal search-wordlist - IF state @ IF compile, - ELSE execute THEN - ELSE -1 ABORT" Cross: access method not supported!" - THEN ; immediate +: X ( -- ) +\G The next word in the input is a target word. +\G Equivalent to T but without permanent +\G switch to target dictionary. Used as prefix e.g. for @, !, here etc. + bl word count [ ' target >wordlist ] Literal search-wordlist + IF state @ IF compile, ELSE execute THEN + ELSE -1 ABORT" Cross: access method not supported!" + THEN ; immediate \ Begin CROSS COMPILER: @@ -902,7 +907,11 @@ Defer is-forward Defer do-refered : prim-forward ( ghost -- ) - colonmark, 1 do-refered ; \ compile space for call +\ ." PF" .sourcepos + colonmark, 0 do-refered ; \ compile space for call +: doer-forward ( ghost -- ) +\ ." DF" .sourcepos + colonmark, 2 do-refered ; \ compile space for doer ' prim-forward IS is-forward : (ghostheader) ( -- ) @@ -1068,8 +1077,6 @@ Ghost branch Ghost ?branch Ghost unloop Ghost ;S 2drop Ghost lit Ghost ! 2drop Ghost noop drop -Ghost :docol Ghost :doesjump Ghost :dodoes 2drop drop -Ghost :dovar drop Ghost over Ghost = Ghost drop 2drop drop Ghost 2drop drop Ghost 2dup drop @@ -1085,6 +1092,14 @@ Ghost lit-perform drop Ghost lit+ drop Ghost does-exec drop +' doer-forward IS is-forward + +Ghost :docol Ghost :doesjump Ghost :dodoes 2drop drop +Ghost :dovar drop + + +' prim-forward IS is-forward + \ \ Parameter for target systems 06oct92py @@ -1644,6 +1659,7 @@ T has? relocate H >CROSS : call-forward ( ghost -- ) +\ ." CF" .sourcepos there 0 colon, 0 do-refered ; ' call-forward IS is-forward @@ -1867,7 +1883,7 @@ Defer resolve-warning dup >comp @ EXECUTE ; : gexecute ( ghost -- ) - dup >magic @ = IF -1 ABORT" CROSS: gexecute on immediate word" THEN + dup >magic @ = ABORT" CROSS: gexecute on immediate word" (gexecute) ; : addr, ( ghost -- ) @@ -2183,13 +2199,14 @@ Defer setup-prim-semantics Ghost tuck swap resolve swap tuck >magic ! asmprimname, ; -: Alias: ( cfa -- ) \ name +: Doer: ( cfa -- ) \ name >in @ skip? IF 2drop EXIT THEN >in ! dup 0< s" prims" T $has? H 0= and IF .sourcepos ." needs doer: " >in @ bl word count type >in ! cr THEN - Ghost tuck swap resolve swap >magic ! ; + Ghost + tuck swap resolve swap >magic ! ; Variable prim# : first-primitive ( n -- ) prim# ! ; @@ -2199,11 +2216,9 @@ Variable prim# IF .sourcepos ." needs prim: " >in @ bl word count type >in ! cr THEN -\ ['] prim-forward IS is-forward prim# @ (THeader ( S xt ghost ) dup >ghost-flags set-flag over resolve T A, H alias-mask flag! -\ ['] call-forward IS is-forward -1 prim# +! ; >CROSS @@ -2287,10 +2302,10 @@ T 2 cells H Value xt>body there xt>body + ca>native T a, H 1 fillcfa ; ' (doprim,) plugin-of doprim, : (doeshandler,) ( -- ) - T cfalign H compile :doesjump T 0 , H ; ' (doeshandler,) plugin-of doeshandler, + T cfalign H [G'] :doesjump addr, T 0 , H ; ' (doeshandler,) plugin-of doeshandler, : (dodoes,) ( does-action-ghost -- ) - ]comp [G'] :dodoes gexecute comp[ + ]comp [G'] :dodoes addr, comp[ addr, \ the relocator in the c engine, does not like the \ does-address to marked for relocation @@ -2505,7 +2520,6 @@ Defer instant-interpret-does>-hook : does-resolved ( ghost -- ) compile does-exec g>xt T a, H ; -\ dup g>body alit, >do:ghost @ g>xt 0 t>body - colon, ; : resolve-does>-part ( -- ) \ resolve words made by builders @@ -2796,7 +2810,7 @@ T has? peephole H [IF] : (callc) compile call T >body a, H ; ' (callc) plugin-of colon, : (call-res) >tempdp resolved gexecute tempdp> drop ; ' (call-res) plugin-of colon-resolve -: (prim) dup 0< IF ( $4000 - ) ELSE +: (prim) dup 0< IF $4000 - ELSE ." wrong usage of (prim) " dup gdiscover IF .ghost ELSE . THEN cr -2 throw THEN T a, H ; ' (prim) plugin-of prim,