+ then
+
+ string? if
+ inc-parse-idx
+ readstring
+ drop string-type
+
+ nextchar [char] " <> if
+ bold red ." Missing closing double-quote." reset-term cr
+ abort
+ then
+
+ inc-parse-idx
+ exit
+ then
+
+ pair? if
+ inc-parse-idx
+
+ eatspaces
+
+ readpair
+
+ eatspaces
+
+ nextchar [char] ) <> if
+ bold red ." Missing closing paren." reset-term cr
+ abort
+ then
+
+ inc-parse-idx
+
+ exit
+ then
+
+ eof? if
+ bold fg blue ." Moriturus te saluto." reset-term ." ok" cr
+ quit
+ then
+
+ bold fg red ." Error parsing string starting at character '"
+ nextchar emit
+ ." '. Aborting." reset-term cr
+ abort
+
+; is read
+
+\ ---- Eval ----
+
+: self-evaluating? ( obj -- obj bool )
+ number-type istype? if true exit then
+ boolean-type istype? if true exit then
+ character-type istype? if true exit then
+ string-type istype? if true exit then
+ nil-type istype? if true exit then
+ false ;
+
+: eval
+ \ self-evaluating? if
+ \ exit
+ \ then