Package evaluation to test JSONFBCModels on Julia 1.14.0-DEV.2226 (797a5ef2b0*) started at 2026-05-24T00:17:51.398 ################################################################################ # Set-up # Installing PkgEval dependencies (TestEnv)... Activating project at `~/.julia/environments/v1.14` Set-up completed after 16.91s ################################################################################ # Installation # Installing JSONFBCModels... Resolving package versions... Installed JSON ──────────────── v0.21.4 Installed DocStringExtensions ─ v0.9.5 Installed PikaParser ────────── v0.6.1 Installed Parsers ───────────── v2.8.4 Installed Preferences ───────── v1.5.2 Installed AbstractFBCModels ─── v1.3.0 Installed JSONFBCModels ─────── v1.0.1 Installed PrecompileTools ───── v1.3.4 Updating `~/.julia/environments/v1.14/Project.toml` [475c1105] + JSONFBCModels v1.0.1 Updating `~/.julia/environments/v1.14/Manifest.toml` [5a4f3dfa] + AbstractFBCModels v1.3.0 [ffbed154] + DocStringExtensions v0.9.5 ⌅ [682c06a0] + JSON v0.21.4 [475c1105] + JSONFBCModels v1.0.1 [69de0a69] + Parsers v2.8.4 [3bbf5609] + PikaParser v0.6.1 [aea7be01] + PrecompileTools v1.3.4 [21216c6a] + Preferences v1.5.2 [0dad84c5] + ArgTools v1.1.2 [56f22d72] + Artifacts v1.11.0 [2a0f44e3] + Base64 v1.11.0 [ade2ca70] + Dates v1.11.0 [f43a241f] + Downloads v1.7.0 [7b1f6079] + FileWatching v1.11.0 [b77e0a4c] + InteractiveUtils v1.11.0 [ac6e5ff7] + JuliaSyntaxHighlighting v1.13.0 [b27032c2] + LibCURL v1.0.0 [8f399da3] + Libdl v1.11.0 [37e2e46d] + LinearAlgebra v1.13.0 [56ddb016] + Logging v1.11.0 [d6f4376e] + Markdown v1.11.0 [a63ad114] + Mmap v1.11.0 [ca575930] + NetworkOptions v1.3.0 [de0858da] + Printf v1.11.0 [9a3f8284] + Random v1.11.0 [ea8e919c] + SHA v1.13.0 [9e88b42a] + Serialization v1.11.0 [2f01184e] + SparseArrays v1.13.0 [f489334b] + StyledStrings v1.13.0 [fa267f1f] + TOML v1.0.3 [8dfed614] + Test v1.11.0 [cf7118a7] + UUIDs v1.11.0 [4ec0a83e] + Unicode v1.11.0 [e66e0078] + CompilerSupportLibraries_jll v1.5.1+0 [deac9b47] + LibCURL_jll v8.20.0+1 [29816b5a] + LibSSH2_jll v1.11.101+0 [14a3606d] + MozillaCACerts_jll v2026.5.14 [4536629a] + OpenBLAS_jll v0.3.33+0 [458c3c95] + OpenSSL_jll v3.5.6+0 [bea87d4a] + SuiteSparse_jll v7.10.1+0 [83775a58] + Zlib_jll v1.3.2+0 [3161d3a3] + Zstd_jll v1.5.7+1 [8e850b90] + libblastrampoline_jll v5.15.0+0 [8e850ede] + nghttp2_jll v1.69.0+0 Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m` Installation completed after 4.47s ################################################################################ # Precompilation # Precompiling PkgEval dependencies... Precompiling project... 5.6 s ✓ TestEnv 1 dependency successfully precompiled in 6 seconds. 27 already precompiled. Precompiling package dependencies... Precompiling project... 1.1 s ✓ DocStringExtensions 2.3 s ✓ Preferences 80.6 s ✓ AbstractFBCModels ┌ 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:1067  [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:1132  [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:1223  [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:1253  [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:327  [7] top-level scope  @ ~/.julia/packages/PikaParser/SOJr9/src/PikaParser.jl:13  [8] include(mod::Module, _path::String)  @ Base ./Base.jl:326  [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:3271  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core ./boot.jl:517  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base ./loading.jl:3113  [13] push!(a::Vector{SubString{String}}, item::String)  @ Base ./loading.jl:3123 [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 2.2 s ✓ PrecompileTools 26.0 s ✓ Parsers 12.5 s ✓ JSON ERROR: LoadError: Precompiled image Base.PkgId(Base.UUID("3bbf5609-3e7b-44cd-8549-7c69f321e792"), "PikaParser") not available with flags CacheFlags(; use_pkgimages=false, debug_level=1, check_bounds=1, inline=true, opt_level=0) Stacktrace:  [1] error(s::String)  @ Base ./error.jl:56  [2] __require_prelocked(pkg::Base.PkgId, env::String)  @ Base ./loading.jl:2818  [3] _require_prelocked(uuidkey::Base.PkgId, env::String)  @ Base ./loading.jl:2672  [4] macro expansion  @ ./loading.jl:2599 [inlined]  [5] string(::String, ::Union{Char, SubString{String}, String, Symbol}, ::Symbol, ::String)  @ Base ./lock.jl:376 [inlined]  [6] __require(into::Module, mod::Symbol)  @ Base ./loading.jl:2563  [7] require  @ ./loading.jl:2539 [inlined]  [8] eval_import_path(at::Module, from::Nothing, path::Expr, keyword::String)  @ Base ./module.jl:36 [inlined]  [9] _eval_import(imported::Bool, to::Module, from::Nothing, paths::Expr)  @ Base ./module.jl:111  [10] eval_import(imported::Bool, to::Module, from::Nothing, paths::Expr)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/runtime.jl:195  [11] top-level scope  @ ~/.julia/packages/JSONFBCModels/544sa/src/grr_utils.jl:2  [12] include(mapexpr::Function, mod::Module, _path::String)  @ Base ./Base.jl:327  [13] top-level scope  @ ~/.julia/packages/JSONFBCModels/544sa/src/JSONFBCModels.jl:15  [14] include(mod::Module, _path::String)  @ Base ./Base.jl:326  [15] 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:3271  [16] top-level scope  @ stdin:5  [17] eval(m::Module, e::Any)  @ Core ./boot.jl:517  [18] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base ./loading.jl:3113  [19] push!(a::Vector{SubString{String}}, item::String)  @ Base ./loading.jl:3123 [inlined]  [20] exec_options(opts::Base.JLOptions)  @ Base ./client.jl:353  [21] _start()  @ Base ./client.jl:596 in expression starting at /home/pkgeval/.julia/packages/JSONFBCModels/544sa/src/grr_utils.jl:2 in expression starting at /home/pkgeval/.julia/packages/JSONFBCModels/544sa/src/JSONFBCModels.jl:1 in expression starting at stdin:5 ✗ JSONFBCModels 6 dependencies successfully precompiled in 202 seconds. 27 already precompiled. Precompilation completed after 233.4s ################################################################################ # Testing # Testing JSONFBCModels Status `/tmp/jl_Z7wQV7/Project.toml` [5a4f3dfa] AbstractFBCModels v1.3.0 [ffbed154] DocStringExtensions v0.9.5 ⌅ [682c06a0] JSON v0.21.4 [475c1105] JSONFBCModels v1.0.1 [3bbf5609] PikaParser v0.6.1 [2f01184e] SparseArrays v1.13.0 [8dfed614] Test v1.11.0 Status `/tmp/jl_Z7wQV7/Manifest.toml` [5a4f3dfa] AbstractFBCModels v1.3.0 [ffbed154] DocStringExtensions v0.9.5 ⌅ [682c06a0] JSON v0.21.4 [475c1105] JSONFBCModels v1.0.1 [69de0a69] Parsers v2.8.4 [3bbf5609] PikaParser v0.6.1 [aea7be01] PrecompileTools v1.3.4 [21216c6a] Preferences v1.5.2 [0dad84c5] ArgTools v1.1.2 [56f22d72] Artifacts v1.11.0 [2a0f44e3] Base64 v1.11.0 [ade2ca70] Dates v1.11.0 [f43a241f] Downloads v1.7.0 [7b1f6079] FileWatching v1.11.0 [b77e0a4c] InteractiveUtils v1.11.0 [ac6e5ff7] JuliaSyntaxHighlighting v1.13.0 [b27032c2] LibCURL v1.0.0 [8f399da3] Libdl v1.11.0 [37e2e46d] LinearAlgebra v1.13.0 [56ddb016] Logging v1.11.0 [d6f4376e] Markdown v1.11.0 [a63ad114] Mmap v1.11.0 [ca575930] NetworkOptions v1.3.0 [de0858da] Printf v1.11.0 [9a3f8284] Random v1.11.0 [ea8e919c] SHA v1.13.0 [9e88b42a] Serialization v1.11.0 [2f01184e] SparseArrays v1.13.0 [f489334b] StyledStrings v1.13.0 [fa267f1f] TOML v1.0.3 [8dfed614] Test v1.11.0 [cf7118a7] UUIDs v1.11.0 [4ec0a83e] Unicode v1.11.0 [e66e0078] CompilerSupportLibraries_jll v1.5.1+0 [deac9b47] LibCURL_jll v8.20.0+1 [29816b5a] LibSSH2_jll v1.11.101+0 [14a3606d] MozillaCACerts_jll v2026.5.14 [4536629a] OpenBLAS_jll v0.3.33+0 [458c3c95] OpenSSL_jll v3.5.6+0 [bea87d4a] SuiteSparse_jll v7.10.1+0 [83775a58] Zlib_jll v1.3.2+0 [3161d3a3] Zstd_jll v1.5.7+1 [8e850b90] libblastrampoline_jll v5.15.0+0 [8e850ede] nghttp2_jll v1.69.0+0 Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. Testing Running tests... ┌ 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:1067  [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:1132  [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:1223  [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:1253  [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:327  [7] top-level scope  @ ~/.julia/packages/PikaParser/SOJr9/src/PikaParser.jl:13  [8] include(mod::Module, _path::String)  @ Base ./Base.jl:326  [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:3271  [10] top-level scope  @ stdin:5  [11] eval(m::Module, e::Any)  @ Core ./boot.jl:517  [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base ./loading.jl:3113  [13] push!(a::Vector{SubString{String}}, item::String)  @ Base ./loading.jl:3123 [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 ERROR: LoadError: Precompiled image Base.PkgId(Base.UUID("3bbf5609-3e7b-44cd-8549-7c69f321e792"), "PikaParser") not available with flags CacheFlags(; use_pkgimages=false, debug_level=1, check_bounds=1, inline=true, opt_level=0) Stacktrace:  [1] error(s::String)  @ Base ./error.jl:56  [2] __require_prelocked(pkg::Base.PkgId, env::String)  @ Base ./loading.jl:2818  [3] _require_prelocked(uuidkey::Base.PkgId, env::String)  @ Base ./loading.jl:2672  [4] macro expansion  @ ./loading.jl:2599 [inlined]  [5] string(::String, ::Union{Char, SubString{String}, String, Symbol}, ::Symbol, ::String)  @ Base ./lock.jl:376 [inlined]  [6] __require(into::Module, mod::Symbol)  @ Base ./loading.jl:2563  [7] require  @ ./loading.jl:2539 [inlined]  [8] eval_import_path(at::Module, from::Nothing, path::Expr, keyword::String)  @ Base ./module.jl:36 [inlined]  [9] _eval_import(imported::Bool, to::Module, from::Nothing, paths::Expr)  @ Base ./module.jl:111  [10] eval_import(imported::Bool, to::Module, from::Nothing, paths::Expr)  @ Base.JuliaLowering /source/usr/share/julia/JuliaLowering/src/runtime.jl:195  [11] top-level scope  @ ~/.julia/packages/JSONFBCModels/544sa/src/grr_utils.jl:2  [12] include(mapexpr::Function, mod::Module, _path::String)  @ Base ./Base.jl:327  [13] top-level scope  @ ~/.julia/packages/JSONFBCModels/544sa/src/JSONFBCModels.jl:15  [14] include(mod::Module, _path::String)  @ Base ./Base.jl:326  [15] 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:3271  [16] top-level scope  @ stdin:5  [17] eval(m::Module, e::Any)  @ Core ./boot.jl:517  [18] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)  @ Base ./loading.jl:3113  [19] push!(a::Vector{SubString{String}}, item::String)  @ Base ./loading.jl:3123 [inlined]  [20] exec_options(opts::Base.JLOptions)  @ Base ./client.jl:353  [21] _start()  @ Base ./client.jl:596 in expression starting at /home/pkgeval/.julia/packages/JSONFBCModels/544sa/src/grr_utils.jl:2 in expression starting at /home/pkgeval/.julia/packages/JSONFBCModels/544sa/src/JSONFBCModels.jl:1 in expression starting at stdin:5 2 dependencies had output during precompilation: ┌ 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:1067 │ [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:1132 │ [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:1223 │ [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:1253 │ [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:327 │ [7] top-level scope │ @ ~/.julia/packages/PikaParser/SOJr9/src/PikaParser.jl:13 │ [8] include(mod::Module, _path::String) │ @ Base ./Base.jl:326 │ [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:3271 │ [10] top-level scope │ @ stdin:5 │ [11] eval(m::Module, e::Any) │ @ Core ./boot.jl:517 │ [12] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String) │ @ Base ./loading.jl:3113 │ [13] push!(a::Vector{SubString{String}}, item::String) │ @ Base ./loading.jl:3123 [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 └ ┌ JSONFBCModels │ [Output was shown above] └ ERROR: LoadError: The following 2 packages failed to precompile: PikaParser Failed to precompile PikaParser [3bbf5609-3e7b-44cd-8549-7c69f321e792] to "/home/pkgeval/.julia/compiled/v1.14/PikaParser/jl_Hdz6NX" (ProcessExited(1)). JSONFBCModels Failed to precompile JSONFBCModels [475c1105-d6ed-49c1-9b32-c11adca6d3e8] to "/home/pkgeval/.julia/compiled/v1.14/JSONFBCModels/jl_anXfec" (ProcessExited(1)). in expression starting at /home/pkgeval/.julia/packages/JSONFBCModels/544sa/test/runtests.jl:2 Testing failed after 193.26s ERROR: LoadError: Package JSONFBCModels errored during testing Stacktrace: [1] pkgerror(msg::String) @ Pkg.Types /opt/julia/share/julia/stdlib/v1.14/Pkg/src/Types.jl:68 [2] test(ctx::Pkg.Types.Context, pkgs::Vector{PackageSpec}; coverage::Bool, julia_args::Cmd, test_args::Cmd, test_fn::Nothing, force_latest_compatible_version::Bool, allow_earlier_backwards_compatible_versions::Bool, allow_reresolve::Bool) @ Pkg.Operations /opt/julia/share/julia/stdlib/v1.14/Pkg/src/Operations.jl:3247 [3] Cmd(cmd::Cmd) @ Base /opt/julia/share/julia/stdlib/v1.14/Pkg/src/Operations.jl:3110 [inlined] [4] test(ctx::Pkg.Types.Context, pkgs::Vector{PackageSpec}; coverage::Bool, test_fn::Nothing, julia_args::Cmd, test_args::Cmd, force_latest_compatible_version::Bool, allow_earlier_backwards_compatible_versions::Bool, allow_reresolve::Bool, kwargs::@Kwargs{io::IOContext{IO}}) @ Pkg.API /opt/julia/share/julia/stdlib/v1.14/Pkg/src/API.jl:587 [5] test(pkgs::Vector{PackageSpec}; io::IOContext{IO}, kwargs::@Kwargs{julia_args::Cmd}) @ Pkg.API /opt/julia/share/julia/stdlib/v1.14/Pkg/src/API.jl:172 [6] test(pkgs::Vector{String}; kwargs::@Kwargs{julia_args::Cmd}) @ Pkg.API /opt/julia/share/julia/stdlib/v1.14/Pkg/src/API.jl:160 [7] test @ /opt/julia/share/julia/stdlib/v1.14/Pkg/src/API.jl:160 [inlined] [8] test(pkg::String; kwargs::@Kwargs{julia_args::Cmd}) @ Pkg.API /opt/julia/share/julia/stdlib/v1.14/Pkg/src/API.jl:159 [inlined] [9] top-level scope @ /PkgEval.jl/scripts/evaluate.jl:223 [10] include(mod::Module, _path::String) @ Base ./Base.jl:326 [11] exec_options(opts::Base.JLOptions) @ Base ./client.jl:355 [12] _start() @ Base ./client.jl:596 in expression starting at /PkgEval.jl/scripts/evaluate.jl:214 PkgEval failed after 479.09s: package fails to precompile