JuliaLang / JuliaSyntax.jl

The Julia compiler frontend
Other
272 stars 35 forks source link

Parser fails upon encountering `x.args[1] for x in kw` #391

Closed topolarity closed 10 months ago

topolarity commented 10 months ago
julia> x.args[1] for x in kw
┌ Error: JuliaSyntax parser failed — falling back to flisp!
│   exception =
│    BoundsError: attempt to access 0-element Vector{Any} at index [1]
│    Stacktrace:
│      [1] throw_boundserror(A::Vector{Any}, I::Tuple{Int64})
│        @ Base ./essentials.jl:14
│      [2] getindex
│        @ Base ./essentials.jl:790 [inlined]
│      [3] _internal_node_to_Expr(source::Base.JuliaSyntax.SourceFile, srcrange::UnitRange{Int64}, head::Base.JuliaSyntax.SyntaxHead, childranges::Vector{UnitRange{Int64}}, childheads::Vector{Base.JuliaSyntax.SyntaxHead}, args::Vector{Any})
│        @ Base.JuliaSyntax /build/julia/base/JuliaSyntax/src/expr.jl:270
│      [4] _to_expr(node::Base.JuliaSyntax.SyntaxNode)
│        @ Base.JuliaSyntax /build/julia/base/JuliaSyntax/src/expr.jl:499
│      [5] _to_expr(node::Base.JuliaSyntax.SyntaxNode) (repeats 2 times)
│        @ Base.JuliaSyntax /build/julia/base/JuliaSyntax/src/expr.jl:498
│      [6] Expr(node::Base.JuliaSyntax.SyntaxNode)
│        @ Base.JuliaSyntax /build/julia/base/JuliaSyntax/src/expr.jl:503
│      [7] core_parser_hook(code::String, filename::String, lineno::Int64, offset::Int64, options::Symbol)
│        @ Base.JuliaSyntax /build/julia/base/JuliaSyntax/src/hooks.jl:209
│      [8] invoke_in_world(::UInt64, ::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
│        @ Base ./essentials.jl:963
│      [9] invoke_in_world(::UInt64, ::Any, ::Any, ::Vararg{Any})
│        @ Base ./essentials.jl:960
│     [10] (::Base.JuliaSyntax.var"#invoke_fixedworld#122"{Base.JuliaSyntax.var"#invoke_fixedworld#119#123"{typeof(Base.JuliaSyntax.core_parser_hook), UInt64}})(::String, ::Vararg{Any}; kws::@Kwargs{})
│        @ Base.JuliaSyntax /build/julia/base/JuliaSyntax/src/hooks.jl:118
│     [11] (::Base.JuliaSyntax.var"#invoke_fixedworld#122"{Base.JuliaSyntax.var"#invoke_fixedworld#119#123"{typeof(Base.JuliaSyntax.core_parser_hook), UInt64}})(::String, ::Vararg{Any})
│        @ Base.JuliaSyntax /build/julia/base/JuliaSyntax/src/hooks.jl:117
│     [12] _parse_string(text::String, filename::String, lineno::Int64, index::Int64, options::Symbol)
│        @ Base.Meta ./meta.jl:200
│     [13] #parseall#6
│        @ Base.Meta ./meta.jl:294 [inlined]
│     [14] parseall
│        @ Base.Meta ./meta.jl:293 [inlined]
│     [15] _parse_input_line_core
│        @ Base ./client.jl:175 [inlined]
│     [16] #parse_input_line#1072
│        @ Base ./client.jl:193 [inlined]
│     [17] parse_input_line
│        @ Base ./client.jl:190 [inlined]
│     [18] (::REPL.var"#95#107"{REPL.LineEditREPL, REPL.REPLHistoryProvider})(x::Any)
│        @ REPL ~/dist/julia-cedar/vanilla/latest/share/julia/stdlib/v1.11/REPL/src/REPL.jl:1094
│     [19] #invokelatest#2
│        @ Base ./essentials.jl:929 [inlined]
│     [20] invokelatest
│        @ Base ./essentials.jl:926 [inlined]
│     [21] (::REPL.var"#do_respond#82"{Bool, Bool, REPL.var"#95#107"{REPL.LineEditREPL, REPL.REPLHistoryProvider}, REPL.LineEditREPL, REPL.LineEdit.Prompt})(s::REPL.LineEdit.MIState, buf::Any, ok::Bool)
│        @ REPL ~/dist/julia-cedar/vanilla/latest/share/julia/stdlib/v1.11/REPL/src/REPL.jl:920
│     [22] #invokelatest#2
│        @ Base ./essentials.jl:929 [inlined]
│     [23] invokelatest
│        @ Base ./essentials.jl:926 [inlined]
│     [24] run_interface(terminal::REPL.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
│        @ REPL.LineEdit ~/dist/julia-cedar/vanilla/latest/share/julia/stdlib/v1.11/REPL/src/LineEdit.jl:2722
│     [25] run_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
│        @ REPL ~/dist/julia-cedar/vanilla/latest/share/julia/stdlib/v1.11/REPL/src/REPL.jl:1352
│     [26] (::REPL.var"#64#70"{REPL.LineEditREPL, REPL.REPLBackendRef})()
│        @ REPL ~/dist/julia-cedar/vanilla/latest/share/julia/stdlib/v1.11/REPL/src/REPL.jl:401
│   offset = 0
│   code = "x.args[1] for x in kw"
└ @ Base.JuliaSyntax /build/julia/base/JuliaSyntax/src/hooks.jl:258
ERROR: syntax: extra token "for" after end of expression
Stacktrace:
 [1] top-level scope
   @ none:1
c42f commented 10 months ago

This is fixed in the latest release and the fix should be upstream in the next julia 1.10 release candidate.