Skip to content

Commit 2a33080

Browse files
authored
Merge pull request #1659 from ianthehenry/try-macro-hygiene
fix (try) macro hygiene
2 parents 98265f0 + 0c34033 commit 2a33080

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

src/boot/boot.janet

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -348,12 +348,15 @@
348348
[body catch]
349349
(assert (and (not (empty? catch)) (indexed? (catch 0))) "the first element of `catch` must be a tuple or array")
350350
(let [[err fib] (catch 0)
351-
r (or err (gensym))
352-
f (or fib (gensym))]
351+
r (gensym)
352+
f (gensym)]
353353
~(let [,f (,fiber/new (fn :try [] ,body) :ie)
354354
,r (,resume ,f)]
355355
(if (,= (,fiber/status ,f) :error)
356-
(do ,;(tuple/slice catch 1))
356+
(do
357+
,(if err ~(def ,err ,r))
358+
,(if fib ~(def ,fib ,f))
359+
,;(tuple/slice catch 1))
357360
,r))))
358361

359362
(defmacro with-syms

test/suite-boot.janet

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,4 +1023,11 @@
10231023
(assert (deep-not= @{:key1 "value1" [@"key2"] @"value2"}
10241024
@{:key1 "value1" [@"key2"] @"value2"}) "deep= mutable keys")
10251025

1026+
# different try overloads
1027+
(assert (= (try (error :error) ([] :caught)) :caught))
1028+
(assert (= (try (error :error) ([e] e)) :error))
1029+
(assert (= (try (error :error) ([e fib] [e (fiber? fib)])) [:error true]))
1030+
# regression test for #1659
1031+
(assert (= (try (error :error) ([_ _] :caught)) :caught))
1032+
10261033
(end-suite)

0 commit comments

Comments
 (0)