ns: accept vector reference clauses; add Compiler/specials
Two general fixes shaken out by clojure/tools.macro. - The ns macro now accepts a vector reference clause [:require …] / [:use …], not just the list form (:require …). Clojure dispatches on (first clause) and accepts both; jolt silently dropped vector clauses, so a ns written with them loaded with nothing required/used (tools.macro's test ns uses [:use …]). - clojure.lang.Compiler/specials is now a static whose keys are the special-form symbols (matching Clojure 1.2/1.3). Macroexpansion tooling reads (keys Compiler/specials) to know which heads not to expand. tools.macro itself isn't fully passing yet — its mexpand-all works, but the macrolet/symbol-macrolet tests need letfn to macroexpand to letfn* (jolt models letfn as a special form, not a macro over letfn*), so it stays off the list. make test green (+1 corpus row, 0 new divergences), shakesmoke byte-identical. One re-mint (the ns macro).
This commit is contained in:
parent
1ba79aa223
commit
192ef66e7e
4 changed files with 17 additions and 3 deletions
|
|
@ -117,7 +117,9 @@
|
|||
(let [nm (if (and (seq? nm) (= 'with-meta (first nm))) (second nm) nm)
|
||||
calls (reduce
|
||||
(fn [acc clause]
|
||||
(if (seq? clause)
|
||||
;; a reference clause may be a list (:require …) or a vector
|
||||
;; [:require …]; Clojure accepts both, dispatching on (first clause).
|
||||
(if (or (seq? clause) (vector? clause))
|
||||
(let [head (first clause) args (rest clause)]
|
||||
(cond
|
||||
(= head :require) (conj acc `(require ~@(map (fn [s] `(quote ~s)) args)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue