Skip to content

parsestmt throws although it's told not to #599

@PatrickHaecker

Description

@PatrickHaecker

In Julia nightly

julia> versioninfo()
Julia Version 1.13.0-DEV.1317
Commit 3a50d6fb4b3 (2025-10-15 14:03 UTC)

parsestmt throws, although it should not throw:

julia> using Base.JuliaSyntax

julia> parsestmt(SyntaxNode, "do"; ignore_errors = true, ignore_warnings = true)
ERROR: InexactError: trunc(UInt32, -1)
Stacktrace:
   [1] throw_inexacterror(func::Symbol, to::Type, val::Int64)
     @ Core ./boot.jl:866
   [2] checked_trunc_uint
     @ ./boot.jl:888 [inlined]
   [3] toUInt32
     @ ./boot.jl:972 [inlined]
   [4] UInt32
     @ ./boot.jl:1012 [inlined]
   [5] convert
     @ ./number.jl:7 [inlined]
   [6] ParseStreamPosition
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/core/parse_stream.jl:197 [inlined]
   [7] #peek_behind_pos#27
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/core/parse_stream.jl:645 [inlined]
   [8] peek_behind_pos
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/core/parse_stream.jl:616 [inlined]
   [9] peek_behind(stream::Base.JuliaSyntax.ParseStream; kws::@Kwargs{})
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/core/parse_stream.jl:649
  [10] peek_behind
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/core/parse_stream.jl:648 [inlined]
  [11] #peek_behind#50
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:80 [inlined]
  [12] peek_behind
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:79 [inlined]
  [13] parse_juxtapose(ps::Base.JuliaSyntax.ParseState)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:1135
  [14] parse_where
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:1119 [inlined]
  [15] parse_unary_subtype(ps::Base.JuliaSyntax.ParseState)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:1082
  [16] parse_LtoR(ps::Base.JuliaSyntax.ParseState, down::typeof(Base.JuliaSyntax.parse_unary_subtype), is_op::typeof(Base.JuliaSyntax.is_prec_bitshift))
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:354
  [17] parse_shift
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:1051 [inlined]
  [18] parse_LtoR(ps::Base.JuliaSyntax.ParseState, down::typeof(Base.JuliaSyntax.parse_shift), is_op::typeof(Base.JuliaSyntax.is_prec_rational))
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:354
  [19] parse_rational
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:1045 [inlined]
  [20] parse_with_chains(ps::Base.JuliaSyntax.ParseState, down::typeof(Base.JuliaSyntax.parse_rational), is_op::typeof(Base.JuliaSyntax.is_prec_times), chain_ops::Tuple{Base.JuliaSyntax.Kind})
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:995
  [21] parse_term
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:987 [inlined]
  [22] parse_with_chains(ps::Base.JuliaSyntax.ParseState, down::typeof(Base.JuliaSyntax.parse_term), is_op::typeof(Base.JuliaSyntax.is_prec_plus), chain_ops::Tuple{…})
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:995
  [23] parse_expr
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:980 [inlined]
  [24] parse_invalid_ops(ps::Base.JuliaSyntax.ParseState)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:965
  [25] parse_range(ps::Base.JuliaSyntax.ParseState)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:875
  [26] parse_LtoR(ps::Base.JuliaSyntax.ParseState, down::typeof(Base.JuliaSyntax.parse_range), is_op::typeof(Base.JuliaSyntax.is_prec_pipe_gt))
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:354
  [27] parse_pipe_gt
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:862 [inlined]
  [28] parse_RtoL(ps::Base.JuliaSyntax.ParseState, down::typeof(Base.JuliaSyntax.parse_pipe_gt), is_op::typeof(Base.JuliaSyntax.is_prec_pipe_lt), self::typeof(Base.JuliaSyntax.parse_pipe_lt))
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:371
  [29] parse_pipe_lt
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:855 [inlined]
  [30] parse_comparison(ps::Base.JuliaSyntax.ParseState, subtype_comparison::Bool)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:813
  [31] parse_comparison
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:805 [inlined]
  [32] 
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:770
  [33] parse_and
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:798 [inlined]
  [34] parse_lazy_cond(ps::Base.JuliaSyntax.ParseState, down::typeof(Base.JuliaSyntax.parse_and), is_op::typeof(Base.JuliaSyntax.is_prec_lazy_or), self::typeof(Base.JuliaSyntax.parse_or))
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:770
  [35] parse_or
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:789 [inlined]
  [36] parse_arrow(ps::Base.JuliaSyntax.ParseState)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:732
  [37] parse_cond(ps::Base.JuliaSyntax.ParseState)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:670
  [38] parse_RtoL(ps::Base.JuliaSyntax.ParseState, down::typeof(Base.JuliaSyntax.parse_cond), is_op::typeof(Base.JuliaSyntax.is_prec_pair), self::typeof(Base.JuliaSyntax.parse_pair))
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:371
  [39] parse_pair
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:661 [inlined]
  [40] parse_comma(ps::Base.JuliaSyntax.ParseState, do_emit::Bool)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:638
  [41] parse_comma(ps::Base.JuliaSyntax.ParseState)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:636
  [42] parse_assignment(ps::Base.JuliaSyntax.ParseState, down::typeof(Base.JuliaSyntax.parse_comma))
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:579
  [43] parse_eq
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:556 [inlined]
  [44] parse_docstring(ps::Base.JuliaSyntax.ParseState, down::typeof(Base.JuliaSyntax.parse_eq))
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:515
  [45] parse_docstring
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:514 [inlined]
  [46] parse_public(ps::Base.JuliaSyntax.ParseState)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:507
  [47] parse_Nary(ps::Base.JuliaSyntax.ParseState, down::typeof(Base.JuliaSyntax.parse_public), delimiters::Tuple{Base.JuliaSyntax.Kind}, closing_tokens::Tuple{Base.JuliaSyntax.Kind})
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:401
  [48] parse_stmts(ps::Base.JuliaSyntax.ParseState)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser.jl:475
  [49] parse!(stream::Base.JuliaSyntax.ParseStream; rule::Symbol)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser_api.jl:56
  [50] parse!
     @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser_api.jl:47 [inlined]
  [51] _parse(rule::Symbol, need_eof::Bool, ::Type{…}, text::String, index::Int64; version::VersionNumber, ignore_trivia::Bool, filename::Nothing, first_line::Int64, ignore_errors::Bool, ignore_warnings::Bool, kws::@Kwargs{})
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser_api.jl:89
 ┌[52] _parse
 │   @ /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser_api.jl:82 [inlined]
 ╰──── repeated 2 times
  [54] kwcall(::@NamedTuple{ignore_errors::Bool, ignore_warnings::Bool}, ::typeof(parsestmt), ::Type{SyntaxNode}, text::String)
     @ Base.JuliaSyntax /cache/build/builder-amdci5-4/julialang/julia-master/base/JuliaSyntax/src/julia/parser_api.jl:145
  [55] top-level scope
     @ REPL[2]:1
Some type information was truncated. Use `show(err)` to see complete types.

I am not sure whether the bug needs to be fixed in Julia or in JuliaSyntax.jl.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions