From fb240abd9a2bf99761d067709be772a8bc4dc0a9 Mon Sep 17 00:00:00 2001 From: Brian Taylor Date: Thu, 24 May 2012 19:31:06 -0400 Subject: [PATCH] CLJS-268 warn on calling type constructor with wrong number of arguments --- src/clj/cljs/compiler.clj | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/clj/cljs/compiler.clj b/src/clj/cljs/compiler.clj index eb030f7aa6..bbc1a1e5ef 100644 --- a/src/clj/cljs/compiler.clj +++ b/src/clj/cljs/compiler.clj @@ -1113,7 +1113,13 @@ (disallowing-recur (let [enve (assoc env :context :expr) ctorexpr (analyze enve ctor) - argexprs (vec (map #(analyze enve %) args))] + argexprs (vec (map #(analyze enve %) args)) + known-num-fields (:num-fields (resolve-existing-var env ctor)) + argc (count args)] + (when (and known-num-fields (not= known-num-fields argc)) + (warning env + (str "WARNING: Wrong number of args (" argc ") passed to " ctor))) + {:env env :op :new :form form :ctor ctorexpr :args argexprs :children (into [ctorexpr] argexprs)}))) @@ -1220,7 +1226,9 @@ (let [t (munge (:name (resolve-var (dissoc env :locals) tsym)))] (swap! namespaces update-in [(-> env :ns :name) :defs tsym] (fn [m] - (let [m (assoc (or m {}) :name t)] + (let [m (assoc (or m {}) + :name t + :num-fields (count fields))] (if-let [line (:line env)] (-> m (assoc :file *cljs-file*)