aboutsummaryrefslogtreecommitdiff
path: root/forth/reader.fs
diff options
context:
space:
mode:
authorChouser <chouser@n01se.net>2015-02-14 15:18:18 -0500
committerChouser <chouser@n01se.net>2015-02-21 13:22:44 -0500
commitc05d35e8dd1ebbc371d7c9239d788ddf844eae31 (patch)
treef444aff987556c84920590beb76692f0c2887fdf /forth/reader.fs
parent69972a8399efe4abb8567526e90262e131f90d26 (diff)
downloadmal-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.fs37
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