diff --git a/src/macroexpand.scm b/src/macroexpand.scm index 13d8cf4104e86..0777c9c61846e 100644 --- a/src/macroexpand.scm +++ b/src/macroexpand.scm @@ -210,7 +210,7 @@ ((atom? v) '()) (else (case (car v) - ((... kw |::|) (try-arg-name (cadr v))) + ((... kw |::| =) (try-arg-name (cadr v))) ((escape) (list v)) ((hygienic-scope) (try-arg-name (cadr v))) ((meta) ;; allow certain per-argument annotations @@ -275,6 +275,9 @@ ,@(map (lambda (x) (resolve-expansion-vars-with-new-env x env m parent-scope #t)) (cddr e)))) + ((tuple) `(tuple ,@(map (lambda (x) + (resolve-expansion-vars-with-new-env x env m parent-scope #t)) + (cdr e)))) (else (other e)))) (define (new-expansion-env-for x env (outermost #f)) @@ -367,7 +370,7 @@ (resolve-expansion-vars- x env m parent-scope #f))) (cdr e)))) - ((= function) + ((= function ->) (if (and (pair? (cadr e)) (function-def? e)) ;; in (kw x 1) inside an arglist, the x isn't actually a kwarg `(,(car e) ,(resolve-in-function-lhs (cadr e) env m parent-scope inarg) diff --git a/test/syntax.jl b/test/syntax.jl index 0c907a1d2deb2..35178057b1614 100644 --- a/test/syntax.jl +++ b/test/syntax.jl @@ -2268,3 +2268,9 @@ end # issue #36196 @test_throws ParseError("\"for\" at none:1 expected \"end\", got \")\"") Meta.parse("(for i=1; println())") @test_throws ParseError("\"try\" at none:1 expected \"end\", got \")\"") Meta.parse("(try i=1; println())") + +# issue #36272 +macro m36272() + :((a, b=1) -> a*b) +end +@test @m36272()(1) == 1