File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 30563056 (.push ~dest (unchecked-get (js-arguments ) i#))
30573057 (recur (inc i#))))))
30583058
3059+ (core/defn- elide-implicit-macro-args [arglists]
3060+ (core/map (core/fn [arglist]
3061+ (if (core/vector? arglist)
3062+ (core/subvec arglist 2 )
3063+ (core/drop 2 arglist)))
3064+ arglists))
3065+
30593066(core/defn- variadic-fn [name meta [[arglist & body :as method] :as fdecl] emit-var?]
30603067 (core/letfn [(dest-args [c]
30613068 (map (core/fn [n] `(unchecked-get (js-arguments ) ~n))
30623069 (range c)))]
30633070 (core/let [rname (symbol (core/str ana/*cljs-ns*) (core/str name))
30643071 sig (remove '#{&} arglist)
30653072 c-1 (core/dec (count sig))
3073+ macro? (:macro meta)
30663074 meta (assoc meta
30673075 :top-fn
30683076 {:variadic? true
3069- :max-fixed-arity c-1
3070- :method-params [sig]
3071- :arglists (core/list arglist)
3077+ :max-fixed-arity ( core/cond-> c-1 macro? ( core/- 2 ))
3078+ :method-params ( core/cond-> [sig] macro? elide-implicit-macro-args)
3079+ :arglists (core/cond-> ( core/ list arglist) macro? elide-implicit-macro-args )
30723080 :arglists-meta (doall (map meta [arglist]))})]
30733081 `(do
30743082 (def ~(with-meta name meta)
31173125 (concat
31183126 (map count sigs)
31193127 [(core/- (count (first (filter varsig? arglists))) 2 )]))
3128+ macro? (:macro meta)
31203129 meta (assoc meta
31213130 :top-fn
31223131 {:variadic? variadic
3123- :max-fixed-arity maxfa
3124- :method-params sigs
3125- :arglists arglists
3132+ :max-fixed-arity ( core/cond-> maxfa macro? ( core/- 2 ))
3133+ :method-params ( core/cond-> sigs macro? elide-implicit-macro-args)
3134+ :arglists ( core/cond-> arglists macro? elide-implicit-macro-args)
31263135 :arglists-meta (doall (map meta arglists))})
31273136 args-sym (gensym " args" )
31283137 param-counts (map count arglists)]
Original file line number Diff line number Diff line change 99(ns cljs.macro-test
1010 (:refer-clojure :exclude [==])
1111 (:require [cljs.test :refer-macros [deftest is]])
12- (:use-macros [cljs.macro-test.macros :only [==]]))
12+ (:use-macros [cljs.macro-test.macros :only [==]])
13+ (:require-macros [cljs.macro-test.cljs2852]))
1314
1415(deftest test-macros
1516 (is (= (== 1 1 ) 2 )))
2223
2324(deftest test-cljs-2283
2425 (is (= " :a" (first (js-keys (js-obj :a 1 ))))))
26+
27+ (deftest test-cljs-2852
28+ (is (= '([x])) (cljs.macro-test.cljs2852/beta ))
29+ (is (= '([x] [x y])) (cljs.macro-test.cljs2852/delta ))
30+ (is (= '([x] [x & xs])) (cljs.macro-test.cljs2852/zeta )))
Original file line number Diff line number Diff line change 1+ (ns cljs.macro-test.cljs2852 )
2+
3+ (defmacro alpha
4+ ([x]))
5+
6+ (defmacro beta []
7+ `'~(:arglists (meta #'alpha)))
8+
9+ (defmacro gamma
10+ ([x])
11+ ([x y]))
12+
13+ (defmacro delta []
14+ `'~(:arglists (meta #'gamma)))
15+
16+ (defmacro epsilon
17+ ([x])
18+ ([x & xs]))
19+
20+ (defmacro zeta []
21+ `'~(:arglists (meta #'epsilon)))
You can’t perform that action at this time.
0 commit comments