JuliaLang / JuliaSyntax.jl

The Julia compiler frontend
Other
267 stars 32 forks source link

Parser fails upon encountering `x = i m.:(var"t")` #390

Closed topolarity closed 7 months ago

topolarity commented 7 months ago
julia> x = i m.:(var"t")
┌ Error: JuliaSyntax parser failed — falling back to flisp!
│   exception =
│    Internal error: length(args) == 1
│    Stacktrace:
│      [1] error(::String, ::String)
│        @ Base ./error.jl:44
│      [2] internal_error(strs::String)
│        @ Base.JuliaSyntax /build/julia/base/JuliaSyntax/src/utils.jl:23
│      [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:191
│      [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 = i m.:(var\"t\")"
└ @ Base.JuliaSyntax /build/julia/base/JuliaSyntax/src/hooks.jl:258
c42f commented 7 months ago

This is fixed in the latest release (and also in the JuliaSyntax version upstream in 1.11:

julia> x = i m.:(var"t")
ERROR: ParseError:
# Error @ REPL[1]:1:6
x = i m.:(var"t")
#    └──────────┘ ── extra tokens after end of expression
Stacktrace:
 [1] top-level scope
   @ none:1

Thanks for the bug report