@@ -224,18 +224,22 @@ nil if the end of stream has been reached")
224
224
225
225
(defn read-delimited-list
226
226
[delim rdr recursive?]
227
- (loop [a (transient [] )]
227
+ (loop [a (array )]
228
228
(let [ch (read-past whitespace? rdr)]
229
229
(when-not ch (reader-error rdr " EOF while reading" ))
230
230
(if (identical? delim ch)
231
- ( persistent! a)
231
+ a
232
232
(if-let [macrofn (macros ch)]
233
233
(let [mret (macrofn rdr ch)]
234
- (recur (if (identical? mret rdr) a (conj! a mret))))
234
+ (recur (if (identical? mret rdr) a (do
235
+ (.push a mret)
236
+ a))))
235
237
(do
236
238
(unread rdr ch)
237
239
(let [o (read rdr true nil recursive?)]
238
- (recur (if (identical? o rdr) a (conj! a o))))))))))
240
+ (recur (if (identical? o rdr) a (do
241
+ (.push a o)
242
+ a))))))))))
239
243
240
244
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
241
245
; ; data structure readers
@@ -263,23 +267,27 @@ nil if the end of stream has been reached")
263
267
264
268
(defn read-list
265
269
[rdr _]
266
- (apply list (read-delimited-list " )" rdr true )))
270
+ (let [arr (read-delimited-list " )" rdr true )]
271
+ (loop [i (alength arr) ^not-native r ()]
272
+ (if (> i 0 )
273
+ (recur (dec i) (-conj r (aget arr (dec i))))
274
+ r))))
267
275
268
276
(def read-comment skip-line )
269
277
270
278
(defn read-vector
271
279
[rdr _]
272
- (read-delimited-list " ]" rdr true ))
280
+ (vec ( read-delimited-list " ]" rdr true ) ))
273
281
274
282
(defn read-map
275
283
[rdr _]
276
284
(let [l (read-delimited-list " }" rdr true )
277
- c (count l)]
285
+ c (alength l)]
278
286
(when (odd? c)
279
287
(reader-error rdr " Map literal must contain an even number of forms" ))
280
288
(if (<= c (* 2 (.-HASHMAP-THRESHOLD PersistentArrayMap)))
281
- (apply array-map l )
282
- (apply hash-map l ))))
289
+ (.fromArray PersistentArrayMap l true true )
290
+ (.fromArray PersistentHashMap l true ))))
283
291
284
292
(defn read-number
285
293
[reader initch]
@@ -398,7 +406,7 @@ nil if the end of stream has been reached")
398
406
399
407
(defn read-set
400
408
[rdr _]
401
- (set (read-delimited-list " }" rdr true )))
409
+ (.fromArray PersistentHashSet (read-delimited-list " }" rdr true ) true ))
402
410
403
411
(defn read-regex
404
412
[rdr ch]
0 commit comments