git » jacl.git » commit 58dd216

Fix dotted pair syntax

author Alan Dipert
2021-08-06 05:16:50 UTC
committer Alan Dipert
2021-08-06 05:16:50 UTC
parent a0d4fc0802ea28abcf59dfdaf9aaaf7bec668efe

Fix dotted pair syntax

jacl-tests.lisp +6 -0
jacl.js +3 -3

diff --git a/jacl-tests.lisp b/jacl-tests.lisp
index 971473d..90bc869 100644
--- a/jacl-tests.lisp
+++ b/jacl-tests.lisp
@@ -53,6 +53,12 @@
     (let ((sym '|Alan|))
       (assert= (\. sym |name|) @"Alan"))))
 
+(deftest "Lists"
+    (with-label "dotted pair"
+      (let ((pair '(x . 1)))
+        (assert= (car pair) 'x)
+        (assert= (cdr pair) 1))))
+
 (defvar *top-level-special-variable*)
 
 (defun top-level-function-referencing-special-variable ()
diff --git a/jacl.js b/jacl.js
index 5023167..7b17c3a 100644
--- a/jacl.js
+++ b/jacl.js
@@ -693,7 +693,7 @@ const readList = async stream => {
     const cdr = x;
     x = await rdr.read(true, listSentinels);
     if (x === listSentinels.get(')'))
-      return new ReadValues(new (Cons(car, cdr)));
+      return new ReadValues(new Cons(car, cdr));
     throw new Error(`More than one object after . in list`);
   }
 
@@ -929,6 +929,8 @@ class Reader {
         return EOF;
       } else if (isWhitespace(x)) {
         continue;
+      } else if (charSentinels.has(x)) {
+        return charSentinels.get(x);
       } else if (macroFun = READTABLE.val().getMacro(x)) {
         const vals = [...await macroFun(this.stream)];
         if (vals.length) {
@@ -943,8 +945,6 @@ class Reader {
         return readMultiEscaped(this.stream, new Token().sawPipe(), internSymbols);
       } else if (isConstituent(x)) {
         return readSingleEscaped(this.stream, new Token(x.toUpperCase()), internSymbols);
-      } else if (charSentinels.has(x)) {
-        return charSentinels.get(x);
       } else {
         throw new Error(`Illegal character: '${x}'`);
       }