@@ -5484,15 +5484,15 @@ reduces them without incurring seq initialization"
5484
5484
5485
5485
; ;; PersistentArrayMap
5486
5486
5487
- (defn- array-map- index-of-nil? [arr m k ]
5487
+ (defn- array-index-of-nil? [arr]
5488
5488
(let [len (alength arr)]
5489
5489
(loop [i 0 ]
5490
5490
(cond
5491
5491
(<= len i) -1
5492
5492
(nil? (aget arr i)) i
5493
5493
:else (recur (+ i 2 ))))))
5494
5494
5495
- (defn- array-map- index-of-keyword? [arr m k]
5495
+ (defn- array-index-of-keyword? [arr k]
5496
5496
(let [len (alength arr)
5497
5497
kstr (.-fqn k)]
5498
5498
(loop [i 0 ]
@@ -5503,7 +5503,7 @@ reduces them without incurring seq initialization"
5503
5503
(identical? kstr (.-fqn k')))) i
5504
5504
:else (recur (+ i 2 ))))))
5505
5505
5506
- (defn- array-map- index-of-symbol? [arr m k]
5506
+ (defn- array-index-of-symbol? [arr k]
5507
5507
(let [len (alength arr)
5508
5508
kstr (.-str k)]
5509
5509
(loop [i 0 ]
@@ -5514,40 +5514,41 @@ reduces them without incurring seq initialization"
5514
5514
(identical? kstr (.-str k')))) i
5515
5515
:else (recur (+ i 2 ))))))
5516
5516
5517
- (defn- array-map- index-of-identical? [arr m k]
5517
+ (defn- array-index-of-identical? [arr k]
5518
5518
(let [len (alength arr)]
5519
5519
(loop [i 0 ]
5520
5520
(cond
5521
5521
(<= len i) -1
5522
5522
(identical? k (aget arr i)) i
5523
5523
:else (recur (+ i 2 ))))))
5524
5524
5525
- (defn- array-map- index-of-equiv? [arr m k]
5525
+ (defn- array-index-of-equiv? [arr k]
5526
5526
(let [len (alength arr)]
5527
5527
(loop [i 0 ]
5528
5528
(cond
5529
5529
(<= len i) -1
5530
5530
(= k (aget arr i)) i
5531
5531
:else (recur (+ i 2 ))))))
5532
5532
5533
- (defn- array-map-index-of [m k]
5534
- (let [arr (.-arr m)]
5535
- (cond
5536
- (keyword? k) (array-map-index-of-keyword? arr m k)
5533
+ (defn array-index-of [arr k]
5534
+ (cond
5535
+ (keyword? k) (array-index-of-keyword? arr k)
5537
5536
5538
- (or ^boolean (goog/isString k) (number? k))
5539
- (array-map- index-of-identical? arr m k)
5537
+ (or ^boolean (goog/isString k) (number? k))
5538
+ (array-index-of-identical? arr k)
5540
5539
5541
- (symbol? k) (array-map- index-of-symbol? arr m k)
5540
+ (symbol? k) (array-index-of-symbol? arr k)
5542
5541
5543
- (nil? k)
5544
- (array-map- index-of-nil? arr m k )
5542
+ (nil? k)
5543
+ (array-index-of-nil? arr)
5545
5544
5546
- :else (array-map- index-of-equiv? arr m k) )))
5545
+ :else (array-index-of-equiv? arr k )))
5547
5546
5548
- (defn- array-map-extend-kv [m k v]
5549
- (let [arr (.-arr m)
5550
- l (alength arr)
5547
+ (defn- array-map-index-of [m k]
5548
+ (array-index-of (.-arr m) k))
5549
+
5550
+ (defn- array-extend-kv [arr k v]
5551
+ (let [l (alength arr)
5551
5552
narr (make-array (+ l 2 ))]
5552
5553
(loop [i 0 ]
5553
5554
(when (< i l)
@@ -5557,6 +5558,9 @@ reduces them without incurring seq initialization"
5557
5558
(aset narr (inc l) v)
5558
5559
narr))
5559
5560
5561
+ (defn- array-map-extend-kv [m k v]
5562
+ (array-extend-kv (.-arr m) k v))
5563
+
5560
5564
(declare TransientArrayMap )
5561
5565
5562
5566
(deftype PersistentArrayMapSeq [arr i _meta]
@@ -5793,17 +5797,22 @@ reduces them without incurring seq initialization"
5793
5797
5794
5798
(set! (.-fromArray PersistentArrayMap)
5795
5799
(fn [arr ^boolean no-clone ^boolean no-check]
5796
- (let [arr (if no-clone arr (aclone arr))]
5800
+ (as-> (if no-clone arr (aclone arr)) arr
5797
5801
(if no-check
5798
- (let [cnt (/ (alength arr) 2 )]
5799
- (PersistentArrayMap. nil cnt arr nil ))
5800
- (let [len (alength arr)]
5801
- (loop [i 0
5802
- ret (transient (.-EMPTY PersistentArrayMap))]
5803
- (if (< i len)
5804
- (recur (+ i 2 )
5805
- (-assoc! ret (aget arr i) (aget arr (inc i))))
5806
- (-persistent! ret))))))))
5802
+ arr
5803
+ (let [ret (array )]
5804
+ (loop [i 0 ]
5805
+ (when (< i (alength arr))
5806
+ (let [k (aget arr i)
5807
+ v (aget arr (inc i))
5808
+ idx (array-index-of ret k)]
5809
+ (when (== idx -1 )
5810
+ (.push ret k)
5811
+ (.push ret v)))
5812
+ (recur (+ i 2 ))))
5813
+ ret))
5814
+ (let [cnt (/ (alength arr) 2 )]
5815
+ (PersistentArrayMap. nil cnt arr nil )))))
5807
5816
5808
5817
(es6-iterable PersistentArrayMap)
5809
5818
@@ -7439,7 +7448,10 @@ reduces them without incurring seq initialization"
7439
7448
" keyval => key val
7440
7449
Returns a new array map with supplied mappings."
7441
7450
[& keyvals]
7442
- (.fromArray cljs.core/PersistentArrayMap (apply array keyvals) true false ))
7451
+ (let [arr (if (instance? IndexedSeq keyvals)
7452
+ (.-arr keyvals)
7453
+ (into-array keyvals))]
7454
+ (.fromArray cljs.core/PersistentArrayMap arr true false )))
7443
7455
7444
7456
(defn obj-map
7445
7457
" keyval => key val
0 commit comments