summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clj/clojure/core.clj10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index 65b3bc2d..b3f364c6 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -191,10 +191,14 @@
with-meta (fn with-meta [^clojure.lang.IObj x m]
(. x (withMeta m))))
+(def ^{:private true :dynamic true}
+ assert-valid-fdecl (fn [fdecl]))
+
(def
^{:private true}
sigs
(fn [fdecl]
+ (assert-valid-fdecl fdecl)
(let [asig
(fn [fdecl]
(let [arglist (first fdecl)
@@ -5652,3 +5656,9 @@
(keepi (inc idx) (rest s))
(cons x (keepi (inc idx) (rest s)))))))))]
(keepi 0 coll))))
+
+(defn- ^{:dynamic true} assert-valid-fdecl
+ "A good fdecl looks like (([a] ...) ([a b] ...)) near the end of defn."
+ [fdecl]
+ (if-let [bad-args (seq (remove #(vector? %) (map first fdecl)))]
+ (throw (IllegalArgumentException. (str "Parameter declaration " (first bad-args) " should be a vector")))))