| \ address of number of stack items in effect out |
\ address of number of stack items in effect out |
| stack-number @ cells prim prim-stacks-out + ; |
stack-number @ cells prim prim-stacks-out + ; |
| |
|
| |
: stack-prim-stacks-sync ( stack -- addr ) |
| |
prim prim-stacks-sync swap stack-number @ th ; |
| |
|
| \ global vars |
\ global vars |
| variable c-line |
variable c-line |
| 2variable c-filename |
2variable c-filename |
| : same-as-in? ( item -- f ) |
: same-as-in? ( item -- f ) |
| \ f is true iff the offset and stack of item is the same as on input |
\ f is true iff the offset and stack of item is the same as on input |
| >r |
>r |
| |
r@ item-stack @ stack-prim-stacks-sync @ if |
| |
rdrop false exit |
| |
endif |
| r@ item-first @ if |
r@ item-first @ if |
| rdrop false exit |
rdrop false exit |
| endif |
endif |
| endif |
endif |
| -1 s+loop |
-1 s+loop |
| \ we did not find a type, abort |
\ we did not find a type, abort |
| |
abort |
| false s" unknown prefix" ?print-error ; |
false s" unknown prefix" ?print-error ; |
| |
|
| : declaration ( item -- ) |
: declaration ( item -- ) |
| stack item item-stack ! |
stack item item-stack ! |
| item declaration ; |
item declaration ; |
| |
|
| : stack-prim-stacks-sync ( stack -- addr ) |
|
| prim prim-stacks-sync swap stack-number @ th ; |
|
| |
|
| : set-prim-stacks-sync ( stack -- ) |
: set-prim-stacks-sync ( stack -- ) |
| stack-prim-stacks-sync on ; |
stack-prim-stacks-sync on ; |
| |
|
| item-stack @ dup if |
item-stack @ dup if |
| set-prim-stacks-sync |
set-prim-stacks-sync |
| else \ prefixless "..." syncs all stacks |
else \ prefixless "..." syncs all stacks |
| ['] set-prim-stacks-sync map-stacks1 |
drop ['] set-prim-stacks-sync map-stacks1 |
| endif ; |
endif ; |
| set-current |
set-current |
| |
|
| (( letter (( letter || digit )) ** |
(( letter (( letter || digit )) ** |
| )) <- c-ident ( -- ) |
)) <- c-ident ( -- ) |
| |
|
| (( ` # ?? (( letter || digit || ` : )) ++ (( ` . ` . ` . )) ?? |
(( ` . ` . ` . |
| |
)) <- sync-stack ( -- ) |
| |
|
| |
(( ` # ?? (( letter || digit || ` : )) ++ sync-stack ?? |
| |
|| sync-stack |
| )) <- stack-ident ( -- ) |
)) <- stack-ident ( -- ) |
| |
|
| (( nowhitebq nowhite ** )) |
(( nowhitebq nowhite ** )) |