Skip to content

Commit b2203d5

Browse files
committed
core: Fix destructure assign from lazy seq
1 parent 0240978 commit b2203d5

2 files changed

Lines changed: 26 additions & 3 deletions

File tree

core/src/ys/std.clj

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -946,7 +946,7 @@
946946
(defn- destructure-vector [V idx]
947947
(map-indexed
948948
(fn [i name]
949-
(+def-defn name `(get ~idx ~i)))
949+
(+def-defn name `(nth ~idx ~i nil)))
950950
V))
951951

952952
(defn- destructure-map [M idx]
@@ -959,9 +959,8 @@
959959
(let [root (gensym)]
960960
`(let [~root ~idx]
961961
~@(condf x
962-
vector? (destructure-vector x root)
963-
list? (destructure-vector x root)
964962
map? (destructure-map x root)
963+
seqable? (destructure-vector x root)
965964
[]))))
966965

967966
(defn- +def-defn [x y]

ys/test/std.t

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,30 @@ test::
401401
=>: "$what $who"
402402
want: Hello World
403403

404+
- name: Range destructuring
405+
code: |
406+
a b c =: range()
407+
=>: "$a - $b - $c"
408+
want: '0 - 1 - 2'
409+
410+
- name: Short range destructuring
411+
code: |
412+
a b c =: range(2)
413+
=>: +[a b c]
414+
want: [0, 1, null]
415+
416+
- name: Range destructuring
417+
code: |
418+
a b c =: 1 2 3
419+
=>: "$a - $b - $c"
420+
want: '1 - 2 - 3'
421+
422+
- name: Auto grouping
423+
code: |
424+
a =: 1 2 3
425+
=>: a
426+
want: [1, 2, 3]
427+
404428

405429
#-------------------------------------------------------------------------------
406430
done:

0 commit comments

Comments
 (0)