1 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; and now
for something completely different
...
5 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
10 : VALUE
( value
-- ) COMPILER
:(CFAIDX
-DO-VALUE
) COMPILER
:(MK
-CONST
-VAR
) ;
11 : VALUE?
( cfa
-- bool
) @ COMPILER
:(CFAIDX
-DO-VALUE
) = ;
12 : VALUE@
( cfa
-- value
) DUP VALUE?
" non-value CFA" ?NOT
-ERROR CFA
->PFA @
;
13 : VALUE
! ( value cfa
-- ) DUP VALUE?
" non-value CFA" ?NOT
-ERROR CFA
->PFA
! ;
15 : DEFER
( -- ) ['] NOOP COMPILER:(CFAIDX-DO-DEFER) COMPILER:(MK-CONST-VAR) ;
16 : DEFER? ( cfa -- bool ) @ COMPILER:(CFAIDX-DO-DEFER) = ;
17 : DEFER@ ( cfa -- value ) DUP DEFER? " non-defer CFA" ?NOT-ERROR CFA->PFA @ ;
18 : DEFER! ( value cfa -- ) DUP DEFER? " non-defer CFA" ?NOT-ERROR CFA->PFA ! ;
21 ;; ( addr count FALSE -- addr count FALSE / TRUE )
22 : (TO-EXTENDER) ... ; (HIDDEN)
25 : (TO-DEFER) ( n cfa -- ) CFA->PFA ! ; (HIDDEN)
26 ALIAS FORTH:(TO-DEFER) (TO-VALUE)
29 PARSE-SKIP-COMMENTS PARSE-NAME DUP " word name expected" ?NOT-ERROR
32 2DUP FIND-WORD ( addr count cfa TRUE / addr count FALSE )
34 ENDCR SPACE TYPE ." ? -- wut?\n" " word not found" ERROR
38 CFALITERAL COMPILE FORTH:(TO-VALUE)
44 CFALITERAL COMPILE FORTH:(TO-DEFER)
47 ELSE " 'TO' with non-defer and non-value" ERROR
54 : (TO-READ) ( -- val ) \ name
56 >IN @ >R -FIND-REQUIRED
57 STATE @ IF COMPILE, ELSE EXECUTE ENDIF
63 STATE @ IF COMPILE SWAP COMPILE - ELSE SWAP - ENDIF
69 STATE @ IF COMPILE + ELSE + ENDIF
74 1 LITERAL [COMPILE] +TO
78 -1 LITERAL [COMPILE] +TO
82 0 STATE @ IF LITERAL ENDIF
88 : IS ( defer-cfa -- ) \ name
89 STATE @ IF [COMPILE] ['] COMPILE DEFER
!
94 : ACTION-OF ( -- cfa ) \ name
95 STATE @ IF [COMPILE] ['] COMPILE DEFER@
101 \ .( +++ test VALUEs +++\n)
107 \ : vtxc 69 TO vtest ;
108 \ DEBUG:DECOMPILE vtxc