diff --git a/src/parser.jl b/src/parser.jl index 34666b59..c1a60939 100644 --- a/src/parser.jl +++ b/src/parser.jl @@ -2306,7 +2306,7 @@ function parse_do(ps::ParseState) # f() do x, y\n body end ==> (call f (do (tuple x y) (block body))) parse_comma_separated(ps, parse_range) end - emit(ps, m, K"tuple") + peek_behind(ps).kind != K"where" && emit(ps, m, K"tuple") parse_block(ps) bump_closing_token(ps, K"end") emit(ps, mark, K"do") diff --git a/test/parser.jl b/test/parser.jl index 3ac3ed36..c5a85702 100644 --- a/test/parser.jl +++ b/test/parser.jl @@ -369,7 +369,9 @@ tests = [ "f() do x, y\n body end" => "(call f (do (tuple x y) (block body)))" "f(x) do y body end" => "(call f x (do (tuple y) (block body)))" "@f(x) do y body end" => "(macrocall-p @f x (do (tuple y) (block body)))" - + "f(x) do (y::T) where T body end" => "(call f x (do (where (parens (::-i y T)) T) (block body)))" + "f(x) do (y::T, z::S) where {S,T} body end" => "(call f x (do (where (tuple-p (::-i y T) (::-i z S)) (braces S T)) (block body)))" + # square brackets "@S[a,b]" => "(macrocall @S (vect a b))" "@S[a b]" => "(macrocall @S (hcat a b))"