diff --git a/src/expr.jl b/src/expr.jl index bade833e..bfc2f391 100644 --- a/src/expr.jl +++ b/src/expr.jl @@ -395,8 +395,7 @@ function _internal_node_to_Expr(source, srcrange, head, childranges, childheads, # as inert QuoteNode rather than in `Expr(:quote)` quasiquote return QuoteNode(a1) end - elseif k == K"do" - @check length(args) == 3 + elseif k == K"do" && length(args) == 3 return Expr(:do, args[1], Expr(:->, args[2], args[3])) elseif k == K"let" a1 = args[1] @@ -439,6 +438,10 @@ function _internal_node_to_Expr(source, srcrange, head, childranges, childheads, args[i] = ai.value end end + elseif k == K"wrapper" + # This should only happen for errors wrapped next to what should have + # been single statements or atoms - represent these as blocks. + headsym = :block end return Expr(headsym, args...) diff --git a/test/expr.jl b/test/expr.jl index 073cd29d..8e6e37ea 100644 --- a/test/expr.jl +++ b/test/expr.jl @@ -700,6 +700,8 @@ LineNumberNode(1), Expr(:error, :b)) @test parsestmt("(x", ignore_errors=true) == Expr(:block, :x, Expr(:error)) + @test parsestmt("x do", ignore_errors=true) == + Expr(:block, :x, Expr(:error, Expr(:do))) end @testset "import" begin