--- gforth/cross.fs 2001/09/12 14:55:54 1.114 +++ gforth/cross.fs 2001/11/11 22:33:31 1.116 @@ -202,6 +202,13 @@ Create bases 10 , 2 , A , 100 , [THEN] +\ this provides assert( and struct stuff +\GFORTH [IFUNDEF] assert1( +\GFORTH also forth definitions require assert.fs previous +\GFORTH [THEN] + +>CROSS + hex \ the defualt base for the cross-compiler is hex !! \ Warnings off @@ -1007,10 +1014,13 @@ Variable reuse-ghosts reuse-ghosts off \ ' >ghostname ALIAS @name +: findghost ( "ghostname" -- ghost ) + bl word gfind 0= ABORT" CROSS: Ghost don't exists" ; + : [G'] ( -- ghost : name ) \G ticks a ghost and returns its address -\ bl word gfind 0= ABORT" CROSS: Ghost don't exists" - ghost state @ IF postpone literal THEN ; immediate + findghost + state @ IF postpone literal THEN ; immediate : g>xt ( ghost -- xt ) \G Returns the xt (cfa) of a ghost. Issues a warning if undefined. @@ -1061,8 +1071,15 @@ Ghost :dovar drop Ghost over Ghost = Ghost drop 2drop drop Ghost 2drop drop Ghost 2dup drop - - +Ghost state drop +Ghost call drop +Ghost @ drop +Ghost useraddr drop +Ghost execute drop +Ghost + drop +Ghost (C") drop +Ghost decimal drop +Ghost hex drop \ \ Parameter for target systems 06oct92py @@ -1947,11 +1964,13 @@ Variable to-doc to-doc on \ Target TAGS creation s" kernel.TAGS" r/w create-file throw value tag-file-id +s" kernel.tags" r/w create-file throw value vi-tag-file-id \ contains the file-id of the tags file Create tag-beg 2 c, 7F c, bl c, Create tag-end 2 c, bl c, 01 c, Create tag-bof 1 c, 0C c, +Create tag-tab 1 c, 09 c, 2variable last-loadfilename 0 0 last-loadfilename 2! @@ -1965,13 +1984,13 @@ Create tag-bof 1 c, 0C c, s" ,0" tag-file-id write-line throw THEN ; -: cross-tag-entry ( -- ) +: cross-gnu-tag-entry ( -- ) tlast @ 0<> \ not an anonymous (i.e. noname) header IF put-load-file-name source >in @ min tag-file-id write-file throw tag-beg count tag-file-id write-file throw - tlast @ >image count 1F and tag-file-id write-file throw + Last-Header-Ghost @ >ghostname tag-file-id write-file throw tag-end count tag-file-id write-file throw base @ decimal sourceline# 0 <# #s #> tag-file-id write-file throw \ >in @ 0 <# #s [char] , hold #> tag-file-id write-line throw @@ -1979,6 +1998,22 @@ Create tag-bof 1 c, 0C c, base ! THEN ; +: cross-vi-tag-entry ( -- ) + tlast @ 0<> \ not an anonymous (i.e. noname) header + IF + sourcefilename vi-tag-file-id write-file throw + tag-tab count vi-tag-file-id write-file throw + Last-Header-Ghost @ >ghostname vi-tag-file-id write-file throw + tag-tab count vi-tag-file-id write-file throw + s" /^" vi-tag-file-id write-file throw + source vi-tag-file-id write-file throw + s" $/" vi-tag-file-id write-line throw + THEN ; + +: cross-tag-entry ( -- ) + cross-gnu-tag-entry + cross-vi-tag-entry ; + \ Check for words Defer skip? ' false IS skip? @@ -2177,8 +2212,7 @@ Comment ( Comment \ \ compile 10may93jaw : compile ( "name" -- ) \ name -\ bl word gfind 0= ABORT" CROSS: Can't compile " - ghost + findghost dup >exec-compile @ ?dup IF nip compile, ELSE postpone literal postpone gexecute THEN ; immediate restrict @@ -2200,7 +2234,8 @@ Cond: ['] T ' H alit, ;Cond : [T'] \ returns the target-cfa of a ghost, or compiles it as literal - postpone [G'] state @ IF postpone g>xt ELSE g>xt THEN ; immediate + postpone [G'] + state @ IF postpone g>xt ELSE g>xt THEN ; immediate \ \ threading modell 13dec92py \ modularized 14jun97jaw @@ -2325,6 +2360,7 @@ Cond: MAXI ;Cond >CROSS + \ Target compiling loop 12dec92py \ ">tib trick thrown out 10may93jaw \ number? defined at the top 11may93jaw @@ -2345,10 +2381,11 @@ Cond: MAXI IF 0> IF swap lit, THEN lit, discard ELSE 2drop restore-input throw Ghost gexecute THEN ; ->TARGET \ : ; DOES> 13dec92py \ ] 9may93py/jaw +>CROSS + : compiling-state ( -- ) \G set states to compililng Compiling comp-state ! @@ -2363,6 +2400,8 @@ Cond: MAXI IF >ghost-xt @ execute X off ELSE drop THEN Interpreting comp-state ! ; +>TARGET + : ] compiling-state BEGIN