Package evaluation to load PikaParser on Julia 1.14.0-DEV.2373 (cf67ecc88f*) started at 2026-06-13T02:54:04.457 ################################################################################ # Set-up # Set-up completed after 0.12s ################################################################################ # Installation # Installing PikaParser... Resolving package versions... Installed DocStringExtensions ─ v0.9.5 Installed PikaParser ────────── v0.6.1 Updating `~/.julia/environments/v1.14/Project.toml` [3bbf5609] + PikaParser v0.6.1 Updating `~/.julia/environments/v1.14/Manifest.toml` [ffbed154] + DocStringExtensions v0.9.5 [3bbf5609] + PikaParser v0.6.1 Installation completed after 5.47s ################################################################################ # Precompilation # Precompiling PkgEval dependencies... Project No packages added to or removed from `~/.julia/environments/pkgeval/Project.toml` Manifest No packages added to or removed from `~/.julia/environments/pkgeval/Manifest.toml` Precompiling package dependencies... Precompiling project... 1.1 s ✓ DocStringExtensions ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:66 =# Core.@doc "$(TYPEDSIGNATURES)\n\nTake a [`Grammar`](@ref) and an indexable input sequence (typically `Vector` or\n`String`), and return a final [`ParserState`](@ref) that contains all matched\ngrammar productions.\n\nThe `input` must be random-indexable (because PikaParsers require a lot of\nrandom indexing) using Int indexes, must support `firstindex`, `lastindex`,\n`prevind`, `nextind`, index arithmetics with `+` and `-`, and indexes in\n`view`s must be the same as in original container except for a constant offset.\n\n# Lexing and fast terminal matching\n\nIf `fast_match` is specified, the function does not match terminals using the\nassociated grammar rules, but with a `fast_match` function that reports the\nmatched terminals via a callback. The function is called exactly once for each\nposition in `input` in reverse order (i.e., the indexes will start at\n`lastindex(input)` and continue using `prevind` all the way to\n`firstindex(input)`), which can be utilized by the application for\noptimization. The call parameters consist of the input vector, position in\nthe input vector, and a \"report\" function used to send back a clause ID (of\nsame type as `G` in `typeof(grammar)`) and the last item of the terminal match\nthat can starts at that position. Calls to the reporting function can be\nrepeated if more terminal types match. Terminals not reported by the calls to\n`fast_match` will not be matched.\n\nFor complicated grammars, this may be much faster than having the parser to try\nmatching all terminal types at each position.\n\nIf your grammar does not contain dangerous or highly surprising kinds of\nterminals (in particular, it can be scanned greedily left-to-right), you may\nuse [`parse_lex`](@ref) to run a reasonable terminal-only lexing step, which is\nthen automatically used as a basis for fast matching.\n\n# Caveats\n\nTake care when indexing `String`s. With UTF-8, not all codepoints may\nnecessarily have length 1.\n\nIf unsure, you may always `collect` the strings to vectors of `Char`s\n(basically converting to UTF-32), where each character occupies precisely one\nindex.\n\n# Results\n\nUse [`find_match_at!`](@ref) to extract matches from [`ParserState`](@ref).\n\nPika parsing never really fails. Instead, in case when the grammar rule is not\nmatched in the input, the expected rule match match is either not going to be\nfound at the starting position with [`find_match_at!`](@ref), or it will not\nspan the whole input.\n\n# Example\n\n parse(\n g,\n \"abcde123\",\n (input, i, match) -> isdigit(input[i]) ? match(:digit, i) : match(:letter, i),\n )\n\n" function (parse(grammar::Grammar{G, T}, input::I, fast_match = nothing)::ParserState{G, T, I}) where {G, T, I} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:128 =# │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:133 =# │ st = ParserState{G, T, I}(grammar, PikaQueue(length(grammar.clauses)), Match[], 0, Int[], input) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:144 =# │ terminal_q = PikaQueue(length(grammar.clauses)) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:145 =# │ reset!(terminal_q, grammar.terminals) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:147 =# │ i = lastindex(input) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:148 =# │ while i >= firstindex(input) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:149 =# │ if isnothing(fast_match) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:150 =# │ reset!(st.q, terminal_q) │ else │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:152 =# │ fast_match(input, i, ((rid::G, last::Int)->begin │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:155 =# │ let cl = grammar.idx[rid] │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:156 =# │ new_match!(Match(cl, i, last, 0, submatch_empty(st)), st) │ end │ end)) │ end │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:160 =# │ while !(isempty(st.q)) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:161 =# │ clause = pop!(st.q) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:177 =# │ cls = grammar.clauses[clause] │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:178 =# │ if cls isa Token{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:179 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:180 =# cls isa Tokens{Int, T, I} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:181 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:182 =# cls isa Satisfy{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:183 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:184 =# cls isa Scan{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:185 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:186 =# cls isa Seq{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:187 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:188 =# cls isa First{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:189 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:190 =# cls isa FollowedBy{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:191 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:192 =# cls isa Many{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:193 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:194 =# cls isa Some{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:195 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:196 =# cls isa Tie{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:197 =# │ match_clause!(cls, clause, i, st) │ else │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:202 =# │ match_clause!(cls, clause, i, st) │ end │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:205 =# │ end │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:206 =# │ i = prevind(input, i) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:207 =# │ end │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:209 =# │ st │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:66 =#) :: Value │ │ [string] │ │ TYPEDSIGNATURES :: Identifier │ │ "\n\nTake a [`Grammar`](@ref) and an indexable input sequence (typically `Vector` or\n`String`), and return a final [`ParserState`](@ref) that contains all matched\ngrammar productions.\n\nThe `input` must be random-indexable (because PikaParsers require a lot of\nrandom indexing) using Int indexes, must support `firstindex`, `lastindex`,\n`prevind`, `nextind`, index arithmetics with `+` and `-`, and indexes in\n`view`s must be the same as in original container except for a constant offset.\n\n# Lexing and fast terminal matching\n\nIf `fast_match` is specified, the function does not match terminals using the\nassociated grammar rules, but with a `fast_match` function that reports the\nmatched terminals via a callback. The function is called exactly once for each\nposition in `input` in reverse order (i.e., the indexes will start at\n`lastindex(input)` and continue using `prevind` all the way to\n`firstindex(input)`), which can be utilized by the application for\noptimization. The call parameters consist of the input vector, position in\nthe input vector, and a \"report\" function used to send back a clause ID (of\nsame type as `G` in `typeof(grammar)`) and the last item of the terminal match\nthat can starts at that position. Calls to the reporting function can be\nrepeated if more terminal types match. Terminals not reported by the calls to\n`fast_match` will not be matched.\n\nFor complicated grammars, this may be much faster than having the parser to try\nmatching all terminal types at each position.\n\nIf your grammar does not contain dangerous or highly surprising kinds of\nterminals (in particular, it can be scanned greedily left-to-right), you may\nuse [`parse_lex`](@ref) to run a reasonable terminal-only lexing step, which is\nthen automatically used as a basis for fast matching.\n\n# Caveats\n\nTake care when indexing `String`s. With UTF-8, not all codepoints may\nnecessarily have length 1.\n\nIf unsure, you may always `collect` the strings to vectors of `Char`s\n(basically converting to UTF-32), where each character occupies precisely one\nindex.\n\n# Results\n\nUse [`find_match_at!`](@ref) to extract matches from [`ParserState`](@ref).\n\nPika parsing never really fails. Instead, in case when the grammar rule is not\nmatched in the input, the expected rule match match is either not going to be\nfound at the starting position with [`find_match_at!`](@ref), or it will not\nspan the whole input.\n\n# Example\n\n parse(\n g,\n \"abcde123\",\n (input, i, match) -> isdigit(input[i]) ? match(:digit, i) : match(:letter, i),\n )\n\n" :: Value │ │ [function] │ │ [where] │ │ [::] │ │ [call] │ │ parse :: Identifier │ │ [::] │ │ grammar :: Identifier │ │ [curly] │ │ Grammar :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ [::] │ │ input :: Identifier │ │ I :: Identifier │ │ [kw] │ │ fast_match :: Identifier │ │ nothing :: Identifier │ │ [curly] │ │ ParserState :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ [block] │ │ [=] │ │ st :: Identifier │ │ [call] │ │ [curly] │ │ ParserState :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ grammar :: Identifier │ │ [call] │ │ PikaQueue :: Identifier │ │ [call] │ │ length :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ [ref] │ │ Match :: Identifier │ │ 0 :: Value │ │ [ref] │ │ Int :: Identifier │ │ input :: Identifier │ │ [=] │ │ terminal_q :: Identifier │ │ [call] │ │ PikaQueue :: Identifier │ │ [call] │ │ length :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ [call] │ │ reset! :: Identifier │ │ terminal_q :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ terminals :: Identifier │ │ [=] │ │ i :: Identifier │ │ [call] │ │ lastindex :: Identifier │ │ input :: Identifier │ │ [while] │ │ [call] │ │ >= :: Identifier │ │ i :: Identifier │ │ [call] │ │ firstindex :: Identifier │ │ input :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ isnothing :: Identifier │ │ fast_match :: Identifier │ │ [block] │ │ [call] │ │ reset! :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ terminal_q :: Identifier │ │ [block] │ │ [call] │ │ fast_match :: Identifier │ │ input :: Identifier │ │ i :: Identifier │ │ [->] │ │ [tuple] │ │ [::] │ │ rid :: Identifier │ │ G :: Identifier │ │ [::] │ │ last :: Identifier │ │ Int :: Identifier │ │ [block] │ │ [let] │ │ [=] │ │ cl :: Identifier │ │ [ref] │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ idx :: Identifier │ │ rid :: Identifier │ │ [block] │ │ [call] │ │ new_match! :: Identifier │ │ [call] │ │ Match :: Identifier │ │ cl :: Identifier │ │ i :: Identifier │ │ last :: Identifier │ │ 0 :: Value │ │ [call] │ │ submatch_empty :: Identifier │ │ st :: Identifier │ │ st :: Identifier │ │ [while] │ │ [call] │ │ ! :: Identifier │ │ [call] │ │ isempty :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ [block] │ │ [=] │ │ clause :: Identifier │ │ [call] │ │ pop! :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ [=] │ │ cls :: Identifier │ │ [ref] │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ clause :: Identifier │ │ [if] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Token :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Tokens :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Satisfy :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Scan :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Seq :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ First :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ FollowedBy :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Many :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Some :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Tie :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [=] │ │ i :: Identifier │ │ [call] │ │ prevind :: Identifier │ │ input :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [::] │ │ [call] │ │ parse :: Identifier │ scope_layer=1 │ [::] │ │ grammar :: Identifier │ scope_layer=1 │ [curly] │ │ Grammar :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [::] │ │ input :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ [kw] │ │ fast_match :: Identifier │ scope_layer=1 │ nothing :: Identifier │ scope_layer=1 │ [curly] │ │ ParserState :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ st :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ ParserState :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ grammar :: Identifier │ scope_layer=1 │ [call] │ │ PikaQueue :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ [.] │ │ grammar :: Identifier │ scope_layer=1 │ [inert] │ │ clauses :: Identifier │ │ [ref] │ │ Match :: Identifier │ scope_layer=1 │ 0 :: Value │ macro_source=333 │ [ref] │ │ Int :: Identifier │ scope_layer=1 │ input :: Identifier │ scope_layer=1 │ [=] │ │ terminal_q :: Identifier │ scope_layer=1 │ [call] │ │ PikaQueue :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ [.] │ │ grammar :: Identifier │ scope_layer=1 │ [inert] │ │ clauses :: Identifier │ │ [call] │ │ reset! :: Identifier │ scope_layer=1 │ terminal_q :: Identifier │ scope_layer=1 │ [.] │ │ grammar :: Identifier │ scope_layer=1 │ [inert] │ │ terminals :: Identifier │ │ [=] │ │ i :: Identifier │ scope_layer=1 │ [call] │ │ lastindex :: Identifier │ scope_layer=1 │ input :: Identifier │ scope_layer=1 │ [while] │ │ [call] │ │ >= :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ [call] │ │ firstindex :: Identifier │ scope_layer=1 │ input :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ isnothing :: Identifier │ scope_layer=1 │ fast_match :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ reset! :: Identifier │ scope_layer=1 │ [.] │ │ st :: Identifier │ scope_layer=1 │ [inert] │ │ q :: Identifier │ │ terminal_q :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ fast_match :: Identifier │ scope_layer=1 │ input :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ [->] │ │ [tuple] │ │ [::] │ │ rid :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ [::] │ │ last :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ [block] │ │ [let] │ │ [=] │ │ cl :: Identifier │ scope_layer=1 │ [ref] │ │ [.] │ │ grammar :: Identifier │ scope_layer=1 │ [inert] │ │ idx :: Identifier │ │ rid :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ new_match! :: Identifier │ scope_layer=1 │ [call] │ │ Match :: Identifier │ scope_layer=1 │ cl :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ last :: Identifier │ scope_layer=1 │ 0 :: Value │ macro_source=333 │ [call] │ │ submatch_empty :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [while] │ │ [call] │ │ ! :: Identifier │ scope_layer=1 │ [call] │ │ isempty :: Identifier │ scope_layer=1 │ [.] │ │ st :: Identifier │ scope_layer=1 │ [inert] │ │ q :: Identifier │ │ [block] │ │ [=] │ │ clause :: Identifier │ scope_layer=1 │ [call] │ │ pop! :: Identifier │ scope_layer=1 │ [.] │ │ st :: Identifier │ scope_layer=1 │ [inert] │ │ q :: Identifier │ │ [=] │ │ cls :: Identifier │ scope_layer=1 │ [ref] │ │ [.] │ │ grammar :: Identifier │ scope_layer=1 │ [inert] │ │ clauses :: Identifier │ │ clause :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Token :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Tokens :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Satisfy :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Scan :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Seq :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ First :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ FollowedBy :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Many :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Some :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Tie :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [=] │ │ i :: Identifier │ scope_layer=1 │ [call] │ │ prevind :: Identifier │ scope_layer=1 │ input :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=333 │ PikaParser :: Value │ macro_source=333 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=333 │ PikaParser :: Value │ │ [inert] │ jl_source=L65 │ parse :: Identifier │ │ [call] │ │ Base.Docs.docstr :: Value │ macro_source=333 │ [call] │ │ Core.svec :: Value │ macro_source=333 │ [call] │ │ DocStringExtensions.interpolation :: Value │ macro_source=333 │ TYPEDSIGNATURES :: Identifier │ scope_layer=1 │ [inert] │ │ [function] │ │ [where] │ │ [::] │ │ [call] │ │ parse :: Identifier │ │ [::] │ │ grammar :: Identifier │ │ [curly] │ │ Grammar :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ [::] │ │ input :: Identifier │ │ I :: Identifier │ │ [kw] │ │ fast_match :: Identifier │ │ nothing :: Identifier │ │ [curly] │ │ ParserState :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ [block] │ │ [=] │ │ st :: Identifier │ │ [call] │ │ [curly] │ │ ParserState :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ grammar :: Identifier │ │ [call] │ │ PikaQueue :: Identifier │ │ [call] │ │ length :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ [ref] │ │ Match :: Identifier │ │ 0 :: Value │ │ [ref] │ │ Int :: Identifier │ │ input :: Identifier │ │ [=] │ │ terminal_q :: Identifier │ │ [call] │ │ PikaQueue :: Identifier │ │ [call] │ │ length :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ [call] │ │ reset! :: Identifier │ │ terminal_q :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ terminals :: Identifier │ │ [=] │ │ i :: Identifier │ │ [call] │ │ lastindex :: Identifier │ │ input :: Identifier │ │ [while] │ │ [call] │ │ >= :: Identifier │ │ i :: Identifier │ │ [call] │ │ firstindex :: Identifier │ │ input :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ isnothing :: Identifier │ │ fast_match :: Identifier │ │ [block] │ │ [call] │ │ reset! :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ terminal_q :: Identifier │ │ [block] │ │ [call] │ │ fast_match :: Identifier │ │ input :: Identifier │ │ i :: Identifier │ │ [->] │ │ [tuple] │ │ [::] │ │ rid :: Identifier │ │ G :: Identifier │ │ [::] │ │ last :: Identifier │ │ Int :: Identifier │ │ [block] │ │ [let] │ │ [=] │ │ cl :: Identifier │ │ [ref] │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ idx :: Identifier │ │ rid :: Identifier │ │ [block] │ │ [call] │ │ new_match! :: Identifier │ │ [call] │ │ Match :: Identifier │ │ cl :: Identifier │ │ i :: Identifier │ │ last :: Identifier │ │ 0 :: Value │ │ [call] │ │ submatch_empty :: Identifier │ │ st :: Identifier │ │ st :: Identifier │ │ [while] │ │ [call] │ │ ! :: Identifier │ │ [call] │ │ isempty :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ [block] │ │ [=] │ │ clause :: Identifier │ │ [call] │ │ pop! :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ [=] │ │ cls :: Identifier │ │ [ref] │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ clause :: Identifier │ │ [if] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Token :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Tokens :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Satisfy :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Scan :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Seq :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ First :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ FollowedBy :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Many :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Some :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Tie :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [=] │ │ i :: Identifier │ │ [call] │ │ prevind :: Identifier │ │ input :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ "\n\nTake a [`Grammar`](@ref) and an indexable input sequence (typically `Vector` or\n`String`), and return a final [`ParserState`](@ref) that contains all matched\ngrammar productions.\n\nThe `input` must be random-indexable (because PikaParsers require a lot of\nrandom indexing) using Int indexes, must support `firstindex`, `lastindex`,\n`prevind`, `nextind`, index arithmetics with `+` and `-`, and indexes in\n`view`s must be the same as in original container except for a constant offset.\n\n# Lexing and fast terminal matching\n\nIf `fast_match` is specified, the function does not match terminals using the\nassociated grammar rules, but with a `fast_match` function that reports the\nmatched terminals via a callback. The function is called exactly once for each\nposition in `input` in reverse order (i.e., the indexes will start at\n`lastindex(input)` and continue using `prevind` all the way to\n`firstindex(input)`), which can be utilized by the application for\noptimization. The call parameters consist of the input vector, position in\nthe input vector, and a \"report\" function used to send back a clause ID (of\nsame type as `G` in `typeof(grammar)`) and the last item of the terminal match\nthat can starts at that position. Calls to the reporting function can be\nrepeated if more terminal types match. Terminals not reported by the calls to\n`fast_match` will not be matched.\n\nFor complicated grammars, this may be much faster than having the parser to try\nmatching all terminal types at each position.\n\nIf your grammar does not contain dangerous or highly surprising kinds of\nterminals (in particular, it can be scanned greedily left-to-right), you may\nuse [`parse_lex`](@ref) to run a reasonable terminal-only lexing step, which is\nthen automatically used as a basis for fast matching.\n\n# Caveats\n\nTake care when indexing `String`s. With UTF-8, not all codepoints may\nnecessarily have length 1.\n\nIf unsure, you may always `collect` the strings to vectors of `Char`s\n(basically converting to UTF-32), where each character occupies precisely one\nindex.\n\n# Results\n\nUse [`find_match_at!`](@ref) to extract matches from [`ParserState`](@ref).\n\nPika parsing never really fails. Instead, in case when the grammar rule is not\nmatched in the input, the expected rule match match is either not going to be\nfound at the starting position with [`find_match_at!`](@ref), or it will not\nspan the whole input.\n\n# Example\n\n parse(\n g,\n \"abcde123\",\n (input, i, match) -> isdigit(input[i]) ? match(:digit, i) : match(:letter, i),\n )\n\n" :: Value │ macro_source=333 │ [call] │ macro_source=333 │ Dict{Symbol, Any} :: Value │ macro_source=333 │ :path => "/home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl" :: Value │ macro_source=333 │ :linenumber => 66 :: Value │ macro_source=333 │ :module => PikaParser :: Value │ macro_source=333 │ [where] │ │ [where] │ │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ Grammar :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ Grammar :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl" │ line = 66 └ mod = PikaParser ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:152 =# - Found unexpected binding of kind static_parameter Expression:  #₂₆/G Containing expressions:  (= #₁₁₂/G #₂₆/G)  (= #₄ (call core.svec (call core.svec #₇₉/#parse##->###0 #₂₆/G #₃₆/Int) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:152:0))  (= #₄ (call core.svec (call core.svec (function_type #₄₁/#->#) #₂₆/G #₃₆/Int) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:152:0))  Detailed provenance:  #₂₆/G  └─ G  └─ G  ├─ @ /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:152  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:66 =#) (string TYPEDSIGNATURES "\n\nTake a [`Grammar`](@ref) and an indexable input sequence (typically `Vector` or\n`String`), and return a final [`ParserState`](@ref) that contains all matched\ngrammar productions.\n\nThe `input` must be random-indexable (because PikaParsers require a lot of\nrandom indexing) using Int indexes, must support `firstindex`, `lastindex`,\n`prevind`, `nextind`, index arithmetics with `+` and `-`, and indexes in\n`view`s must be the same as in original container except for a constant offset.\n\n# Lexing and fast terminal matching\n\nIf `fast_match` is specified, the function does not match terminals using the\nassociated grammar rules, but with a `fast_match` function that reports the\nmatched terminals via a callback. The function is called exactly once for each\nposition in `input` in reverse order (i.e., the indexes will start at\n`lastindex(input)` and continue using `prevind` all the way to\n`firstindex(input)`), which can be utilized by the application for\noptimization. The call parameters consist of the input vector, position in\nthe input vector, and a \"report\" function used to send back a clause ID (of\nsame type as `G` in `typeof(grammar)`) and the last item of the terminal match\nthat can starts at that position. Calls to the reporting function can be\nrepeated if more terminal types match. Terminals not reported by the calls to\n`fast_match` will not be matched.\n\nFor complicated grammars, this may be much faster than having the parser to try\nmatching all terminal types at each position.\n\nIf your grammar does not contain dangerous or highly surprising kinds of\nterminals (in particular, it can be scanned greedily left-to-right), you may\nuse [`parse_lex`](@ref) to run a reasonable terminal-only lexing step, which is\nthen automatically used as a basis for fast matching.\n\n# Caveats\n\nTake care when indexing `String`s. With UTF-8, not all codepoints may\nnecessarily have length 1.\n\nIf unsure, you may always `collect` the strings to vectors of `Char`s\n(basically converting to UTF-32), where each character occupies precisely one\nindex.\n\n# Results\n\nUse [`find_match_at!`](@ref) to extract matches from [`ParserState`](@ref).\n\nPika parsing never really fails. Instead, in case when the grammar rule is not\nmatched in the input, the expected rule match match is either not going to be\nfound at the starting position with [`find_match_at!`](@ref), or it will not\nspan the whole input.\n\n# Example\n\n parse(\n g,\n \"abcde123\",\n (input, i, match) -> isdigit(input[i]) ? match(:digit, i) : match(:letter, i),\n )\n\n") (function (where (:: (call parse (:: grammar (curly Grammar G T)) (:: input I) (kw fast_match nothing)) (curly ParserState G T I)) G T I) (block (= st (call (curly ParserState G T I) grammar (call PikaQueue (call length (. grammar (inert clauses)))) (ref Match) 0 (ref Int) input)) (= terminal_q (call PikaQueue (call length (. grammar (inert clauses))))) (call reset! terminal_q (. grammar (inert terminals))) (= i (call lastindex input)) (while (call >= i (call firstindex input)) (block (if (call isnothing fast_match) (block (call reset! (. st (inert q)) terminal_q)) (block (call fast_match input i (-> (tuple (:: rid G) (:: last Int)) (block (let (= cl (ref (. grammar (inert idx)) rid)) (block (call new_match! (call Match cl i last 0 (call submatch_empty st)) st)))))))) (while (call ! (call isempty (. st (inert q)))) (block (= clause (call pop! (. st (inert q)))) (= cls (ref (. grammar (inert clauses)) clause)) (if (call isa cls (curly Token Int T)) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Tokens Int T I))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Satisfy Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Scan Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Seq Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly First Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly FollowedBy Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Many Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Some Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Tie Int T))) (block (call match_clause! cls clause i st)) (block (call match_clause! cls clause i st)))))))))))))) (= i (call prevind input i)))) st)))  └─ @ /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:66  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/PikaParser/SOJr9/src/PikaParser.jl:13  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:66 in expression starting at /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/PikaParser.jl:1 in expression starting at stdin:5 ✗ PikaParser 1 dependency successfully precompiled in 7 seconds Precompilation completed after 26.68s ################################################################################ # Loading # Loading PikaParser... ┌ Info: JuliaLowering threw given input: │ code = │ :(#= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:66 =# Core.@doc "$(TYPEDSIGNATURES)\n\nTake a [`Grammar`](@ref) and an indexable input sequence (typically `Vector` or\n`String`), and return a final [`ParserState`](@ref) that contains all matched\ngrammar productions.\n\nThe `input` must be random-indexable (because PikaParsers require a lot of\nrandom indexing) using Int indexes, must support `firstindex`, `lastindex`,\n`prevind`, `nextind`, index arithmetics with `+` and `-`, and indexes in\n`view`s must be the same as in original container except for a constant offset.\n\n# Lexing and fast terminal matching\n\nIf `fast_match` is specified, the function does not match terminals using the\nassociated grammar rules, but with a `fast_match` function that reports the\nmatched terminals via a callback. The function is called exactly once for each\nposition in `input` in reverse order (i.e., the indexes will start at\n`lastindex(input)` and continue using `prevind` all the way to\n`firstindex(input)`), which can be utilized by the application for\noptimization. The call parameters consist of the input vector, position in\nthe input vector, and a \"report\" function used to send back a clause ID (of\nsame type as `G` in `typeof(grammar)`) and the last item of the terminal match\nthat can starts at that position. Calls to the reporting function can be\nrepeated if more terminal types match. Terminals not reported by the calls to\n`fast_match` will not be matched.\n\nFor complicated grammars, this may be much faster than having the parser to try\nmatching all terminal types at each position.\n\nIf your grammar does not contain dangerous or highly surprising kinds of\nterminals (in particular, it can be scanned greedily left-to-right), you may\nuse [`parse_lex`](@ref) to run a reasonable terminal-only lexing step, which is\nthen automatically used as a basis for fast matching.\n\n# Caveats\n\nTake care when indexing `String`s. With UTF-8, not all codepoints may\nnecessarily have length 1.\n\nIf unsure, you may always `collect` the strings to vectors of `Char`s\n(basically converting to UTF-32), where each character occupies precisely one\nindex.\n\n# Results\n\nUse [`find_match_at!`](@ref) to extract matches from [`ParserState`](@ref).\n\nPika parsing never really fails. Instead, in case when the grammar rule is not\nmatched in the input, the expected rule match match is either not going to be\nfound at the starting position with [`find_match_at!`](@ref), or it will not\nspan the whole input.\n\n# Example\n\n parse(\n g,\n \"abcde123\",\n (input, i, match) -> isdigit(input[i]) ? match(:digit, i) : match(:letter, i),\n )\n\n" function (parse(grammar::Grammar{G, T}, input::I, fast_match = nothing)::ParserState{G, T, I}) where {G, T, I} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:128 =# │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:133 =# │ st = ParserState{G, T, I}(grammar, PikaQueue(length(grammar.clauses)), Match[], 0, Int[], input) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:144 =# │ terminal_q = PikaQueue(length(grammar.clauses)) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:145 =# │ reset!(terminal_q, grammar.terminals) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:147 =# │ i = lastindex(input) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:148 =# │ while i >= firstindex(input) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:149 =# │ if isnothing(fast_match) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:150 =# │ reset!(st.q, terminal_q) │ else │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:152 =# │ fast_match(input, i, ((rid::G, last::Int)->begin │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:155 =# │ let cl = grammar.idx[rid] │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:156 =# │ new_match!(Match(cl, i, last, 0, submatch_empty(st)), st) │ end │ end)) │ end │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:160 =# │ while !(isempty(st.q)) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:161 =# │ clause = pop!(st.q) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:177 =# │ cls = grammar.clauses[clause] │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:178 =# │ if cls isa Token{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:179 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:180 =# cls isa Tokens{Int, T, I} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:181 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:182 =# cls isa Satisfy{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:183 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:184 =# cls isa Scan{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:185 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:186 =# cls isa Seq{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:187 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:188 =# cls isa First{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:189 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:190 =# cls isa FollowedBy{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:191 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:192 =# cls isa Many{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:193 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:194 =# cls isa Some{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:195 =# │ match_clause!(cls, clause, i, st) │ elseif #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:196 =# cls isa Tie{Int, T} │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:197 =# │ match_clause!(cls, clause, i, st) │ else │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:202 =# │ match_clause!(cls, clause, i, st) │ end │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:205 =# │ end │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:206 =# │ i = prevind(input, i) │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:207 =# │ end │ #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:209 =# │ st │ end) │ st0 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source,__macro_ctx__ │ [macrocall] │ │ @doc :: Identifier │ mod │ :(#= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:66 =#) :: Value │ │ [string] │ │ TYPEDSIGNATURES :: Identifier │ │ "\n\nTake a [`Grammar`](@ref) and an indexable input sequence (typically `Vector` or\n`String`), and return a final [`ParserState`](@ref) that contains all matched\ngrammar productions.\n\nThe `input` must be random-indexable (because PikaParsers require a lot of\nrandom indexing) using Int indexes, must support `firstindex`, `lastindex`,\n`prevind`, `nextind`, index arithmetics with `+` and `-`, and indexes in\n`view`s must be the same as in original container except for a constant offset.\n\n# Lexing and fast terminal matching\n\nIf `fast_match` is specified, the function does not match terminals using the\nassociated grammar rules, but with a `fast_match` function that reports the\nmatched terminals via a callback. The function is called exactly once for each\nposition in `input` in reverse order (i.e., the indexes will start at\n`lastindex(input)` and continue using `prevind` all the way to\n`firstindex(input)`), which can be utilized by the application for\noptimization. The call parameters consist of the input vector, position in\nthe input vector, and a \"report\" function used to send back a clause ID (of\nsame type as `G` in `typeof(grammar)`) and the last item of the terminal match\nthat can starts at that position. Calls to the reporting function can be\nrepeated if more terminal types match. Terminals not reported by the calls to\n`fast_match` will not be matched.\n\nFor complicated grammars, this may be much faster than having the parser to try\nmatching all terminal types at each position.\n\nIf your grammar does not contain dangerous or highly surprising kinds of\nterminals (in particular, it can be scanned greedily left-to-right), you may\nuse [`parse_lex`](@ref) to run a reasonable terminal-only lexing step, which is\nthen automatically used as a basis for fast matching.\n\n# Caveats\n\nTake care when indexing `String`s. With UTF-8, not all codepoints may\nnecessarily have length 1.\n\nIf unsure, you may always `collect` the strings to vectors of `Char`s\n(basically converting to UTF-32), where each character occupies precisely one\nindex.\n\n# Results\n\nUse [`find_match_at!`](@ref) to extract matches from [`ParserState`](@ref).\n\nPika parsing never really fails. Instead, in case when the grammar rule is not\nmatched in the input, the expected rule match match is either not going to be\nfound at the starting position with [`find_match_at!`](@ref), or it will not\nspan the whole input.\n\n# Example\n\n parse(\n g,\n \"abcde123\",\n (input, i, match) -> isdigit(input[i]) ? match(:digit, i) : match(:letter, i),\n )\n\n" :: Value │ │ [function] │ │ [where] │ │ [::] │ │ [call] │ │ parse :: Identifier │ │ [::] │ │ grammar :: Identifier │ │ [curly] │ │ Grammar :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ [::] │ │ input :: Identifier │ │ I :: Identifier │ │ [kw] │ │ fast_match :: Identifier │ │ nothing :: Identifier │ │ [curly] │ │ ParserState :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ [block] │ │ [=] │ │ st :: Identifier │ │ [call] │ │ [curly] │ │ ParserState :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ grammar :: Identifier │ │ [call] │ │ PikaQueue :: Identifier │ │ [call] │ │ length :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ [ref] │ │ Match :: Identifier │ │ 0 :: Value │ │ [ref] │ │ Int :: Identifier │ │ input :: Identifier │ │ [=] │ │ terminal_q :: Identifier │ │ [call] │ │ PikaQueue :: Identifier │ │ [call] │ │ length :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ [call] │ │ reset! :: Identifier │ │ terminal_q :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ terminals :: Identifier │ │ [=] │ │ i :: Identifier │ │ [call] │ │ lastindex :: Identifier │ │ input :: Identifier │ │ [while] │ │ [call] │ │ >= :: Identifier │ │ i :: Identifier │ │ [call] │ │ firstindex :: Identifier │ │ input :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ isnothing :: Identifier │ │ fast_match :: Identifier │ │ [block] │ │ [call] │ │ reset! :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ terminal_q :: Identifier │ │ [block] │ │ [call] │ │ fast_match :: Identifier │ │ input :: Identifier │ │ i :: Identifier │ │ [->] │ │ [tuple] │ │ [::] │ │ rid :: Identifier │ │ G :: Identifier │ │ [::] │ │ last :: Identifier │ │ Int :: Identifier │ │ [block] │ │ [let] │ │ [=] │ │ cl :: Identifier │ │ [ref] │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ idx :: Identifier │ │ rid :: Identifier │ │ [block] │ │ [call] │ │ new_match! :: Identifier │ │ [call] │ │ Match :: Identifier │ │ cl :: Identifier │ │ i :: Identifier │ │ last :: Identifier │ │ 0 :: Value │ │ [call] │ │ submatch_empty :: Identifier │ │ st :: Identifier │ │ st :: Identifier │ │ [while] │ │ [call] │ │ ! :: Identifier │ │ [call] │ │ isempty :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ [block] │ │ [=] │ │ clause :: Identifier │ │ [call] │ │ pop! :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ [=] │ │ cls :: Identifier │ │ [ref] │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ clause :: Identifier │ │ [if] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Token :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Tokens :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Satisfy :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Scan :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Seq :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ First :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ FollowedBy :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Many :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Some :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Tie :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [=] │ │ i :: Identifier │ │ [call] │ │ prevind :: Identifier │ │ input :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ │ st1 = │ SyntaxTree with attributes mod,kind,var_id,toplevel_pure,scope_type,macro_source,name_val,syntax_flags,meta,scope_layer,value,jl_source,is_toplevel_thunk,source │ [block] │ │ [=] │ │ val :: Identifier │ scope_layer=3 │ [function] │ │ [where] │ │ [::] │ │ [call] │ │ parse :: Identifier │ scope_layer=1 │ [::] │ │ grammar :: Identifier │ scope_layer=1 │ [curly] │ │ Grammar :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [::] │ │ input :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ [kw] │ │ fast_match :: Identifier │ scope_layer=1 │ nothing :: Identifier │ scope_layer=1 │ [curly] │ │ ParserState :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ [block] │ │ [=] │ │ st :: Identifier │ scope_layer=1 │ [call] │ │ [curly] │ │ ParserState :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ grammar :: Identifier │ scope_layer=1 │ [call] │ │ PikaQueue :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ [.] │ │ grammar :: Identifier │ scope_layer=1 │ [inert] │ │ clauses :: Identifier │ │ [ref] │ │ Match :: Identifier │ scope_layer=1 │ 0 :: Value │ macro_source=333 │ [ref] │ │ Int :: Identifier │ scope_layer=1 │ input :: Identifier │ scope_layer=1 │ [=] │ │ terminal_q :: Identifier │ scope_layer=1 │ [call] │ │ PikaQueue :: Identifier │ scope_layer=1 │ [call] │ │ length :: Identifier │ scope_layer=1 │ [.] │ │ grammar :: Identifier │ scope_layer=1 │ [inert] │ │ clauses :: Identifier │ │ [call] │ │ reset! :: Identifier │ scope_layer=1 │ terminal_q :: Identifier │ scope_layer=1 │ [.] │ │ grammar :: Identifier │ scope_layer=1 │ [inert] │ │ terminals :: Identifier │ │ [=] │ │ i :: Identifier │ scope_layer=1 │ [call] │ │ lastindex :: Identifier │ scope_layer=1 │ input :: Identifier │ scope_layer=1 │ [while] │ │ [call] │ │ >= :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ [call] │ │ firstindex :: Identifier │ scope_layer=1 │ input :: Identifier │ scope_layer=1 │ [block] │ │ [if] │ │ [call] │ │ isnothing :: Identifier │ scope_layer=1 │ fast_match :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ reset! :: Identifier │ scope_layer=1 │ [.] │ │ st :: Identifier │ scope_layer=1 │ [inert] │ │ q :: Identifier │ │ terminal_q :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ fast_match :: Identifier │ scope_layer=1 │ input :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ [->] │ │ [tuple] │ │ [::] │ │ rid :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ [::] │ │ last :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ [block] │ │ [let] │ │ [=] │ │ cl :: Identifier │ scope_layer=1 │ [ref] │ │ [.] │ │ grammar :: Identifier │ scope_layer=1 │ [inert] │ │ idx :: Identifier │ │ rid :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ new_match! :: Identifier │ scope_layer=1 │ [call] │ │ Match :: Identifier │ scope_layer=1 │ cl :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ last :: Identifier │ scope_layer=1 │ 0 :: Value │ macro_source=333 │ [call] │ │ submatch_empty :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [while] │ │ [call] │ │ ! :: Identifier │ scope_layer=1 │ [call] │ │ isempty :: Identifier │ scope_layer=1 │ [.] │ │ st :: Identifier │ scope_layer=1 │ [inert] │ │ q :: Identifier │ │ [block] │ │ [=] │ │ clause :: Identifier │ scope_layer=1 │ [call] │ │ pop! :: Identifier │ scope_layer=1 │ [.] │ │ st :: Identifier │ scope_layer=1 │ [inert] │ │ q :: Identifier │ │ [=] │ │ cls :: Identifier │ scope_layer=1 │ [ref] │ │ [.] │ │ grammar :: Identifier │ scope_layer=1 │ [inert] │ │ clauses :: Identifier │ │ clause :: Identifier │ scope_layer=1 │ [if] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Token :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Tokens :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Satisfy :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Scan :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Seq :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ First :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ FollowedBy :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Many :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Some :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ [curly] │ │ Tie :: Identifier │ scope_layer=1 │ Int :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [block] │ │ [call] │ │ match_clause! :: Identifier │ scope_layer=1 │ cls :: Identifier │ scope_layer=1 │ clause :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [=] │ │ i :: Identifier │ scope_layer=1 │ [call] │ │ prevind :: Identifier │ scope_layer=1 │ input :: Identifier │ scope_layer=1 │ i :: Identifier │ scope_layer=1 │ st :: Identifier │ scope_layer=1 │ [call] │ │ Base.Docs.doc! :: Value │ macro_source=333 │ PikaParser :: Value │ macro_source=333 │ [call] │ │ Base.Docs.Binding :: Value │ macro_source=333 │ PikaParser :: Value │ │ [inert] │ jl_source=L65 │ parse :: Identifier │ │ [call] │ │ Base.Docs.docstr :: Value │ macro_source=333 │ [call] │ │ Core.svec :: Value │ macro_source=333 │ [call] │ │ DocStringExtensions.interpolation :: Value │ macro_source=333 │ TYPEDSIGNATURES :: Identifier │ scope_layer=1 │ [inert] │ │ [function] │ │ [where] │ │ [::] │ │ [call] │ │ parse :: Identifier │ │ [::] │ │ grammar :: Identifier │ │ [curly] │ │ Grammar :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ [::] │ │ input :: Identifier │ │ I :: Identifier │ │ [kw] │ │ fast_match :: Identifier │ │ nothing :: Identifier │ │ [curly] │ │ ParserState :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ [block] │ │ [=] │ │ st :: Identifier │ │ [call] │ │ [curly] │ │ ParserState :: Identifier │ │ G :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ grammar :: Identifier │ │ [call] │ │ PikaQueue :: Identifier │ │ [call] │ │ length :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ [ref] │ │ Match :: Identifier │ │ 0 :: Value │ │ [ref] │ │ Int :: Identifier │ │ input :: Identifier │ │ [=] │ │ terminal_q :: Identifier │ │ [call] │ │ PikaQueue :: Identifier │ │ [call] │ │ length :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ [call] │ │ reset! :: Identifier │ │ terminal_q :: Identifier │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ terminals :: Identifier │ │ [=] │ │ i :: Identifier │ │ [call] │ │ lastindex :: Identifier │ │ input :: Identifier │ │ [while] │ │ [call] │ │ >= :: Identifier │ │ i :: Identifier │ │ [call] │ │ firstindex :: Identifier │ │ input :: Identifier │ │ [block] │ │ [if] │ │ [call] │ │ isnothing :: Identifier │ │ fast_match :: Identifier │ │ [block] │ │ [call] │ │ reset! :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ terminal_q :: Identifier │ │ [block] │ │ [call] │ │ fast_match :: Identifier │ │ input :: Identifier │ │ i :: Identifier │ │ [->] │ │ [tuple] │ │ [::] │ │ rid :: Identifier │ │ G :: Identifier │ │ [::] │ │ last :: Identifier │ │ Int :: Identifier │ │ [block] │ │ [let] │ │ [=] │ │ cl :: Identifier │ │ [ref] │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ idx :: Identifier │ │ rid :: Identifier │ │ [block] │ │ [call] │ │ new_match! :: Identifier │ │ [call] │ │ Match :: Identifier │ │ cl :: Identifier │ │ i :: Identifier │ │ last :: Identifier │ │ 0 :: Value │ │ [call] │ │ submatch_empty :: Identifier │ │ st :: Identifier │ │ st :: Identifier │ │ [while] │ │ [call] │ │ ! :: Identifier │ │ [call] │ │ isempty :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ [block] │ │ [=] │ │ clause :: Identifier │ │ [call] │ │ pop! :: Identifier │ │ [.] │ │ st :: Identifier │ │ [inert] │ │ q :: Identifier │ │ [=] │ │ cls :: Identifier │ │ [ref] │ │ [.] │ │ grammar :: Identifier │ │ [inert] │ │ clauses :: Identifier │ │ clause :: Identifier │ │ [if] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Token :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Tokens :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ I :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Satisfy :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Scan :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Seq :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ First :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ FollowedBy :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Many :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Some :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [elseif] │ │ [block] │ │ [call] │ │ isa :: Identifier │ │ cls :: Identifier │ │ [curly] │ │ Tie :: Identifier │ │ Int :: Identifier │ │ T :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [block] │ │ [call] │ │ match_clause! :: Identifier │ │ cls :: Identifier │ │ clause :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ [=] │ │ i :: Identifier │ │ [call] │ │ prevind :: Identifier │ │ input :: Identifier │ │ i :: Identifier │ │ st :: Identifier │ │ "\n\nTake a [`Grammar`](@ref) and an indexable input sequence (typically `Vector` or\n`String`), and return a final [`ParserState`](@ref) that contains all matched\ngrammar productions.\n\nThe `input` must be random-indexable (because PikaParsers require a lot of\nrandom indexing) using Int indexes, must support `firstindex`, `lastindex`,\n`prevind`, `nextind`, index arithmetics with `+` and `-`, and indexes in\n`view`s must be the same as in original container except for a constant offset.\n\n# Lexing and fast terminal matching\n\nIf `fast_match` is specified, the function does not match terminals using the\nassociated grammar rules, but with a `fast_match` function that reports the\nmatched terminals via a callback. The function is called exactly once for each\nposition in `input` in reverse order (i.e., the indexes will start at\n`lastindex(input)` and continue using `prevind` all the way to\n`firstindex(input)`), which can be utilized by the application for\noptimization. The call parameters consist of the input vector, position in\nthe input vector, and a \"report\" function used to send back a clause ID (of\nsame type as `G` in `typeof(grammar)`) and the last item of the terminal match\nthat can starts at that position. Calls to the reporting function can be\nrepeated if more terminal types match. Terminals not reported by the calls to\n`fast_match` will not be matched.\n\nFor complicated grammars, this may be much faster than having the parser to try\nmatching all terminal types at each position.\n\nIf your grammar does not contain dangerous or highly surprising kinds of\nterminals (in particular, it can be scanned greedily left-to-right), you may\nuse [`parse_lex`](@ref) to run a reasonable terminal-only lexing step, which is\nthen automatically used as a basis for fast matching.\n\n# Caveats\n\nTake care when indexing `String`s. With UTF-8, not all codepoints may\nnecessarily have length 1.\n\nIf unsure, you may always `collect` the strings to vectors of `Char`s\n(basically converting to UTF-32), where each character occupies precisely one\nindex.\n\n# Results\n\nUse [`find_match_at!`](@ref) to extract matches from [`ParserState`](@ref).\n\nPika parsing never really fails. Instead, in case when the grammar rule is not\nmatched in the input, the expected rule match match is either not going to be\nfound at the starting position with [`find_match_at!`](@ref), or it will not\nspan the whole input.\n\n# Example\n\n parse(\n g,\n \"abcde123\",\n (input, i, match) -> isdigit(input[i]) ? match(:digit, i) : match(:letter, i),\n )\n\n" :: Value │ macro_source=333 │ [call] │ macro_source=333 │ Dict{Symbol, Any} :: Value │ macro_source=333 │ :path => "/home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl" :: Value │ macro_source=333 │ :linenumber => 66 :: Value │ macro_source=333 │ :module => PikaParser :: Value │ macro_source=333 │ [where] │ │ [where] │ │ [where] │ │ [curly] │ │ Union :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ Grammar :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ [curly] │ │ Grammar :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ [curly] │ │ Tuple :: Identifier │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ I :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ T :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ [<:] │ scope_layer=1 │ G :: Identifier │ scope_layer=1 │ Any :: Identifier │ scope_layer=1 │ val :: Identifier │ scope_layer=3 │ │ file = "/home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl" │ line = 66 └ mod = PikaParser ERROR: LoadError: LoweringError: #= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:152 =# - Found unexpected binding of kind static_parameter Expression:  #₂₆/G Containing expressions:  (= #₁₁₂/G #₂₆/G)  (= #₄ (call core.svec (call core.svec #₇₉/#parse##->###0 #₂₆/G #₃₆/Int) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:152:0))  (= #₄ (call core.svec (call core.svec (function_type #₄₁/#->#) #₂₆/G #₃₆/Int) (call core.svec) SourceLocation:/home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:152:0))  Detailed provenance:  #₂₆/G  └─ G  └─ G  ├─ @ /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:152  └─ (macrocall @doc :(#= /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:66 =#) (string TYPEDSIGNATURES "\n\nTake a [`Grammar`](@ref) and an indexable input sequence (typically `Vector` or\n`String`), and return a final [`ParserState`](@ref) that contains all matched\ngrammar productions.\n\nThe `input` must be random-indexable (because PikaParsers require a lot of\nrandom indexing) using Int indexes, must support `firstindex`, `lastindex`,\n`prevind`, `nextind`, index arithmetics with `+` and `-`, and indexes in\n`view`s must be the same as in original container except for a constant offset.\n\n# Lexing and fast terminal matching\n\nIf `fast_match` is specified, the function does not match terminals using the\nassociated grammar rules, but with a `fast_match` function that reports the\nmatched terminals via a callback. The function is called exactly once for each\nposition in `input` in reverse order (i.e., the indexes will start at\n`lastindex(input)` and continue using `prevind` all the way to\n`firstindex(input)`), which can be utilized by the application for\noptimization. The call parameters consist of the input vector, position in\nthe input vector, and a \"report\" function used to send back a clause ID (of\nsame type as `G` in `typeof(grammar)`) and the last item of the terminal match\nthat can starts at that position. Calls to the reporting function can be\nrepeated if more terminal types match. Terminals not reported by the calls to\n`fast_match` will not be matched.\n\nFor complicated grammars, this may be much faster than having the parser to try\nmatching all terminal types at each position.\n\nIf your grammar does not contain dangerous or highly surprising kinds of\nterminals (in particular, it can be scanned greedily left-to-right), you may\nuse [`parse_lex`](@ref) to run a reasonable terminal-only lexing step, which is\nthen automatically used as a basis for fast matching.\n\n# Caveats\n\nTake care when indexing `String`s. With UTF-8, not all codepoints may\nnecessarily have length 1.\n\nIf unsure, you may always `collect` the strings to vectors of `Char`s\n(basically converting to UTF-32), where each character occupies precisely one\nindex.\n\n# Results\n\nUse [`find_match_at!`](@ref) to extract matches from [`ParserState`](@ref).\n\nPika parsing never really fails. Instead, in case when the grammar rule is not\nmatched in the input, the expected rule match match is either not going to be\nfound at the starting position with [`find_match_at!`](@ref), or it will not\nspan the whole input.\n\n# Example\n\n parse(\n g,\n \"abcde123\",\n (input, i, match) -> isdigit(input[i]) ? match(:digit, i) : match(:letter, i),\n )\n\n") (function (where (:: (call parse (:: grammar (curly Grammar G T)) (:: input I) (kw fast_match nothing)) (curly ParserState G T I)) G T I) (block (= st (call (curly ParserState G T I) grammar (call PikaQueue (call length (. grammar (inert clauses)))) (ref Match) 0 (ref Int) input)) (= terminal_q (call PikaQueue (call length (. grammar (inert clauses))))) (call reset! terminal_q (. grammar (inert terminals))) (= i (call lastindex input)) (while (call >= i (call firstindex input)) (block (if (call isnothing fast_match) (block (call reset! (. st (inert q)) terminal_q)) (block (call fast_match input i (-> (tuple (:: rid G) (:: last Int)) (block (let (= cl (ref (. grammar (inert idx)) rid)) (block (call new_match! (call Match cl i last 0 (call submatch_empty st)) st)))))))) (while (call ! (call isempty (. st (inert q)))) (block (= clause (call pop! (. st (inert q)))) (= cls (ref (. grammar (inert clauses)) clause)) (if (call isa cls (curly Token Int T)) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Tokens Int T I))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Satisfy Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Scan Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Seq Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly First Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly FollowedBy Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Many Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Some Int T))) (block (call match_clause! cls clause i st)) (elseif (block (call isa cls (curly Tie Int T))) (block (call match_clause! cls clause i st)) (block (call match_clause! cls clause i st)))))))))))))) (= i (call prevind input i)))) st)))  └─ @ /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:66  Stacktrace:  [1] _renumber(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ssa_rewrites::Dict{Int64, Int64}, slot_rewrites::Dict{Int64, Int64}, label_table::Dict{Int64, Int64}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1097  [2] renumber_body(ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, input_code::Base.JuliaSyntax.SyntaxList{Dict{Symbol, Dict{Int64, Any}}, Vector{Int64}}, slot_rewrites::Dict{Int64, Int64})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1162  [3] compile_lambda(outer_ctx::Base.JuliaLowering.LinearIRContext{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1257  [4] linearize_ir(ctx::Base.JuliaLowering.ClosureConversionCtx{Dict{Symbol, Dict{Int64, Any}}}, ex::Base.JuliaSyntax.SyntaxTree{Dict{Symbol, Dict{Int64, Any}}})  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/linear_ir.jl:1287  [5] core_lowering_hook(code::Any, mod::Module, file::String, line::UInt64, world::UInt64, _warn::Bool)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/hooks.jl:33  [6] include(mapexpr::Function, mod::Module, _path::String)  @ Base Base.jl:326  [7] top-level scope  @ ~/.julia/packages/PikaParser/SOJr9/src/PikaParser.jl:13  [8] include(mod::Module, _path::String)  @ Base Base.jl:325  [9] include_package_for_output(pkg::Base.PkgId, input::String, syntax_version::VersionNumber, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)  @ Base loading.jl:3296  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core boot.jl:522  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base loading.jl:3132  [13] include_string(m::Module, txt::String, fname::String)  @ Base loading.jl:3142 [inlined]  [14] exec_options(opts::Base.JLOptions)  @ Base client.jl:353  [15] _start()  @ Base client.jl:596 in expression starting at /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/parse.jl:66 in expression starting at /home/pkgeval/.julia/packages/PikaParser/SOJr9/src/PikaParser.jl:1 in expression starting at stdin:5 1 dependency had output during precompilation: ┌ PikaParser │ [Output was shown above] └ ERROR: The following 1 package failed to precompile: PikaParser Failed to precompile PikaParser [3bbf5609-3e7b-44cd-8549-7c69f321e792] to "/home/pkgeval/.julia/compiled/v1.14/PikaParser/jl_UX3u2t" (ProcessExited(1)). Loading failed after 13.91s ERROR: LoadError: failed process: Process(`/opt/julia/bin/julia -C native -J/opt/julia/lib/julia/sys.so -g1 --check-bounds=yes --inline=yes --check-bounds=yes --pkgimages=existing -e 'using PikaParser'`, ProcessExited(1)) [1] Stacktrace: [1] pipeline_error(proc::Base.Process) @ Base process.jl:612 [inlined] [2] run(::Cmd; wait::Bool) @ Base process.jl:525 [3] run(::Cmd) @ Base process.jl:522 [4] top-level scope @ /PkgEval.jl/scripts/evaluate.jl:197 [5] include(mod::Module, _path::String) @ Base Base.jl:325 [6] exec_options(opts::Base.JLOptions) @ Base client.jl:355 [7] _start() @ Base client.jl:596 in expression starting at /PkgEval.jl/scripts/evaluate.jl:188 PkgEval failed after 64.88s: package fails to precompile