Merge pull request #377 from asarhaddon/fix-runtests-pre-eval
[jackhill/mal.git] / miniMAL / reader.json
index 2cdcde4..b1de4d9 100644 (file)
       ["re-matches", "re", "strn", ["concat", "acc", "g1"]]]]]],
 
 ["def", "tokenize", ["fn", ["strn"],
-  ["let", ["re-str", ["`", "[\\s,]*(~@|[\\[\\]{}()'`~^@]|\"(?:\\\\.|[^\\\\\"])*\"|;.*|[^\\s\\[\\]{}('\"`,;)]*)"],
+  ["let", ["re-str", ["`", "[\\s,]*(~@|[\\[\\]{}()'`~^@]|\"(?:\\\\.|[^\\\\\"])*\"?|;.*|[^\\s\\[\\]{}('\"`,;)]*)"],
            "re", ["RegExp", "re-str", ["`", "g"]]],
-    ["re-matches", "re", "strn", ["`", []]]]]],
+    [".",
+      ["re-matches", "re", "strn", ["`", []]],
+      ["`", "filter"],
+      ["fn", ["x"], ["not", ["=", ["get", "x", 0],
+                                  ["`", ";"]]]]]]]],
 
 ["def", "read-atom", ["fn", ["rdr"],
   ["let", ["token", ["rdr-next", "rdr"]],
     ["if", [".", "token", ["`", "match"], ["RegExp", ["`", "^-?[0-9]+$"]]],
       ["parseInt", "token", 10],
     ["if", ["=", ["`", "\""], ["get", "token", 0]],
-      ["slice", "token", 1, ["-", ["count", "token"], 1]],
+      ["if", ["=", ["`", "\""], ["get", "token", ["-", ["count", "token"], 1]]],
+        [".",
+          ["slice", "token", 1, ["-", ["count", "token"], 1]],
+          ["`", "replace"], ["RegExp", ["`", "\\\\(.)"], ["`", "g"]],
+                            ["fn", ["_", "c"],
+                              ["if", ["=", "c", ["`", "n"]],
+                                ["`", "\n"],
+                                "c"]]],
+        ["throw", ["`", "expected '\"', got EOF"]]],
+    ["if", ["=", ["`", ":"], ["get", "token", 0]],
+      ["keyword", ["slice", "token", 1]],
     ["if", ["=", ["`", "nil"], "token"],
       null,
     ["if", ["=", ["`", "true"], "token"],
       true,
     ["if", ["=", ["`", "false"], "token"],
       false,
-    ["hash-map", ["`", "type"], ["`", "Symbol"],
-                 ["`", "val"], "token"]]]]]]]]],
+    ["symbol", "token"]]]]]]]]]],
 
-["def", "read-list-entries", ["fn", ["rdr"],
+["def", "read-list-entries", ["fn", ["rdr", "start", "end"],
   ["let", ["tok", ["rdr-peek", "rdr"]],
     ["if", "tok",
-      ["if", ["=", ["`", ")"], "tok"],
+      ["if", ["=", "end", "tok"],
         ["`", []],
         ["cons", ["read-form", "rdr"],
-                 ["read-list-entries", "rdr"]]],
-      ["throw", ["`", "expected ')'"]]]]]],
+                 ["read-list-entries", "rdr", "start", "end"]]],
+      ["throw", ["str", ["`", "expected "], "end", ["`", ", got EOF"]]]]]]],
 
-["def", "read-list", ["fn", ["rdr"],
+["def", "read-list", ["fn", ["rdr", "start", "end"],
   ["let", ["token", ["rdr-next", "rdr"]],
-    ["if", ["=", ["`", "("], "token"],
-      ["let", ["lst", ["read-list-entries", "rdr"]],
+    ["if", ["=", "start", "token"],
+      ["let", ["lst", ["read-list-entries", "rdr", "start", "end"]],
         ["do",
           ["rdr-next", "rdr"],
           "lst"]],
-      ["throw", ["`", "expected '('"]]]]]],
+      ["throw", ["str", ["`", "expected "], "start"]]]]]],
 
 ["def", "read-form", ["fn", ["rdr"],
   ["let", ["token", ["rdr-peek", "rdr"]],
+    ["if", ["=", ["`", "'"], "token"],
+      ["do",
+        ["rdr-next", "rdr"],
+        ["list", ["symbol", ["`", "quote"]], ["read-form", "rdr"]]],
+    ["if", ["=", ["`", "`"], "token"],
+      ["do",
+        ["rdr-next", "rdr"],
+        ["list", ["symbol", ["`", "quasiquote"]], ["read-form", "rdr"]]],
+    ["if", ["=", ["`", "~"], "token"],
+      ["do",
+        ["rdr-next", "rdr"],
+        ["list", ["symbol", ["`", "unquote"]], ["read-form", "rdr"]]],
+    ["if", ["=", ["`", "~@"], "token"],
+      ["do",
+        ["rdr-next", "rdr"],
+        ["list", ["symbol", ["`", "splice-unquote"]], ["read-form", "rdr"]]],
+    ["if", ["=", ["`", "^"], "token"],
+      ["do",
+        ["rdr-next", "rdr"],
+        ["let", ["meta", ["read-form", "rdr"]],
+          ["list", ["symbol", ["`", "with-meta"]], ["read-form", "rdr"], "meta"]]],
+    ["if", ["=", ["`", "@"], "token"],
+      ["do",
+        ["rdr-next", "rdr"],
+        ["list", ["symbol", ["`", "deref"]], ["read-form", "rdr"]]],
+
     ["if", ["=", ["`", ")"], "token"],
       ["throw", ["`", "unexpected ')'"]],
     ["if", ["=", ["`", "("], "token"],
-      ["read-list", "rdr"],
-    ["read-atom", "rdr"]]]]]],
+      ["read-list", "rdr", ["`", "("], ["`", ")"]],
+
+    ["if", ["=", ["`", "]"], "token"],
+      ["throw", ["`", "unexpected ']'"]],
+    ["if", ["=", ["`", "["], "token"],
+      ["vectorl", ["read-list", "rdr", ["`", "["], ["`", "]"]]],
+
+    ["if", ["=", ["`", "}"], "token"],
+      ["throw", ["`", "unexpected '}'"]],
+    ["if", ["=", ["`", "{"], "token"],
+      ["apply", "hash-map", ["read-list", "rdr", ["`", "{"], ["`", "}"]]],
+
+    ["read-atom", "rdr"]]]]]]]]]]]]]]]],
 
 ["def", "read-str", ["fn", ["strn"],
   ["let", ["tokens", ["tokenize", "strn"],