| ." NEXT_P1;" cr |
." NEXT_P1;" cr |
| stores |
stores |
| fill-tos |
fill-tos |
| ." NEXT_P2;" cr ; |
." NEXT_P2;" ; |
| |
|
| : type-c ( c-addr u -- ) |
: type-c-code ( c-addr u xt -- ) |
| \ like TYPE, but replaces "TAIL;" with tail code |
\ like TYPE, but replaces "TAIL;" with tail code produced by xt |
| |
{ xt } |
| begin ( c-addr1 u1 ) |
begin ( c-addr1 u1 ) |
| 2dup s" TAIL;" search |
2dup s" TAIL;" search |
| while ( c-addr1 u1 c-addr3 u3 ) |
while ( c-addr1 u1 c-addr3 u3 ) |
| 2dup 2>r drop nip over - type |
2dup 2>r drop nip over - type |
| output-c-tail |
xt execute |
| 2r> 5 /string |
2r> 5 /string |
| \ !! resync #line missing |
\ !! resync #line missing |
| repeat |
repeat |
| stack-pointer-updates |
stack-pointer-updates |
| ." {" cr |
." {" cr |
| ." #line " c-line @ . quote c-filename 2@ type quote cr |
." #line " c-line @ . quote c-filename 2@ type quote cr |
| prim prim-c-code 2@ type-c |
prim prim-c-code 2@ ['] output-c-tail type-c-code |
| ." }" cr |
." }" cr |
| output-c-tail |
output-c-tail |
| ." }" cr |
." }" cr |
| fetches ; |
fetches ; |
| |
|
| : part-output-c-tail ( -- ) |
: part-output-c-tail ( -- ) |
| stores |
stores ; |
| fill-tos ; |
|
| |
: output-combined-tail ( -- ) |
| |
part-output-c-tail |
| |
prim >r combined to prim |
| |
in-part @ >r in-part off |
| |
output-c-tail |
| |
r> in-part ! r> to prim ; |
| |
|
| : output-part ( p -- ) |
: output-part ( p -- ) |
| to prim |
to prim |
| prim add-depths \ !! right place? |
prim add-depths \ !! right place? |
| ." {" cr |
." {" cr |
| ." #line " c-line @ . quote c-filename 2@ type quote cr |
." #line " c-line @ . quote c-filename 2@ type quote cr |
| prim prim-c-code 2@ type-c \ !! deal with TAIL |
prim prim-c-code 2@ ['] output-combined-tail type-c-code |
| ." }" cr |
." }" cr |
| part-output-c-tail |
part-output-c-tail |
| ." }" cr ; |
." }" cr ; |