wl

Unnamed repository; edit this file 'description' to name the repository.
git clone https://logand.com/git/wl.git/
Log | Files | Refs | LICENSE

commit 2e90a3297e09e10cc66d6ccf62c772d891aae409
parent 2ecf1c5b82c89185f2ac2970eac5b178090be322
Author: tomas <tomas@logand.com>
Date:   Sun, 18 Oct 2009 00:02:46 +0200

~ reader

Diffstat:
Mwl.java | 9+++++++--
1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/wl.java b/wl.java @@ -189,6 +189,7 @@ class wl implements Runnable { // reader final static Any Lp = mkObj(null); final static Any Rp = mkObj(null); + final static Any Tld = mkObj(null); final Any Qte = mkIsym("quote", NIL); final Any Dot = mkIsym(".", NIL); @@ -296,6 +297,7 @@ class wl implements Runnable { case '"': xchar(); Z = text(); break; case '\'': xchar(); Z = mkCons(Qte, read1(false)); break; case '`': xchar(); Z = eval(read1(false)); break; + case '~': if(Top) Z = symbol(); else {xchar(); Z = Tld;} break; default: Z = symbol(); } } @@ -306,12 +308,15 @@ class wl implements Runnable { Any Z = A; Any X; boolean D = false; + boolean E = false; while(null != (X = read1(false)) && Rp != X) { - if(Dot != X) { + if(Dot != X && Tld != X) { + if(E) {X = eval(X); E = false;} Z.cdr(D ? X : mkCons(X, NIL)); if(Z.cdr().isCons()) Z = Z.cdr(); } - D = Dot == X; + D = Dot == X || Tld == X; + E = Tld == X; } if(null == X) err("Reader underflow"); if(D) Z.cdr(A.cdr());