Rename switch to ialias
The switch name was confusing.
This commit is contained in:
parent
b4f3fde062
commit
f8b7a3ce65
10
blk.fs
10
blk.fs
@ -1123,7 +1123,7 @@ lblexec BSET L1 FSET ( B284 ) L2 FSET ( B286 )
|
||||
A ORr, IFZ, JP(HL), THEN,
|
||||
A DECr, ( compiled? ) IFNZ, ( no )
|
||||
3 CPi, IFZ, ( alias ) LDDE(HL), JR, lblexec BWR THEN,
|
||||
IFNC, ( switch )
|
||||
IFNC, ( ialias )
|
||||
LDDE(HL), EXDEHL, LDDE(HL), JR, lblexec BWR THEN,
|
||||
( cell or does. push PFA ) HL PUSH,
|
||||
A DECr, JRZ, lblnext BWR ( cell )
|
||||
@ -1739,7 +1739,7 @@ with "390 LOAD"
|
||||
( ----- 355 )
|
||||
: +! TUCK @ + SWAP ! ;
|
||||
: *! ( addr alias -- ) 1+ ! ;
|
||||
: **! ( addr switch -- ) 1+ @ ! ;
|
||||
: **! ( addr ialias -- ) 1+ @ ! ;
|
||||
: / /MOD NIP ;
|
||||
: MOD /MOD DROP ;
|
||||
: ALLOT HERE +! ;
|
||||
@ -2155,7 +2155,7 @@ XCURRENT @ _xapply ORG @ 0x04 ( stable ABI BOOT ) + !
|
||||
( ----- 391 )
|
||||
( Now we have "as late as possible" stuff. See bootstrap doc. )
|
||||
: :* ( addr -- ) (entry) 4 ( alias ) C, , ;
|
||||
: :** ( addr -- ) (entry) 5 ( switch ) C, , ;
|
||||
: :** ( addr -- ) (entry) 5 ( ialias ) C, , ;
|
||||
( ----- 392 )
|
||||
: _bchk DUP 0x7f + 0xff > IF LIT" br ovfl" (print) ABORT THEN ;
|
||||
: DO COMPILE 2>R H@ ; IMMEDIATE
|
||||
@ -2599,8 +2599,8 @@ lblexec BSET ( DI -> wordref )
|
||||
DI PUSHx, JMPs, lblnext @ RPCs, THEN,
|
||||
AL DECr, IFZ, ( does )
|
||||
DI PUSHx, DI INCx, DI INCx, DI [DI] MOVx[], THEN,
|
||||
( alias or switch ) DI [DI] MOVx[],
|
||||
AL DECr, IFNZ, ( switch ) DI [DI] MOVx[], THEN,
|
||||
( alias or ialias ) DI [DI] MOVx[],
|
||||
AL DECr, IFNZ, ( ialias ) DI [DI] MOVx[], THEN,
|
||||
JMPs, lblexec @ RPCs,
|
||||
THEN, ( continue to compiled )
|
||||
BP INCx, BP INCx, [BP] 0 DX MOV[]+x, ( pushRS )
|
||||
|
@ -66,7 +66,7 @@ WORD( a -- a Get wordref's beginning addr.
|
||||
|
||||
: x ... ; -- Define a new word
|
||||
:* x a -- Define a new alias
|
||||
:** x a -- Define a new switch
|
||||
:** x a -- Define a new ialias
|
||||
CREATE x -- Create cell named x. Doesn't allocate a PF.
|
||||
[COMPILE] x -- *I* Compile word x and write it to HERE.
|
||||
IMMEDIATE words are *not* executed.
|
||||
@ -164,7 +164,7 @@ C! c a -- Store byte c in address a
|
||||
C!+ c a -- a+1 Store byte c in a and inc a.
|
||||
C!- c a -- a-1 Store byte c in a and dec a.
|
||||
*! a al -- Change alias al's addr to a.
|
||||
**! a sw -- Change switch sw's addr to a.
|
||||
**! a sw -- Change ialias sw's addr to a.
|
||||
CURRENT -- a Set a to wordref of last added entry.
|
||||
CURRENT* -- a A pointer to active CURRENT*. Useful
|
||||
when we have multiple active dicts.
|
||||
@ -185,7 +185,7 @@ MOVEW notes: this word's purpose is to interface with word-
|
||||
based systems. src and dst are addressed as *bytes* but u is a
|
||||
*word* count. Every iteration increases src and dst by 2. This
|
||||
shouldn't be used on regular memory, it will yield weird
|
||||
results. Use it with A! switch pointing to a word-based target.
|
||||
results. Use it with A! ialias pointing to a word-based target.
|
||||
|
||||
# Arithmetic / Bits
|
||||
|
||||
|
@ -109,7 +109,7 @@ compiled word.
|
||||
4: alias. See usage.txt. PFA is like a cell, but instead of
|
||||
pushing it to PS, we execute it.
|
||||
|
||||
5: switch. Same as alias, but with an added indirection.
|
||||
5: ialias. Same as alias, but with an added indirection.
|
||||
|
||||
# System variables
|
||||
|
||||
|
@ -52,7 +52,7 @@ Interpreter output is unbuffered and only has EMIT. This
|
||||
word can also be overriden, mostly as a companion to the
|
||||
raison d'etre of your KEY override.
|
||||
|
||||
# Aliases and Switches
|
||||
# Aliases
|
||||
|
||||
A common pattern in Forth is to add an indirection layer with
|
||||
a pointer word. For example, if you have a word "FOO" for
|
||||
@ -65,7 +65,7 @@ verbose, which make us want to avoid this pattern for words
|
||||
that are often used.
|
||||
|
||||
For this purpose, Collapse OS has two special word types:
|
||||
alias and switches.
|
||||
alias and ialiases (indirect alias).
|
||||
|
||||
An alias is a variable that contains a pointer to another word.
|
||||
When invoked, we invoke the specified pointer with minimal over-
|
||||
@ -74,18 +74,18 @@ with "' _FOO :* FOO". Invoking FOO will then invoke "_FOO". You
|
||||
can change the alias' pointer with "*!" like this:
|
||||
"' BAR ' FOO *!". FOO now invokes BAR.
|
||||
|
||||
A switch is like an alias, but with a second level of indi-
|
||||
A ialias is like an alias, but with a second level of indi-
|
||||
rection. The variable points to a cell pointing to our word.
|
||||
It works like an alias, except you have to use ":**" and "**!".
|
||||
Switches are used by core code which point to hardcoded
|
||||
Ialiases are used by core code which point to hardcoded
|
||||
addresses in RAM (because the core code is designed to run from
|
||||
ROM, we can't have regular variables). You are unlikely to
|
||||
need switches in regular code.
|
||||
need ialiases in regular code.
|
||||
|
||||
# Addressed devices
|
||||
|
||||
A@, A! and A, are the indirect versions of C@, C! and C,. They
|
||||
are switch words and initially point to C@, C! and C,.
|
||||
are ialias words and initially point to C@, C! and C,.
|
||||
|
||||
Addressed device words can be useful to "pipe" processing to
|
||||
places outside of regular memory.
|
||||
|
Loading…
Reference in New Issue
Block a user