Skip to content

Commit a4e06a1

Browse files
author
dnolen
committed
fix direct method invoke macro, update mutable ns
1 parent b9989d5 commit a4e06a1

File tree

3 files changed

+28
-32
lines changed

3 files changed

+28
-32
lines changed

bench/mut_perf.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// lein cljsbuild once release
2-
// d8 node_modules/immutable/dist/immutable.min.js mori.bare.js ./bench/mut_perf.js
2+
// d8 mori.base.js mori.mutable.js mori.extra.js ./bench/mut_perf.js
3+
// d8 node_modules/immutable/dist/immutable.min.js mori.bare.js mori.mutable.js ./bench/mut_perf.js
34
// jsc node_modules/immutable/dist/immutable.min.js mori.bare.js ./bench/mut_perf.js
45

56
;(function() {
@@ -47,15 +48,15 @@
4748
runs = [];
4849
for(var j = 0; j < 10; j++) {
4950
s = new Date();
50-
var mv = m.mutable.thaw(m.vector());
51+
var mv = m._thaw(m.vector());
5152
for(var i = 0; i < 1000000; i++) {
5253
if(i % 32 === 0) {
53-
mv = m.mutable.conj.f2(mv, Math.random());
54+
mv = m._conj.f2(mv, Math.random());
5455
} else {
55-
mv = m.mutable.conj.f2(mv, i);
56+
mv = m._conj.f2(mv, i);
5657
}
5758
}
58-
var v = m.mutable.freeze(mv);
59+
var v = m._freeze(mv);
5960
var el = (new Date())-s;
6061
runs.push(el);
6162
print("Mutable vector conj " + m.count(v) + " items " + el + " " + m.reduce(sum,0,v));

src/mori/macros.clj

+15-20
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
(ns mori.macros
22
(:require [cljs.compiler :as comp]
33
[cljs.analyzer :as ana]
4+
[cljs.util :as util]
45
[cljs.analyzer.api :as ana-api]))
56

67
(alias 'core 'clojure.core)
@@ -12,28 +13,22 @@
1213
(.toString coll#)))))
1314

1415
(defmacro make-inspectable [& xs]
15-
`(do
16-
~@(map make-inspectable-1 xs)))
16+
`(do ~@(map make-inspectable-1 xs)))
1717

1818
(defmacro mori-export [exportf coref]
19-
(let [{:keys [ns name methods]} (ana-api/resolve &env coref)]
20-
`(do
21-
(js/goog.exportSymbol ~(str "mori." (core/name exportf)) ~coref) ~(list 'js* ";")
22-
~@(when-not (= 1 (count methods))
23-
(map
24-
(fn [{:keys [variadic max-fixed-arity]}]
25-
(if variadic
26-
`(do
27-
(js/goog.exportSymbol
28-
~(str "mori." (core/name exportf) ".fn")
29-
~(symbol (str ns) (str (core/name name) ".cljs$core$IFn$_invoke$variadic")))
30-
~(list 'js* ";"))
31-
`(do
32-
(js/goog.exportSymbol
33-
~(str "mori." (core/name exportf) ".f" max-fixed-arity)
34-
~(symbol (str ns) (str (core/name name) ".cljs$core$IFn$_invoke$arity$" max-fixed-arity)))
35-
~(list 'js* ";"))))
36-
methods)))))
19+
(let [{:keys [ns name arglists]} (ana-api/resolve &env coref)
20+
arglists (cond-> arglists
21+
(= (first arglists) 'quote) rest)]
22+
(letfn [(export-method [arglist]
23+
(let [c (count arglist)]
24+
`(js/goog.exportSymbol
25+
~(str "mori." (core/name exportf) ".f" c)
26+
~(symbol (str ns)
27+
(str (core/name name) ".cljs$core$IFn$_invoke$arity$" c)))))]
28+
`(do
29+
(js/goog.exportSymbol ~(str "mori." (core/name exportf)) ~coref) ~(list 'js* ";")
30+
~@(when (< 1 (count arglists))
31+
(map export-method (remove #(some '#{&} %) arglists)))))))
3732

3833
(comment
3934

src/mori/mutable.cljs

+7-7
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
[transient persistent! conj assoc dissoc pop disj])
44
(:require-macros [mori.macros :refer [mori-export]]))
55

6-
(mori-export thaw cljs.core/transient)
7-
(mori-export freeze cljs.core/persistent!)
8-
(mori-export conj cljs.core/conj!)
9-
(mori-export assoc cljs.core/assoc!)
10-
(mori-export dissoc cljs.core/dissoc!)
11-
(mori-export pop cljs.core/pop!)
12-
(mori-export disj cljs.core/disj!)
6+
(mori-export _thaw cljs.core/transient)
7+
(mori-export _freeze cljs.core/persistent!)
8+
(mori-export _conj cljs.core/conj!)
9+
(mori-export _assoc cljs.core/assoc!)
10+
(mori-export _dissoc cljs.core/dissoc!)
11+
(mori-export _pop cljs.core/pop!)
12+
(mori-export _disj cljs.core/disj!)
1313

0 commit comments

Comments
 (0)