version 1.125, 2002/12/28 17:18:27
|
version 1.126, 2002/12/31 14:50:53
|
Line 162 struct%
|
Line 162 struct%
|
cell% 2* field stack-pointer \ stackpointer name |
cell% 2* field stack-pointer \ stackpointer name |
cell% field stack-type \ name for default type of stack items |
cell% field stack-type \ name for default type of stack items |
cell% field stack-in-index-xt \ ( in-size item -- in-index ) |
cell% field stack-in-index-xt \ ( in-size item -- in-index ) |
|
cell% field stack-access-transform \ ( nitem -- index ) |
end-struct stack% |
end-struct stack% |
|
|
struct% |
struct% |
Line 197 create stacks max-stacks cells allot \ a
|
Line 198 create stacks max-stacks cells allot \ a
|
1 next-stack-number +! |
1 next-stack-number +! |
r@ stack-type ! |
r@ stack-type ! |
save-mem r@ stack-pointer 2! |
save-mem r@ stack-pointer 2! |
['] stack-in-index r> stack-in-index-xt ! ; |
['] stack-in-index r@ stack-in-index-xt ! |
|
['] noop r@ stack-access-transform ! |
|
rdrop ; |
|
|
: map-stacks { xt -- } |
: map-stacks { xt -- } |
\ perform xt for all stacks |
\ perform xt for all stacks |
Line 333 defer inst-stream-f ( -- stack )
|
Line 336 defer inst-stream-f ( -- stack )
|
|
|
\ stack access stuff |
\ stack access stuff |
|
|
: normal-stack-access1 ( n stack -- ) |
: normal-stack-access0 { n stack -- } |
stack-pointer 2@ type |
n stack stack-access-transform @ execute ." [" 0 .r ." ]" ; |
dup |
|
if |
: normal-stack-access1 { n stack -- } |
." [" 0 .r ." ]" |
stack stack-pointer 2@ type |
|
n if |
|
n stack normal-stack-access0 |
else |
else |
drop ." TOS" |
." TOS" |
endif ; |
endif ; |
|
|
: normal-stack-access ( n stack -- ) |
: normal-stack-access ( n stack -- ) |
Line 645 stack inst-stream IP Cell
|
Line 650 stack inst-stream IP Cell
|
stack stack-out @ 0<> stack stack-in @ 0= and |
stack stack-out @ 0<> stack stack-in @ 0= and |
if |
if |
." IF_" stack stack-pointer 2@ 2dup type ." TOS(" |
." IF_" stack stack-pointer 2@ 2dup type ." TOS(" |
2dup type ." [0] = " type ." TOS);" cr |
2dup type 0 stack normal-stack-access0 ." = " type ." TOS);" cr |
endif ; |
endif ; |
|
|
: flush-tos ( -- ) |
: flush-tos ( -- ) |
Line 655 stack inst-stream IP Cell
|
Line 660 stack inst-stream IP Cell
|
stack stack-out @ 0= stack stack-in @ 0<> and |
stack stack-out @ 0= stack stack-in @ 0<> and |
if |
if |
." IF_" stack stack-pointer 2@ 2dup type ." TOS(" |
." IF_" stack stack-pointer 2@ 2dup type ." TOS(" |
2dup type ." TOS = " type ." [0]);" cr |
2dup type ." TOS = " type 0 stack normal-stack-access0 ." );" cr |
endif ; |
endif ; |
|
|
: fill-tos ( -- ) |
: fill-tos ( -- ) |
Line 668 stack inst-stream IP Cell
|
Line 673 stack inst-stream IP Cell
|
: fetches ( -- ) |
: fetches ( -- ) |
prim prim-effect-in prim prim-effect-in-end @ ['] fetch map-items ; |
prim prim-effect-in prim prim-effect-in-end @ ['] fetch map-items ; |
|
|
|
: stack-update-transform ( n1 stack -- n2 ) |
|
\ n2 is the number by which the stack pointer should be |
|
\ incremented to pop n1 items |
|
stack-access-transform @ dup >r execute |
|
0 r> execute - ; |
|
|
: stack-pointer-update { stack -- } |
: stack-pointer-update { stack -- } |
\ stacks grow downwards |
\ stacks grow downwards |
stack stack-diff |
stack stack-diff |
Line 675 stack inst-stream IP Cell
|
Line 686 stack inst-stream IP Cell
|
stack inst-stream = if |
stack inst-stream = if |
." INC_IP(" 0 .r ." );" cr |
." INC_IP(" 0 .r ." );" cr |
else |
else |
stack stack-pointer 2@ type ." += " 0 .r ." ;" cr |
stack stack-pointer 2@ type ." += " |
|
stack stack-update-transform 0 .r ." ;" cr |
endif |
endif |
endif ; |
endif ; |
|
|