diff --git a/src/main/clojure/cljs/core.cljc b/src/main/clojure/cljs/core.cljc index 24a64cdd76..6052b496fe 100644 --- a/src/main/clojure/cljs/core.cljc +++ b/src/main/clojure/cljs/core.cljc @@ -1887,7 +1887,9 @@ ks (map keyword fields) getters (map (core/fn [k] `(~k ~ms)) ks)] `(defn ~fn-name ~docstring [~ms] - (new ~rname ~@getters nil (not-empty (dissoc ~ms ~@ks)) nil)))) + (let [extmap# (cond->> (dissoc ~ms ~@ks) + (record? ~ms) (into {}))] + (new ~rname ~@getters nil (not-empty extmap#) nil))))) (core/defmacro defrecord "(defrecord name [fields*] options* specs*) diff --git a/src/test/cljs/cljs/core_test.cljs b/src/test/cljs/cljs/core_test.cljs index fc475a0aef..7c7cb6c302 100644 --- a/src/test/cljs/cljs/core_test.cljs +++ b/src/test/cljs/cljs/core_test.cljs @@ -1586,3 +1586,10 @@ (is (uri? (goog.Uri. ""))) (is (uri? (goog.Uri. "http://clojurescript.org"))) (is (uri? (goog.Uri. "some string"))))) + +(defrecord CLJS-2787 []) + +(deftest test-cljs-2787 + (let [x (map->CLJS-2787 {1 2}) + y (map->CLJS-2787 x)] + (= x y)))