Skip to content

Commit 8402463

Browse files
authored
handle kwarg lowering for vararg with default value (JuliaLang#40977)
Fixes JuliaLang#40964
1 parent 6b10500 commit 8402463

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

src/julia-syntax.scm

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,9 @@
431431
(body (blockify body))
432432
(ftype (decl-type (car pargl)))
433433
;; 1-element list of vararg argument, or empty if none
434-
(vararg (let ((l (if (null? pargl) '() (last pargl))))
434+
(vararg (let* ((l (if (null? pargl) '() (last pargl)))
435+
;; handle vararg with default value
436+
(l (if (kwarg? l) (cadr l) l)))
435437
(if (or (vararg? l) (varargexpr? l))
436438
(list l) '())))
437439
;; positional args with vararg

test/keywordargs.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,3 +374,9 @@ using InteractiveUtils
374374
no_kw_args(x::Int) = 0
375375
@test_throws MethodError no_kw_args(1, k=1)
376376
@test_throws MethodError no_kw_args("", k=1)
377+
378+
# issue #40964
379+
f40964(xs::Int...=1; k = 2) = (xs, k)
380+
@test f40964() === ((1,), 2)
381+
@test f40964(7, 8) === ((7,8), 2)
382+
@test f40964(7, 8, k=0) === ((7,8), 0)

0 commit comments

Comments
 (0)