Skip to content

Commit d33b6d0

Browse files
committed
add getBasis methods to deftype and defrecord ctors a la Clojure JVM
1 parent ef66637 commit d33b6d0

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

src/clj/cljs/core.clj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,7 @@
10831083
(deftype* ~t ~fields ~pmasks
10841084
~(if (seq impls)
10851085
`(extend-type ~t ~@(dt->et t impls fields))))
1086+
(set! (.-getBasis ~t) (fn [] '[~@fields]))
10861087
(set! (.-cljs$lang$type ~t) true)
10871088
(set! (.-cljs$lang$ctorStr ~t) ~(core/str r))
10881089
(set! (.-cljs$lang$ctorPrWriter ~t) (fn [this# writer# opt#] (-write writer# ~(core/str r))))
@@ -1238,6 +1239,7 @@
12381239
assoc :internal-ctor true)]
12391240
`(let []
12401241
~(emit-defrecord &env rsym r fields impls)
1242+
(set! (.-getBasis ~r) (fn [] '[~@fields]))
12411243
(set! (.-cljs$lang$type ~r) true)
12421244
(set! (.-cljs$lang$ctorPrSeq ~r) (fn [this#] (core/list ~(core/str r))))
12431245
(set! (.-cljs$lang$ctorPrWriter ~r) (fn [this# writer#] (-write writer# ~(core/str r))))

test/cljs/cljs/core_test.cljs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2771,6 +2771,14 @@
27712771
(is (= (destructure-1216 1 2 3 4)[1 2 [3 4]]
27722772
(apply destructure-1216 [1 2 3 4])))))
27732773

2774+
(deftype TypeBasis [a b])
2775+
2776+
(defrecord RecordBasis [c d e])
2777+
2778+
(deftest test-get-basis
2779+
(is (= (.getBasis TypeBasis) '[a b]))
2780+
(is (= (.getBasis RecordBasis) '[c d e])))
2781+
27742782
(comment
27752783
;; ObjMap
27762784
;; (let [ks (map (partial str "foo") (range 500))

0 commit comments

Comments
 (0)