diff options
| author | Chouser <chouser@n01se.net> | 2015-02-14 15:18:18 -0500 |
|---|---|---|
| committer | Chouser <chouser@n01se.net> | 2015-02-21 13:22:44 -0500 |
| commit | c05d35e8dd1ebbc371d7c9239d788ddf844eae31 (patch) | |
| tree | f444aff987556c84920590beb76692f0c2887fdf /forth/reader.fs | |
| parent | 69972a8399efe4abb8567526e90262e131f90d26 (diff) | |
| download | mal-c05d35e8dd1ebbc371d7c9239d788ddf844eae31.tar.gz mal-c05d35e8dd1ebbc371d7c9239d788ddf844eae31.zip | |
forth: Get rid of car/cdr style lists
Rename MalArray to MalList
Diffstat (limited to 'forth/reader.fs')
| -rw-r--r-- | forth/reader.fs | 37 |
1 files changed, 6 insertions, 31 deletions
diff --git a/forth/reader.fs b/forth/reader.fs index 8f7e3e3..f65db2c 100644 --- a/forth/reader.fs +++ b/forth/reader.fs @@ -91,32 +91,7 @@ defer read-form ( str-addr str-len -- str-addr str-len mal-obj ) out-addr out-len MalString. ; : read-list ( str-addr str-len open-paren-char close-paren-char - -- str-addr str-len non-paren-char mal-list ) - \ push objects onto "dictionary" -- maybe not the best stack for this? - 0 { close-char len } - drop adv-str - begin ( str-addr str-len char ) - skip-spaces ( str-addr str-len non-space-char ) - over 0= if - drop 2drop - s\" expected '" close-char str-append-char - s\" ', got EOF" str-append safe-type 1 throw - endif - dup close-char <> - while ( str-addr str-len non-space-non-paren-char ) - read-form , len 1+ to len - repeat - drop adv-str - - \ pop objects out of "dictionary" into MalList - mal-nil - len 0 ?do - 0 cell - allot - here @ swap conj - loop ; - -: read-array ( str-addr str-len open-paren-char close-paren-char - -- str-addr str-len non-paren-char mal-array ) + -- str-addr str-len non-paren-char mal-list ) here { close-char old-here } drop adv-str begin ( str-addr str-len char ) @@ -131,22 +106,22 @@ defer read-form ( str-addr str-len -- str-addr str-len mal-obj ) read-form , repeat drop adv-str - old-here here>MalArray + old-here here>MalList ; : read-wrapped ( buf-addr buf-len quote-char sym-addr sym-len -- buf-addr buf-len char mal-list ) here { old-here } MalSymbol. , ( buf-addr buf-len char ) read-form , ( buf-addr buf-len char ) - old-here here>MalArray ; + old-here here>MalList ; : read-form2 ( str-addr str-len char -- str-addr str-len char mal-obj ) begin skip-spaces dup mal-digit? if read-int else - dup [char] ( = if [char] ) read-array else - dup [char] [ = if [char] ] read-array MalVector new tuck MalVector/list ! else - dup [char] { = if [char] } read-array MalMap new tuck MalMap/list ! else + dup [char] ( = if [char] ) read-list else + dup [char] [ = if [char] ] read-list MalVector new tuck MalVector/list ! else + dup [char] { = if [char] } read-list MalMap new tuck MalMap/list ! else dup [char] " = if read-string-literal else dup [char] ; = if read-comment else dup [char] : = if drop adv-str read-symbol-str MalKeyword. else |
