Skip to content

Commit ada9497

Browse files
committed
Optimize generated JS code by declaring fn arities (closes #197)
1 parent 7d2fe9e commit ada9497

File tree

10 files changed

+69
-23
lines changed

10 files changed

+69
-23
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- Fixed handling of false values in entity cache (PR #198, thx [Brandon Bloom](https://github.com/brandonbloom))
66
- Fixed issue when string values were interpreted as lookup refs (#214)
77
- Speed up rschema calculation (#192, thx [Andre R.](https://github.com/rauhs))
8+
- Optimize generated JS code by declaring fn arities (#197)
89

910
# 0.15.5
1011

src/datascript/btset.cljc

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,11 @@
413413

414414
;; BTSet
415415

416-
(declare btset-conj btset-disj btset-iter)
416+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
417+
(defn ^:declared btset-conj [set key cmp])
418+
(defn ^:declared btset-disj [set key cmp])
419+
(defn ^:declared btset-iter [set])
420+
417421
(def ^:const uninitialized-hash #?(:cljs nil :clj -1))
418422

419423
(deftype BTSet [root shift cnt comparator meta #?(:cljs ^:mutable __hash
@@ -687,9 +691,18 @@
687691
^long [^BTSet set ^long path]
688692
(-prev-path (.-root set) path (.-shift set)))
689693

690-
691-
692-
(declare iter riter iter-first iter-next iter-chunk iter-chunked-next iter-rseq iter-reduce)
694+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
695+
(defn ^:declared iter [set left right])
696+
(defn ^:declared iter-first [iter])
697+
(defn ^:declared iter-next [iter])
698+
(defn ^:declared iter-chunk [iter])
699+
(defn ^:declared iter-chunked-next [iter])
700+
(defn ^:declared iter-rseq [iter])
701+
(defn ^:declared iter-reduce ([iter f]) ([iter f start]))
702+
(defn ^:declared riter [set left right])
703+
(defn ^:declared riter-first [riter])
704+
(defn ^:declared riter-next [ri])
705+
(defn ^:declared riter-rseq [riter])
693706

694707
(defn btset-iter
695708
"Iterator that represents whole set"
@@ -837,8 +850,6 @@
837850

838851
;; reverse iteration
839852

840-
(declare riter-first riter-next riter-rseq)
841-
842853
(deftype ReverseIter [set ^long left ^long right keys ^long idx]
843854
#?@(:cljs [
844855
ISeqable

src/datascript/db.cljc

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,13 @@
115115

116116
;; ----------------------------------------------------------------------------
117117

118-
(declare hash-datom equiv-datom seq-datom val-at-datom nth-datom assoc-datom)
118+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
119+
(defn- ^:declared hash-datom [d])
120+
(defn- ^:declared equiv-datom [a b])
121+
(defn- ^:declared seq-datom [d])
122+
(defn- ^:declared nth-datom ([d i]) ([d i nf]))
123+
(defn- ^:declared assoc-datom [d k v])
124+
(defn- ^:declared val-at-datom [d k nf])
119125

120126
(deftype Datom [e a v tx added]
121127
#?@(:cljs
@@ -368,7 +374,16 @@
368374

369375
;; ----------------------------------------------------------------------------
370376

371-
(declare hash-db hash-fdb equiv-db empty-db pr-db resolve-datom validate-attr components->pattern indexing?)
377+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
378+
(defn- ^:declared hash-db [db])
379+
(defn- ^:declared hash-fdb [db])
380+
(defn- ^:declared equiv-db [a b])
381+
(defn- ^:declared empty-db [db])
382+
#?(:cljs (defn ^:declared pr-db [db w opts]))
383+
(defn- ^:declared resolve-datom [db e a v t])
384+
(defn- ^:declared validate-attr [attr at])
385+
(defn- ^:declared components->pattern [db index cs])
386+
(defn ^:declared indexing? [db attr])
372387

373388
(defrecord-updatable DB [schema eavt aevt avet max-eid max-tx rschema hash]
374389
#?@(:cljs
@@ -681,7 +696,10 @@
681696

682697
;; ----------------------------------------------------------------------------
683698

684-
(declare entid-strict entid-some ref?)
699+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
700+
(defn ^:declared entid-strict [db eid])
701+
(defn ^:declared entid-some [db eid])
702+
(defn ^:declared ref? [db attr])
685703

686704
(defn- resolve-datom [db e a v t]
687705
(when a (validate-attr a (list 'resolve-datom 'db e a v t)))
@@ -985,7 +1003,8 @@
9851003
~expr
9861004
(cond-let ~@rest)))))
9871005

988-
(declare transact-tx-data)
1006+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
1007+
(defn ^:declared transact-tx-data [report es])
9891008

9901009
(defn retry-with-tempid [report es tempid upserted-eid]
9911010
(if (contains? (:tempids report) tempid)

src/datascript/impl/entity.cljc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33
(:require [#?(:cljs cljs.core :clj clojure.core) :as c]
44
[datascript.db :as db]))
55

6-
(declare entity ->Entity equiv-entity lookup-entity touch)
6+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
7+
(defn ^:declared entity [db eid])
8+
(defn ^:declared ->Entity [db eid touched cache])
9+
(defn- ^:declared equiv-entity [this that])
10+
(defn- ^:declared lookup-entity ([this attr]) ([this attr not-found]))
11+
(defn ^:declared touch [e])
712

813
(defn- entid [db eid]
914
(when (or (number? eid)

src/datascript/js.cljs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
(reduce-kv
1818
(fn [m k v] (assoc m k (walk/postwalk keywordize v))) {})))
1919

20-
(declare entities->clj)
20+
(defn- ^:declared entities->clj [entities])
2121

2222
(defn- entity->clj [e]
2323
(cond (map? e)

src/datascript/lru.cljc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
(ns datascript.lru)
22

3-
(declare assoc-lru cleanup-lru)
3+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
4+
(defn ^:declared assoc-lru [lru k v])
5+
(defn ^:declared cleanup-lru [lru])
46

57
#?(:cljs
68
(deftype LRU [key-value gen-key key-gen gen limit]

src/datascript/parser.cljc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77

88
;; utils
99

10-
(declare collect-vars-acc)
10+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
11+
(defn- ^:declared collect-vars-acc [acc form])
12+
(defn ^:declared parse-clause [form])
13+
(defn ^:declared parse-clauses [clauses])
14+
(defn ^:declared parse-binding [form])
1115

1216
(defprotocol ITraversable
1317
(-collect [_ pred acc])
@@ -178,8 +182,6 @@
178182
(deftrecord BindTuple [bindings])
179183
(deftrecord BindColl [binding])
180184

181-
(declare parse-binding)
182-
183185
(defn parse-bind-ignore [form]
184186
(when (= '_ form)
185187
(with-source (BindIgnore.) form)))
@@ -406,7 +408,6 @@
406408
(deftrecord Or [source rule-vars clauses])
407409
(deftrecord And [clauses])
408410

409-
(declare parse-clause parse-clauses)
410411

411412
(defn parse-pattern-el [form]
412413
(or (parse-placeholder form)

src/datascript/pull_parser.cljc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@
5555
spec (reduce aggregate-specs init specs)]
5656
[:subpattern (update spec :attrs persistent!)])))
5757

58-
(declare parse-pattern)
58+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
59+
(defn ^:declared parse-pattern [pattern])
5960

6061
(def ^:private wildcard? #{'* :* "*"})
6162

src/datascript/query.cljc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@
1919
;; ----------------------------------------------------------------------------
2020

2121
(def ^:const lru-cache-size 100)
22-
(declare built-ins)
22+
23+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
24+
(defn ^:declared -collect ([context symbols]) ([acc rels symbols]))
25+
(defn ^:declared -resolve-clause [context clause])
2326

2427
;; Records
2528

@@ -494,9 +497,6 @@
494497
(second clause)
495498
(first clause)))))
496499

497-
(declare -collect)
498-
(declare -resolve-clause)
499-
500500
(def rule-seqid (atom 0))
501501

502502
(defn expand-rule [clause context used-args]

src/datascript/query_v3.cljc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,13 @@
2121
[datascript.db Datom]
2222
[datascript.btset Iter])))
2323

24-
(declare resolve-clauses collect-rel-xf collect-to)
24+
;; using defn instead of declare because of http://dev.clojure.org/jira/browse/CLJS-1871
25+
(defn ^:declared resolve-clauses [context clauses])
26+
(defn ^:declared collect-rel-xf [syms-indexed rel])
27+
(defn ^:declared collect-to
28+
([context syms acc])
29+
([context syms acc xfs])
30+
([context syms acc xfs specimen]))
2531

2632
(def ^:const lru-cache-size 100)
2733

0 commit comments

Comments
 (0)