Skip to content

Commit edc1b7d

Browse files
authored
fix macro hygiene for kwargs with name conflicts (#34329)
1 parent c330f8d commit edc1b7d

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

src/macroexpand.scm

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -297,10 +297,9 @@
297297
(append!
298298
pairs
299299
(filter (lambda (v) (not (assq (car v) env)))
300-
(append!
301-
(pair-with-gensyms v)
302-
(map (lambda (v) (cons v v))
303-
(diff (keywords-introduced-by x) globals))))
300+
(pair-with-gensyms v))
301+
(map (lambda (v) (cons v v))
302+
(keywords-introduced-by x))
304303
env)))))))
305304

306305
(define (resolve-expansion-vars-with-new-env x env m parent-scope inarg (outermost #f))

test/syntax.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1971,3 +1971,18 @@ end
19711971
# issue #33987
19721972
f33987(args::(Vararg{Any, N} where N); kwargs...) = args
19731973
@test f33987(1,2,3) === (1,2,3)
1974+
1975+
macro id_for_kwarg(x); x; end
1976+
Xo65KdlD = @id_for_kwarg let x = 1
1977+
function f(; x)
1978+
x
1979+
end
1980+
end
1981+
@test_throws UndefKeywordError(:x) Xo65KdlD()
1982+
i0xb23hG = @id_for_kwarg let x = 1
1983+
function f(; x=2)
1984+
x
1985+
end
1986+
end
1987+
@test i0xb23hG() == 2
1988+
@test i0xb23hG(x=10) == 10

0 commit comments

Comments
 (0)