version 1.27, 1995/01/30 18:47:52
|
version 1.31, 1995/02/23 20:17:20
|
Line 66 DOES> ( n -- ) + c@ ;
|
Line 66 DOES> ( n -- ) + c@ ;
|
bl c, |
bl c, |
LOOP ; |
LOOP ; |
|
|
|
\ !! this is machine-dependent, but works on all but the strangest machines |
|
' faligned Alias maxaligned |
|
' falign Alias maxalign |
|
|
|
\ the code field is aligned if its body is maxaligned |
|
\ !! machine-dependent and won't work if "0 >body" <> "0 >body maxaligned" |
|
' maxaligned Alias cfaligned |
|
' maxalign Alias cfalign |
|
|
: chars ; immediate |
: chars ; immediate |
|
|
: A! ( addr1 addr2 -- ) dup relon ! ; |
: A! ( addr1 addr2 -- ) dup relon ! ; |
Line 78 DOES> ( n -- ) + c@ ;
|
Line 87 DOES> ( n -- ) + c@ ;
|
|
|
\ name> found 17dec92py |
\ name> found 17dec92py |
|
|
: (name>) ( nfa -- cfa ) count $1F and + aligned ; |
: (name>) ( nfa -- cfa ) |
: name> ( nfa -- cfa ) cell+ |
count $1F and + cfaligned ; |
dup (name>) swap c@ $80 and 0= IF @ THEN ; |
: name> ( nfa -- cfa ) |
|
cell+ |
|
dup (name>) swap c@ $80 and 0= IF @ THEN ; |
|
|
: found ( nfa -- cfa n ) cell+ |
: found ( nfa -- cfa n ) cell+ |
dup c@ >r (name>) r@ $80 and 0= IF @ THEN |
dup c@ >r (name>) r@ $80 and 0= IF @ THEN |
Line 358 Defer notfound ( c-addr count -- )
|
Line 369 Defer notfound ( c-addr count -- )
|
IF |
IF |
1 and |
1 and |
IF \ not restricted to compile state? |
IF \ not restricted to compile state? |
nip nip execute EXIT |
nip nip execute EXIT |
THEN |
THEN |
-&14 throw |
-&14 throw |
THEN |
THEN |
Line 693 Avariable leave-sp leave-stack 3 cells
|
Line 704 Avariable leave-sp leave-stack 3 cells
|
cell - dup @ swap |
cell - dup @ swap |
leave-sp ! ; |
leave-sp ! ; |
|
|
: DONE ( orig -- ) drop >r drop |
: DONE ( orig -- ) |
\ !! the original done had ( addr -- ) |
\ !! the original done had ( addr -- ) |
|
drop >r drop |
begin |
begin |
leave> |
leave> |
over r@ u>= |
over r@ u>= |
Line 802 Avariable leave-sp leave-stack 3 cells
|
Line 814 Avariable leave-sp leave-stack 3 cells
|
defer (header) |
defer (header) |
defer header ' (header) IS header |
defer header ' (header) IS header |
|
|
|
: string, ( c-addr u -- ) |
|
\ puts down string as cstring |
|
dup c, here swap chars dup allot move ; |
|
|
: name, ( "name" -- ) |
: name, ( "name" -- ) |
name |
name |
dup $1F u> -&19 and throw ( is name too long? ) |
dup $1F u> -&19 and throw ( is name too long? ) |
dup c, here swap chars dup allot move align ; |
string, cfalign ; |
: input-stream-header ( "name" -- ) |
: input-stream-header ( "name" -- ) |
\ !! this is f83-implementation-dependent |
\ !! this is f83-implementation-dependent |
align here last ! -1 A, |
align here last ! -1 A, |
Line 824 create nextname-buffer 32 chars allot
|
Line 840 create nextname-buffer 32 chars allot
|
\ !! f83-implementation-dependent |
\ !! f83-implementation-dependent |
nextname-buffer count |
nextname-buffer count |
align here last ! -1 A, |
align here last ! -1 A, |
dup c, here swap chars dup allot move align |
string, cfalign |
$80 flag! |
$80 flag! |
input-stream ; |
input-stream ; |
|
|
Line 836 create nextname-buffer 32 chars allot
|
Line 852 create nextname-buffer 32 chars allot
|
['] nextname-header IS (header) ; |
['] nextname-header IS (header) ; |
|
|
: noname-header ( -- ) |
: noname-header ( -- ) |
0 last ! |
0 last ! cfalign |
input-stream ; |
input-stream ; |
|
|
: noname ( -- ) \ general |
: noname ( -- ) \ general |
Line 856 create nextname-buffer 32 chars allot
|
Line 872 create nextname-buffer 32 chars allot
|
Create ??? 0 , 3 c, char ? c, char ? c, char ? c, |
Create ??? 0 , 3 c, char ? c, char ? c, char ? c, |
: >name ( cfa -- nfa ) |
: >name ( cfa -- nfa ) |
$21 cell do |
$21 cell do |
dup i - count $9F and + aligned over $80 + = if |
dup i - count $9F and + cfaligned over $80 + = if |
i - cell - unloop exit |
i - cell - unloop exit |
then |
then |
cell +loop |
cell +loop |
Line 902 Create ??? 0 , 3 c, char ? c, char ? c,
|
Line 918 Create ??? 0 , 3 c, char ? c, char ? c,
|
: Constant (Constant) , ; |
: Constant (Constant) , ; |
: AConstant (Constant) A, ; |
: AConstant (Constant) A, ; |
|
|
: 2CONSTANT |
: 2Constant |
create ( w1 w2 "name" -- ) |
Create ( w1 w2 "name" -- ) |
2, |
2, |
does> ( -- w1 w2 ) |
DOES> ( -- w1 w2 ) |
2@ ; |
2@ ; |
|
|
\ IS Defer What's Defers TO 24feb93py |
\ IS Defer What's Defers TO 24feb93py |
Line 965 AVariable current
|
Line 981 AVariable current
|
\ object oriented search list 17mar93py |
\ object oriented search list 17mar93py |
|
|
\ word list structure: |
\ word list structure: |
\ struct |
|
\ 1 cells: field find-method \ xt: ( c_addr u wid -- name-id ) |
struct |
\ 1 cells: field reveal-method \ xt: ( -- ) |
1 cells: field find-method \ xt: ( c_addr u wid -- name-id ) |
\ 1 cells: field rehash-method \ xt: ( wid -- ) |
1 cells: field reveal-method \ xt: ( -- ) |
|
1 cells: field rehash-method \ xt: ( wid -- ) |
\ \ !! what else |
\ \ !! what else |
\ end-struct wordlist-map-struct |
end-struct wordlist-map-struct |
|
|
\ struct |
struct |
\ 1 cells: field wordlist-id \ not the same as wid; representation depends on implementation |
1 cells: field wordlist-id \ not the same as wid; representation depends on implementation |
\ 1 cells: field wordlist-map \ pointer to a wordlist-map-struct |
1 cells: field wordlist-map \ pointer to a wordlist-map-struct |
\ 1 cells: field wordlist-link \ link field to other wordlists |
1 cells: field wordlist-link \ link field to other wordlists |
\ 1 cells: field wordlist-extend \ points to wordlist extensions (eg hash) |
1 cells: field wordlist-extend \ points to wordlist extensions (eg hash) |
\ end-struct wordlist-struct |
end-struct wordlist-struct |
|
|
: f83find ( addr len wordlist -- nfa / false ) @ (f83find) ; |
: f83find ( addr len wordlist -- nfa / false ) @ (f83find) ; |
|
|
Line 989 AVariable lookup G forth-wordlist
|
Line 1006 AVariable lookup G forth-wordlist
|
G forth-wordlist current T ! |
G forth-wordlist current T ! |
|
|
: (search-wordlist) ( addr count wid -- nfa / false ) |
: (search-wordlist) ( addr count wid -- nfa / false ) |
dup cell+ @ @ execute ; |
dup wordlist-map @ find-method @ execute ; |
|
|
: search-wordlist ( addr count wid -- 0 / xt +-1 ) |
: search-wordlist ( addr count wid -- 0 / xt +-1 ) |
(search-wordlist) dup IF found THEN ; |
(search-wordlist) dup IF found THEN ; |
|
|
Variable warnings G -1 warnings T ! |
Variable warnings G -1 warnings T ! |
|
|
Line 1023 Variable warnings G -1 warnings T !
|
Line 1040 Variable warnings G -1 warnings T !
|
last? if |
last? if |
name>string current @ check-shadow |
name>string current @ check-shadow |
then |
then |
current @ cell+ @ cell+ @ execute ; |
current @ wordlist-map @ reveal-method @ execute ; |
|
|
: rehash ( wid -- ) dup cell+ @ cell+ cell+ @ execute ; |
: rehash ( wid -- ) dup wordlist-map @ rehash-method @ execute ; |
|
|
: ' ( "name" -- addr ) name sfind 0= if -&13 bounce then ; |
: ' ( "name" -- addr ) name sfind 0= if -&13 bounce then ; |
: ['] ( "name" -- addr ) ' postpone ALiteral ; immediate |
: ['] ( "name" -- addr ) ' postpone ALiteral ; immediate |
Line 1454 Defer 'cold ' noop IS 'cold
|
Line 1471 Defer 'cold ' noop IS 'cold
|
|
|
: cold ( -- ) |
: cold ( -- ) |
pathstring 2@ process-path pathdirs 2! |
pathstring 2@ process-path pathdirs 2! |
|
0 0 included-files 2! |
'cold |
'cold |
argc @ 1 > |
argc @ 1 > |
IF |
IF |