diff --git a/src/ast.scm b/src/ast.scm index 997135da7d042..5df41a117b8b3 100644 --- a/src/ast.scm +++ b/src/ast.scm @@ -406,15 +406,17 @@ e) (define (vararg? x) (and (pair? x) (eq? (car x) '...))) -(define (varargexpr? x) (and - (pair? x) - (eq? (car x) '::) - (or - (eq? (caddr x) 'Vararg) - (and - (pair? (caddr x)) - (length> (caddr x) 1) - (eq? (cadr (caddr x)) 'Vararg))))) +(define (vararg-type-expr? x) + (or (eq? x 'Vararg) + (and (length> x 1) + (or (and (eq? (car x) 'curly) + (vararg-type-expr? (cadr x))) + (and (eq? (car x) 'where) + (vararg-type-expr? (cadr x))))))) +(define (varargexpr? x) + (and (pair? x) + (eq? (car x) '::) + (vararg-type-expr? (caddr x)))) (define (linenum? x) (and (pair? x) (eq? (car x) 'line))) (define (make-assignment l r) `(= ,l ,r)) diff --git a/test/syntax.jl b/test/syntax.jl index b8f7c6ce1c5e4..f649cccc7548b 100644 --- a/test/syntax.jl +++ b/test/syntax.jl @@ -1965,3 +1965,7 @@ end let a(; b) = b @test a(b=3) == 3 end + +# issue #33987 +f33987(args::(Vararg{Any, N} where N); kwargs...) = args +@test f33987(1,2,3) === (1,2,3)