jli  Linuxx86_641.10.3v1.10.30b4590a5507d3f3046e5bafc007cacbbfc9b310bcExproniconLiteH5U$8t6q>/opt/julia/packages/ExproniconLite/yfi6A/src/ExproniconLite.jlCA5/opt/julia/packages/ExproniconLite/yfi6A/src/types.jlJA9/opt/julia/packages/ExproniconLite/yfi6A/src/transform.jlJAA/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/analysis.jlCAB/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/exception.jlCA>/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/check.jlCA=/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/cons.jlCA>/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/guess.jlCAC/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/reflection.jlCA>/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/split.jlA@/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/compare.jlCA7/opt/julia/packages/ExproniconLite/yfi6A/src/codegen.jlJA;/opt/julia/packages/ExproniconLite/yfi6A/src/print/print.jlJA;/opt/julia/packages/ExproniconLite/yfi6A/src/print/utils.jlJA</opt/julia/packages/ExproniconLite/yfi6A/src/print/colors.jlJA</opt/julia/packages/ExproniconLite/yfi6A/src/print/inline.jlJA;/opt/julia/packages/ExproniconLite/yfi6A/src/print/multi.jlJAx CoremуJ5Basemу]J5MainmуJ5ArgToolsBń x(mуF K5 Artifactsmr-V3|mу K5Base64UlD*_mу> K5CRC32c\y.jmуj K5 FileWatchingXzsy`{,zmуh& K5LibdluVW59˗,mу-" K5LoggingT{VhUXM=mуrU" K5MmapP~:xg,Omу|' K5NetworkOptionsC0YW,mуʠ, K5SHAQ<$!<%mу1 K5 Serialization [)*k1mу-G K5Sockets1V$ bdސݗmуYBY K5UnicodeP>I>Nrmуeszo K5 LinearAlgebraSm7̏mуuux K5 OpenBLAS_jll[(Śb6EcQ FmуDux K5libblastrampoline_jllLSۆ }lxӠmу^} K5MarkdownZPn7z`smу/Ed~ K5Printfg^cX׸QDmу;h K5Random_ɢ?\Ymу? K5TarOi>աmу!t, K5DatesEY8pj2 mуX K5FuturebS;3{I xVMmуsD K5InteractiveUtilsWL ~@'ZmуVg K5LibGit2Z[&RPTv3EКRmу8J K5 LibGit2_jll YXg}]$mуD K5 MbedTLS_jllAX 3ȡ_mу- K5 LibSSH2_jlloTZk)߆/opt/julia/packages/ExproniconLite/yfi6A/src/ExproniconLite.jl module ExproniconLite begin #= /Users/roger/Code/Julia/Expronicon/lib/ZhanKai/src/process.jl:221 =# @static if !(isdefined(#= /Users/roger/Code/Julia/Expronicon/lib/ZhanKai/src/process.jl:221 =# @__MODULE__(), :include_generated)) function __include_generated__(_path::String) #= /Users/roger/Code/Julia/Expronicon/lib/ZhanKai/src/process.jl:223 =# Base.@_noinline_meta mod = #= /Users/roger/Code/Julia/Expronicon/lib/ZhanKai/src/process.jl:224 =# @__MODULE__() (path, prev) = Base._include_dependency(mod, _path) code = read(path, String) tls = task_local_storage() tls[:SOURCE_PATH] = path try ex = include_string(mod, "quote $(code) end", path) mod.eval(mod.eval(ex)) return finally if prev === nothing delete!(tls, :SOURCE_PATH) else tls[:SOURCE_PATH] = prev end end end end end export NoDefault, JLExpr, JLFor, JLIfElse, JLFunction, JLField, JLKwField, JLStruct, JLKwStruct, @expr, @test_expr, compare_expr, AnalysisError, SyntaxError, is_function, is_kw_function, is_struct, is_tuple, is_splat, is_ifelse, is_for, is_field, is_field_default, is_datatype_expr, is_matrix_expr, split_function, split_function_head, split_anonymous_function_head, split_struct, split_struct_name, split_ifelse, uninferrable_typevars, has_symbol, is_literal, is_gensym, alias_gensym, has_kwfn_constructor, has_plain_constructor, guess_type, guess_module, guess_value, Substitute, no_default, prettify, rm_lineinfo, flatten_blocks, name_only, annotations_only, rm_annotations, rm_single_block, rm_nothing, substitute, eval_interp, eval_literal, renumber_gensym, expr_map, nexprs, codegen_ast, codegen_ast_kwfn, codegen_ast_kwfn_plain, codegen_ast_kwfn_infer, codegen_ast_struct, codegen_ast_struct_head, codegen_ast_struct_body, struct_name_plain, struct_name_without_inferable, xtuple, xnamedtuple, xcall, xpush, xgetindex, xfirst, xlast, xprint, xprintln, xmap, xmapreduce, xiterate, print_inline, print_expr, sprint_expr #= none:60 =# @static if !(#= none:60 =# @isdefined(eachsplit)) eachsplit(s, pat) = begin split(s, pat) end end __include_generated__("types.jl") __include_generated__("transform.jl") __include_generated__("analysis/analysis.jl") __include_generated__("codegen.jl") __include_generated__("print/print.jl") end 5/opt/julia/packages/ExproniconLite/yfi6A/src/types.jl8 const Maybe{T} = Union{Nothing, T} const __DEFAULT_KWARG_DOC__ = "All the following fields are valid as keyword arguments `kw` in the constructor, and can\nbe access via `.`.\n" const __DEF_DOC__ = "`doc::String`: the docstring of this definition." const __LINENO_DOC__ = "`line::LineNumberNode`: a `LineNumberNode` to indicate the line information." #= none:11 =# Core.@doc " NoDefault\n\nType describes a field should have no default value.\n" struct NoDefault end #= none:18 =# Core.@doc " const no_default = NoDefault()\n\nConstant instance for [`NoDefault`](@ref) that\ndescribes a field should have no default value.\n" const no_default = NoDefault() Base.show(io::IO, ::NoDefault) = begin print(io, "no_default") end #= none:27 =# Core.@doc " abstract type JLExpr end\n\nAbstract type for Julia syntax type.\n" abstract type JLExpr end #= none:34 =# Core.@doc " mutable struct JLFunction <: JLExpr\n JLFunction(;kw...)\n\nType describes a Julia function declaration expression.\n\n# Fields and Keyword Arguments\n\n$(__DEFAULT_KWARG_DOC__)\nThe only required keyword argument for the constructor\nis `name`, the rest are all optional.\n\n- `head`: optional, function head, can be `:function`, `:(=)` or `:(->)`.\n- `name`: optional, function name, can has type `Nothing`, `Symbol` or `Expr`, default is `nothing`.\n- `args`: optional, function arguments, a list of `Expr` or `Symbol`.\n- `kwargs`: optional, function keyword arguments, a list of `Expr(:kw, name, default)`.\n- `rettype`: optional, the explicit return type of a function,\n can be a `Type`, `Symbol`, `Expr` or just `nothing`, default is `nothing`.\n- `generated`: optional, if this is a generated function.\n- `whereparams`: optional, type variables, can be a list of `Type`,\n `Expr` or `nothing`, default is `nothing`.\n- `body`: optional, function body, an `Expr`, default is `Expr(:block)`.\n- $(__LINENO_DOC__)\n- $(__DEF_DOC__)\n\n# Example\n\nConstruct a function expression\n\n```julia\njulia> JLFunction(;name=:foo, args=[:(x::T)], body= quote 1+1 end, head=:function, whereparams=[:T])\nfunction foo(x::T) where {T}\n #= REPL[25]:1 =# \n 1 + 1 \nend\n```\n\nDecompose a function expression\n\n```julia\njulia> ex = :(function foo(x::T) where {T}\n #= REPL[25]:1 =# \n 1 + 1 \n end)\n:(function foo(x::T) where T\n #= REPL[26]:1 =#\n #= REPL[26]:3 =#\n 1 + 1\n end)\n\njulia> jl = JLFunction(ex)\nfunction foo(x::T) where {T}\n #= REPL[26]:1 =# \n #= REPL[26]:3 =# \n 1 + 1 \nend\n```\n\nGenerate `Expr` from `JLFunction`\n\n```julia\njulia> codegen_ast(jl)\n:(function foo(x::T) where T\n #= REPL[26]:1 =#\n #= REPL[26]:3 =#\n 1 + 1\n end)\n```\n" mutable struct JLFunction <: JLExpr head::Symbol name::Any args::Vector{Any} kwargs::Maybe{Vector{Any}} rettype::Any generated::Bool whereparams::Maybe{Vector{Any}} body::Any line::Maybe{LineNumberNode} doc::Maybe{String} end function JLFunction(; head = :function, name = nothing, args = [], kwargs = nothing, rettype = nothing, generated = false, whereparams = nothing, body = Expr(:block), line = nothing, doc = nothing) head in [:function, :(=), :->] || throw(ArgumentError("function head can only take `:function`, `:(=)` or `:(->)`")) name isa Union{Nothing, Symbol, Expr} || throw(ArgumentError("function name can only be a `Nothing`, `Symbol` or `Expr`, got a $(typeof(name)).")) rettype isa Union{Nothing, Symbol, Expr, Type} || throw(ArgumentError("function rettype can only be a `Type`, `Symbol`, `Expr` or just `nothing`, got a $(typeof(rettype)).")) line isa Maybe{LineNumberNode} || throw(ArgumentError("function line must be a `LineNumberNode` or just `nothing`, got a $(typeof(line)).")) any((x->begin !(x isa Union{Symbol, Expr}) end), args) && throw(ArgumentError("function args can only be a list of `Symbol` or `Expr`, got a $(typeof(args)).")) !(isnothing(whereparams)) && (any((x->begin !(x isa Union{Symbol, Expr}) end), whereparams) && throw(ArgumentError("function whereparams can only be a list of `Symbol` or `Expr`, got a $(typeof(whereparams))."))) !(isnothing(kwargs)) && (any((x->begin !(x isa Union{Symbol, Expr}) end), kwargs) && throw(ArgumentError("function kwargs can only be a list of `Expr(:kw, name, default)` or `Symbol`, got a $(typeof(kwargs))."))) JLFunction(head, name, args, kwargs, rettype, generated, whereparams, body, line, doc) end #= none:144 =# Core.@doc " mutable struct JLField <: JLExpr\n JLField(;kw...)\n\nType describes a Julia field in a Julia struct.\n\n# Fields and Keyword Arguments\n\n$(__DEFAULT_KWARG_DOC__)\nThe only required keyword argument for the constructor\nis `name`, the rest are all optional.\n\n- `name::Symbol`: the name of the field.\n- `type`: the type of the field.\n- `isconst`: if the field is annotated with `const`.\n- $(__LINENO_DOC__)\n- $(__DEF_DOC__)\n" mutable struct JLField <: JLExpr name::Symbol type::Any isconst::Bool doc::Maybe{String} line::Maybe{LineNumberNode} end function JLField(; name, isconst = false, type = Any, doc = nothing, line = nothing) JLField(name, type, isconst, doc, line) end #= none:175 =# Core.@doc " mutable struct JLKwField <: JLExpr\n\nType describes a Julia field that can have a default value in a Julia struct.\n\n JLKwField(;kw...)\n\nCreate a `JLKwField` instance.\n\n# Fields and Keyword Arguments\n\n$(__DEFAULT_KWARG_DOC__)\nThe only required keyword argument for the constructor\nis `name`, the rest are all optional.\n\n- `name::Symbol`: the name of the field.\n- `type`: the type of the field.\n- `isconst`: if the field is annotated with `const`.\n- `default`: default value of the field, default is [`no_default`](@ref).\n- $(__LINENO_DOC__)\n- $(__DEF_DOC__)\n" mutable struct JLKwField <: JLExpr name::Symbol type::Any isconst::Bool doc::Maybe{String} line::Maybe{LineNumberNode} default::Any end function JLKwField(; name, isconst = false, type = Any, doc = nothing, line = nothing, default = no_default) JLKwField(name, type, isconst, doc, line, default) end #= none:211 =# Core.@doc " mutable struct JLStruct <: JLExpr\n\nType describes a Julia struct.\n\n JLStruct(;kw...)\n\nCreate a `JLStruct` instance.\n\n# Available Fields and Keyword Arguments\n\n$(__DEFAULT_KWARG_DOC__)\nThe only required keyword argument for the constructor\nis `name`, the rest are all optional.\n\n- `name::Symbol`: name of the struct, this is the only required keyword argument.\n- `ismutable::Bool`: if the struct definition is mutable.\n- `typevars::Vector{Any}`: type variables of the struct, should be `Symbol` or `Expr`.\n- `supertype`: supertype of the struct definition.\n- `fields::Vector{JLField}`: field definitions of the struct, should be a [`JLField`](@ref).\n- `constructors::Vector{JLFunction}`: constructors definitions of the struct, should be [`JLFunction`](@ref).\n- `line::LineNumberNode`: a `LineNumberNode` to indicate the definition position for error report etc.\n- `doc::String`: documentation string of the struct.\n- `misc`: other things that happens inside the struct body, by definition this will\n just fall through and is equivalent to eval them outside the struct body.\n\n# Example\n\nConstruct a Julia struct.\n\n```julia\njulia> JLStruct(;name=:Foo, typevars=[:T], fields=[JLField(;name=:x, type=Int)])\nstruct Foo{T}\n x::Int64\nend\n```\n\nDecompose a Julia struct expression\n\n```julia\njulia> ex = :(struct Foo{T}\n x::Int64\n end)\n:(struct Foo{T}\n #= REPL[31]:2 =#\n x::Int64\n end)\n\njulia> jl = JLStruct(ex)\nstruct Foo{T}\n #= REPL[31]:2 =#\n x::Int64\nend\n```\n\nGenerate a Julia struct expression\n\n```julia\njulia> codegen_ast(jl)\n:(struct Foo{T}\n #= REPL[31]:2 =#\n x::Int64\n end)\n```\n" mutable struct JLStruct <: JLExpr name::Symbol ismutable::Bool typevars::Vector{Any} supertype::Any fields::Vector{JLField} constructors::Vector{JLFunction} line::Maybe{LineNumberNode} doc::Maybe{String} misc::Any end function JLStruct(; name::Symbol, ismutable::Bool = false, typevars = [], supertype = nothing, fields = JLField[], constructors = JLFunction[], line = nothing, doc = nothing, misc = nothing) JLStruct(name, ismutable, typevars, supertype, fields, constructors, line, doc, misc) end #= none:296 =# Core.@doc " mutable struct JLKwStruct <: JLExpr\n JLKwStruct(;kw...)\n\nType describes a Julia struct that allows keyword definition of defaults.\nThis syntax is similar to [`JLStruct`](@ref) except\nthe the fields are of type [`JLKwField`](@ref).\n\n# Fields and Keyword Arguments\n\n$(__DEFAULT_KWARG_DOC__)\nThe only required keyword argument for the constructor\nis `name`, the rest are all optional.\n\n- `name::Symbol`: name of the struct, this is the only required keyword argument.\n- `typealias::String`: an alias of the [`JLKwStruct`](@ref),\n see also the `@option` macro in [Configurations.jl](https://github.com/Roger-luo/Configurations.jl).\n- `ismutable::Bool`: if the struct definition is mutable.\n- `typevars::Vector{Any}`: type variables of the struct, should be `Symbol` or `Expr`.\n- `supertype`: supertype of the struct definition.\n- `fields::Vector{JLField}`: field definitions of the struct, should be a [`JLField`](@ref).\n- `constructors::Vector{JLFunction}`: constructors definitions of the struct, should be [`JLFunction`](@ref).\n- `line::LineNumberNode`: a `LineNumberNode` to indicate the definition position for error report etc.\n- `doc::String`: documentation string of the struct.\n- `misc`: other things that happens inside the struct body, by definition this will\n just fall through and is equivalent to eval them outside the struct body.\n" mutable struct JLKwStruct <: JLExpr name::Symbol typealias::Maybe{String} ismutable::Bool typevars::Vector{Any} supertype::Any fields::Vector{JLKwField} constructors::Vector{JLFunction} line::Maybe{LineNumberNode} doc::Maybe{String} misc::Any end function JLKwStruct(; name::Symbol, typealias::Maybe{String} = nothing, ismutable::Bool = false, typevars = [], supertype = nothing, fields = JLKwField[], constructors = JLFunction[], line = nothing, doc = nothing, misc = nothing) JLKwStruct(name, typealias, ismutable, typevars, supertype, fields, constructors, line, doc, misc) end #= none:343 =# Core.@doc " JLIfElse <: JLExpr\n JLIfElse(;kw...)\n\n`JLIfElse` describes a Julia `if ... elseif ... else ... end` expression. It allows one to easily construct\nsuch expression by inserting condition and code block via a map.\n\n# Fields and Keyword Arguments\n\n$(__DEFAULT_KWARG_DOC__)\n\n- `conds::Vector{Any}`: expression for the conditions.\n- `stmts::Vector{Any}`: expression for the statements for corresponding condition.\n- `otherwise`: the `else` body.\n\n# Example\n\n### Construct JLIfElse object\n\nOne can construct an `ifelse` as following\n\n```julia\njulia> jl = JLIfElse()\nnothing\n\njulia> jl[:(foo(x))] = :(x = 1 + 1)\n:(x = 1 + 1)\n\njulia> jl[:(goo(x))] = :(y = 1 + 2)\n:(y = 1 + 2)\n\njulia> jl.otherwise = :(error(\"abc\"))\n:(error(\"abc\"))\n\njulia> jl\nif foo(x)\n x = 1 + 1\nelseif goo(x)\n y = 1 + 2\nelse\n error(\"abc\")\nend\n```\n\n### Generate the Julia `Expr` object\n\nto generate the corresponding `Expr` object, one can call [`codegen_ast`](@ref).\n\n```julia\njulia> codegen_ast(jl)\n:(if foo(x)\n x = 1 + 1\n elseif goo(x)\n y = 1 + 2\n else\n error(\"abc\")\n end)\n```\n" mutable struct JLIfElse <: JLExpr conds::Vector{Any} stmts::Vector{Any} otherwise::Any end JLIfElse(; conds = [], stmts = [], otherwise = nothing) = begin JLIfElse(conds, stmts, otherwise) end function Base.getindex(jl::JLIfElse, cond) idx = findfirst(jl.conds) do x cond == x end idx === nothing && error("cannot find condition: $(cond)") return jl.stmts[idx] end function Base.setindex!(jl::JLIfElse, stmt, cond) idx = findfirst(jl.conds) do x x == cond end if idx === nothing push!(jl.conds, cond) push!(jl.stmts, stmt) else jl.stmts[idx] = stmt end return stmt end Base.length(jl::JLIfElse) = begin length(jl.conds) end function Base.iterate(jl::JLIfElse, st = 1) st > length(jl) && return nothing (jl.conds[st] => jl.stmts[st], st + 1) end #= none:437 =# Core.@doc " JLFor <: JLExpr\n\nSyntax type for Julia for loop.\n" struct JLFor <: JLExpr vars::Vector{Any} iterators::Vector{Any} kernel::Any end #= none:448 =# Core.@doc " JLFor(;vars=[], iterators=[], kernel=nothing)\n\nGenerate a `JLFor` object.\n\n# Kwargs\n\n- `vars`: loop variables.\n- `iterators`: loop iterators.\n- `kernel`: loop kernel.\n" JLFor(; vars = [], iterators = [], kernel = nothing) = begin JLFor(vars, iterators, kernel) end #= none:461 =# Core.@doc " JLFor(kernel, iterators::Vector)\n\nConvenient constructor for creating multiple loop expression\nfrom a list of iterators.\n\n# Example\n\n```julia\njulia> JLFor([:it1, :it2, :it3]) do i, j, k\n :(kernel_function_call(\$i, \$j, \$k))\nend\nfor ##i#291 = it1, ##i#292 = it2, ##i#293 = it3\n kernel_function_call(##i#291, ##i#292, ##i#293)\nend\n```\n" function JLFor(kernel, iterators::Vector) vars = map((_->begin gensym(:i) end), iterators) return JLFor(vars, iterators, kernel(vars...)) end 9/opt/julia/packages/ExproniconLite/yfi6A/src/transform.jlU #= none:2 =# Core.@doc " eval_interp(m::Module, ex)\n\nevaluate the interpolation operator in `ex` inside given module `m`.\n" function eval_interp(m::Module, ex) ex isa Expr || return ex if ex.head === :$ x = ex.args[1] if x isa Symbol && isdefined(m, x) return Base.eval(m, x) else return ex end end return Expr(ex.head, map((x->begin eval_interp(m, x) end), ex.args)...) end #= none:20 =# Core.@doc " eval_literal(m::Module, ex)\n\nEvaluate the literal values and insert them back to the expression.\nThe literal value can be checked via [`is_literal`](@ref).\n" function eval_literal(m::Module, ex) ex isa Expr || return ex if ex.head === :call && all(is_literal, ex.args[2:end]) return Base.eval(m, ex) end return Expr(ex.head, map((x->begin eval_literal(m, x) end), ex.args)...) end #= none:34 =# Core.@doc " substitute(ex::Expr, old=>new)\n\nSubstitute the old symbol `old` with `new`.\n" function substitute(ex::Expr, replace::Pair) (old, new) = replace sub = Substitute() do x x == old end return sub((_->begin new end), ex) end #= none:47 =# Core.@doc " name_only(ex)\n\nRemove everything else leaving just names, currently supports\nfunction calls, type with type variables, subtype operator `<:`\nand type annotation `::`.\n\n# Example\n\n```julia\njulia> using Expronicon\n\njulia> name_only(:(sin(2)))\n:sin\n\njulia> name_only(:(Foo{Int}))\n:Foo\n\njulia> name_only(:(Foo{Int} <: Real))\n:Foo\n\njulia> name_only(:(x::Int))\n:x\n```\n" function name_only(#= none:72 =# @nospecialize(ex)) ex isa Symbol && return ex ex isa QuoteNode && return ex.value ex isa Expr || error("unsupported expression $(ex)") ex.head in [:call, :curly, :<:, :(::), :where, :function, :kw, :(=), :->] && return name_only(ex.args[1]) ex.head === :. && return name_only(ex.args[2]) ex.head === :... && return name_only(ex.args[1]) ex.head === :module && return name_only(ex.args[2]) error("unsupported expression $(ex)") end #= none:83 =# Core.@doc " annotations_only(ex)\n\nReturn type annotations only. See also [`name_only`](@ref).\n" function annotations_only(#= none:88 =# @nospecialize(ex)) ex isa Symbol && return :(()) ex isa Expr || error("unsupported expression $(ex)") Meta.isexpr(ex, :...) && return annotations_only(ex.args[1]) Meta.isexpr(ex, :(::)) && return ex.args[end] error("unsupported expression $(ex)") end #= none:96 =# Core.@doc " rm_lineinfo(ex)\n\nRemove `LineNumberNode` in a given expression.\n\n!!! tips\n\n the `LineNumberNode` inside macro calls won't be removed since\n the `macrocall` expression requires a `LineNumberNode`. See also\n [issues/#9](https://github.com/Roger-luo/Expronicon.jl/issues/9).\n" function rm_lineinfo(ex) let begin var"##cache#1362" = nothing end var"##return#1359" = nothing var"##1361" = ex if var"##1361" isa Expr if begin if var"##cache#1362" === nothing var"##cache#1362" = Some(((var"##1361").head, (var"##1361").args)) end var"##1363" = (var"##cache#1362").value var"##1363" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1363"[1] == :macrocall && (begin var"##1364" = var"##1363"[2] var"##1364" isa AbstractArray end && ((ndims(var"##1364") === 1 && length(var"##1364") >= 2) && begin var"##1365" = var"##1364"[1] var"##1366" = var"##1364"[2] var"##1367" = SubArray(var"##1364", (3:length(var"##1364"),)) true end))) var"##return#1359" = let line = var"##1366", name = var"##1365", args = var"##1367" Expr(:macrocall, name, line, map(rm_lineinfo, args)...) end $(Expr(:symbolicgoto, Symbol("####final#1360#1372"))) end if begin var"##1368" = (var"##cache#1362").value var"##1368" isa (Tuple{var1, var2} where {var2 <: AbstractArray, var1}) end && (begin var"##1369" = var"##1368"[1] var"##1370" = var"##1368"[2] var"##1370" isa AbstractArray end && ((ndims(var"##1370") === 1 && length(var"##1370") >= 0) && begin var"##1371" = SubArray(var"##1370", (1:length(var"##1370"),)) true end)) var"##return#1359" = let args = var"##1371", head = var"##1369" Expr(head, map(rm_lineinfo, filter((x->begin !(x isa LineNumberNode) end), args))...) end $(Expr(:symbolicgoto, Symbol("####final#1360#1372"))) end end begin var"##return#1359" = let ex end $(Expr(:symbolicgoto, Symbol("####final#1360#1372"))) end error("matching non-exhaustive, at #= none:108 =#") $(Expr(:symboliclabel, Symbol("####final#1360#1372"))) var"##return#1359" end end #= none:115 =# Base.@kwdef struct PrettifyOptions rm_lineinfo::Bool = true flatten_blocks::Bool = true rm_nothing::Bool = true preserve_last_nothing::Bool = false rm_single_block::Bool = true alias_gensym::Bool = true renumber_gensym::Bool = true end #= none:125 =# Core.@doc " prettify(ex; kw...)\n\nPrettify given expression, remove all `LineNumberNode` and\nextra code blocks.\n\n# Options (Kwargs)\n\nAll the options are `true` by default.\n\n- `rm_lineinfo`: remove `LineNumberNode`.\n- `flatten_blocks`: flatten `begin ... end` code blocks.\n- `rm_nothing`: remove `nothing` in the `begin ... end`.\n- `preserve_last_nothing`: preserve the last `nothing` in the `begin ... end`.\n- `rm_single_block`: remove single `begin ... end`.\n- `alias_gensym`: replace `###` with `_`.\n- `renumber_gensym`: renumber the gensym id.\n\n!!! tips\n\n the `LineNumberNode` inside macro calls won't be removed since\n the `macrocall` expression requires a `LineNumberNode`. See also\n [issues/#9](https://github.com/Roger-luo/Expronicon.jl/issues/9).\n" function prettify(ex; kw...) prettify(ex, PrettifyOptions(; kw...)) end function prettify(ex, options::PrettifyOptions) ex isa Expr || return ex ex = if options.renumber_gensym renumber_gensym(ex) else ex end ex = if options.alias_gensym alias_gensym(ex) else ex end for _ = 1:10 curr = prettify_pass(ex, options) ex == curr && break ex = curr end return ex end function prettify_pass(ex, options::PrettifyOptions) ex = if options.rm_lineinfo rm_lineinfo(ex) else ex end ex = if options.flatten_blocks flatten_blocks(ex) else ex end ex = if options.rm_nothing rm_nothing(ex; options.preserve_last_nothing) else ex end ex = if options.rm_single_block rm_single_block(ex) else ex end return ex end #= none:173 =# Core.@doc " flatten_blocks(ex)\n\nRemove hierachical expression blocks.\n" function flatten_blocks(ex) ex isa Expr || return ex ex.head === :block || return Expr(ex.head, map(_flatten_blocks, ex.args)...) has_block = any(ex.args) do x x isa Expr && x.head === :block end if has_block return flatten_blocks(_flatten_blocks(ex)) end return Expr(ex.head, map(flatten_blocks, ex.args)...) end function _flatten_blocks(ex) ex isa Expr || return ex ex.head === :block || return Expr(ex.head, map(flatten_blocks, ex.args)...) args = [] for stmt = ex.args if stmt isa Expr && stmt.head === :block for each = stmt.args push!(args, flatten_blocks(each)) end else push!(args, flatten_blocks(stmt)) end end return Expr(:block, args...) end #= none:208 =# Core.@doc " rm_nothing(ex)\n\nRemove the constant value `nothing` in given expression `ex`.\n\n# Keyword Arguments\n\n- `preserve_last_nothing`: if `true`, the last `nothing`\n will be preserved.\n" function rm_nothing(ex; preserve_last_nothing::Bool = false) let begin var"##cache#1376" = nothing end var"##return#1373" = nothing var"##1375" = ex if var"##1375" isa Expr if begin if var"##cache#1376" === nothing var"##cache#1376" = Some(((var"##1375").head, (var"##1375").args)) end var"##1377" = (var"##cache#1376").value var"##1377" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1377"[1] == :block && (begin var"##1378" = var"##1377"[2] var"##1378" isa AbstractArray end && ((ndims(var"##1378") === 1 && length(var"##1378") >= 0) && begin var"##1379" = SubArray(var"##1378", (1:length(var"##1378"),)) true end))) var"##return#1373" = let args = var"##1379" if preserve_last_nothing && (!(isempty(args)) && isnothing(last(args))) Expr(:block, filter((x->begin x !== nothing end), args)..., nothing) else Expr(:block, filter((x->begin x !== nothing end), args)...) end end $(Expr(:symbolicgoto, Symbol("####final#1374#1384"))) end if begin var"##1380" = (var"##cache#1376").value var"##1380" isa (Tuple{var1, var2} where {var2 <: AbstractArray, var1}) end && (begin var"##1381" = var"##1380"[1] var"##1382" = var"##1380"[2] var"##1382" isa AbstractArray end && ((ndims(var"##1382") === 1 && length(var"##1382") >= 0) && begin var"##1383" = SubArray(var"##1382", (1:length(var"##1382"),)) true end)) var"##return#1373" = let args = var"##1383", head = var"##1381" Expr(head, map(rm_nothing, args)...) end $(Expr(:symbolicgoto, Symbol("####final#1374#1384"))) end end begin var"##return#1373" = let ex end $(Expr(:symbolicgoto, Symbol("####final#1374#1384"))) end error("matching non-exhaustive, at #= none:219 =#") $(Expr(:symboliclabel, Symbol("####final#1374#1384"))) var"##return#1373" end end #= none:232 =# Core.@doc " canonicalize_lambda_head(ex)\n\nCanonicalize the `Expr(:function, Expr(:block, x, Expr(:(=), key, default)), body)` to\n\n```julia\nExpr(:function, Expr(:tuple, Expr(:parameters, Expr(:kw, key, default)), x), body)\n```\n" function canonicalize_lambda_head(ex) let begin var"##cache#1388" = nothing end var"##return#1385" = nothing var"##1387" = ex if var"##1387" isa Expr if begin if var"##cache#1388" === nothing var"##cache#1388" = Some(((var"##1387").head, (var"##1387").args)) end var"##1389" = (var"##cache#1388").value var"##1389" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1389"[1] == :function && (begin var"##1390" = var"##1389"[2] var"##1390" isa AbstractArray end && (length(var"##1390") === 2 && (begin begin var"##cache#1392" = nothing end var"##1391" = var"##1390"[1] var"##1391" isa Expr end && (begin if var"##cache#1392" === nothing var"##cache#1392" = Some(((var"##1391").head, (var"##1391").args)) end var"##1393" = (var"##cache#1392").value var"##1393" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1393"[1] == :block && (begin var"##1394" = var"##1393"[2] var"##1394" isa AbstractArray end && (length(var"##1394") === 2 && begin var"##1395" = var"##1394"[1] var"##1396" = var"##1394"[2] var"##1397" = var"##1390"[2] true end)))))))) var"##return#1385" = let y = var"##1396", body = var"##1397", x = var"##1395" Expr(:function, Expr(:tuple, Expr(:parameters, y), x), body) end $(Expr(:symbolicgoto, Symbol("####final#1386#1441"))) end if begin var"##1398" = (var"##cache#1388").value var"##1398" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1398"[1] == :function && (begin var"##1399" = var"##1398"[2] var"##1399" isa AbstractArray end && (length(var"##1399") === 2 && (begin begin var"##cache#1401" = nothing end var"##1400" = var"##1399"[1] var"##1400" isa Expr end && (begin if var"##cache#1401" === nothing var"##cache#1401" = Some(((var"##1400").head, (var"##1400").args)) end var"##1402" = (var"##cache#1401").value var"##1402" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1402"[1] == :block && (begin var"##1403" = var"##1402"[2] var"##1403" isa AbstractArray end && (length(var"##1403") === 3 && (begin var"##1404" = var"##1403"[1] var"##1405" = var"##1403"[2] var"##1405" isa LineNumberNode end && begin var"##1406" = var"##1403"[3] var"##1407" = var"##1399"[2] true end))))))))) var"##return#1385" = let y = var"##1406", body = var"##1407", x = var"##1404" Expr(:function, Expr(:tuple, Expr(:parameters, y), x), body) end $(Expr(:symbolicgoto, Symbol("####final#1386#1441"))) end if begin var"##1408" = (var"##cache#1388").value var"##1408" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1408"[1] == :function && (begin var"##1409" = var"##1408"[2] var"##1409" isa AbstractArray end && (length(var"##1409") === 2 && (begin begin var"##cache#1411" = nothing end var"##1410" = var"##1409"[1] var"##1410" isa Expr end && (begin if var"##cache#1411" === nothing var"##cache#1411" = Some(((var"##1410").head, (var"##1410").args)) end var"##1412" = (var"##cache#1411").value var"##1412" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1412"[1] == :block && (begin var"##1413" = var"##1412"[2] var"##1413" isa AbstractArray end && (length(var"##1413") === 2 && (begin var"##1414" = var"##1413"[1] begin var"##cache#1416" = nothing end var"##1415" = var"##1413"[2] var"##1415" isa Expr end && (begin if var"##cache#1416" === nothing var"##cache#1416" = Some(((var"##1415").head, (var"##1415").args)) end var"##1417" = (var"##cache#1416").value var"##1417" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1417"[1] == :(=) && (begin var"##1418" = var"##1417"[2] var"##1418" isa AbstractArray end && (length(var"##1418") === 2 && begin var"##1419" = var"##1418"[1] var"##1420" = var"##1418"[2] var"##1421" = var"##1409"[2] true end))))))))))))) var"##return#1385" = let default = var"##1420", key = var"##1419", body = var"##1421", x = var"##1414" Expr(:function, Expr(:tuple, Expr(:parameters, Expr(:kw, key, default)), x), body) end $(Expr(:symbolicgoto, Symbol("####final#1386#1441"))) end if begin var"##1422" = (var"##cache#1388").value var"##1422" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1422"[1] == :function && (begin var"##1423" = var"##1422"[2] var"##1423" isa AbstractArray end && (length(var"##1423") === 2 && (begin begin var"##cache#1425" = nothing end var"##1424" = var"##1423"[1] var"##1424" isa Expr end && (begin if var"##cache#1425" === nothing var"##cache#1425" = Some(((var"##1424").head, (var"##1424").args)) end var"##1426" = (var"##cache#1425").value var"##1426" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1426"[1] == :block && (begin var"##1427" = var"##1426"[2] var"##1427" isa AbstractArray end && (length(var"##1427") === 3 && (begin var"##1428" = var"##1427"[1] var"##1429" = var"##1427"[2] var"##1429" isa LineNumberNode end && (begin begin var"##cache#1431" = nothing end var"##1430" = var"##1427"[3] var"##1430" isa Expr end && (begin if var"##cache#1431" === nothing var"##cache#1431" = Some(((var"##1430").head, (var"##1430").args)) end var"##1432" = (var"##cache#1431").value var"##1432" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1432"[1] == :(=) && (begin var"##1433" = var"##1432"[2] var"##1433" isa AbstractArray end && (length(var"##1433") === 2 && begin var"##1434" = var"##1433"[1] var"##1435" = var"##1433"[2] var"##1436" = var"##1423"[2] true end)))))))))))))) var"##return#1385" = let default = var"##1435", key = var"##1434", body = var"##1436", x = var"##1428" Expr(:function, Expr(:tuple, Expr(:parameters, Expr(:kw, key, default)), x), body) end $(Expr(:symbolicgoto, Symbol("####final#1386#1441"))) end if begin var"##1437" = (var"##cache#1388").value var"##1437" isa (Tuple{var1, var2} where {var2 <: AbstractArray, var1}) end && (begin var"##1438" = var"##1437"[1] var"##1439" = var"##1437"[2] var"##1439" isa AbstractArray end && ((ndims(var"##1439") === 1 && length(var"##1439") >= 0) && begin var"##1440" = SubArray(var"##1439", (1:length(var"##1439"),)) true end)) var"##return#1385" = let args = var"##1440", head = var"##1438" Expr(head, map(canonicalize_lambda_head, args)...) end $(Expr(:symbolicgoto, Symbol("####final#1386#1441"))) end end begin var"##return#1385" = let ex end $(Expr(:symbolicgoto, Symbol("####final#1386#1441"))) end error("matching non-exhaustive, at #= none:242 =#") $(Expr(:symboliclabel, Symbol("####final#1386#1441"))) var"##return#1385" end end function rm_single_block(ex) let begin var"##cache#1445" = nothing end var"##return#1442" = nothing var"##1444" = ex if var"##1444" isa Expr if begin if var"##cache#1445" === nothing var"##cache#1445" = Some(((var"##1444").head, (var"##1444").args)) end var"##1446" = (var"##cache#1445").value var"##1446" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1446"[1] == :(=) && (begin var"##1447" = var"##1446"[2] var"##1447" isa AbstractArray end && (ndims(var"##1447") === 1 && length(var"##1447") >= 0))) var"##return#1442" = let ex end $(Expr(:symbolicgoto, Symbol("####final#1443#1510"))) end if begin var"##1448" = (var"##cache#1445").value var"##1448" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1448"[1] == :-> && (begin var"##1449" = var"##1448"[2] var"##1449" isa AbstractArray end && (ndims(var"##1449") === 1 && length(var"##1449") >= 0))) var"##return#1442" = let ex end $(Expr(:symbolicgoto, Symbol("####final#1443#1510"))) end if begin var"##1450" = (var"##cache#1445").value var"##1450" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1450"[1] == :quote && (begin var"##1451" = var"##1450"[2] var"##1451" isa AbstractArray end && ((ndims(var"##1451") === 1 && length(var"##1451") >= 0) && begin var"##1452" = SubArray(var"##1451", (1:length(var"##1451"),)) true end))) var"##return#1442" = let xs = var"##1452" ex end $(Expr(:symbolicgoto, Symbol("####final#1443#1510"))) end if begin var"##1453" = (var"##cache#1445").value var"##1453" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1453"[1] == :block && (begin var"##1454" = var"##1453"[2] var"##1454" isa AbstractArray end && (length(var"##1454") === 1 && (begin begin var"##cache#1456" = nothing end var"##1455" = var"##1454"[1] var"##1455" isa Expr end && (begin if var"##cache#1456" === nothing var"##cache#1456" = Some(((var"##1455").head, (var"##1455").args)) end var"##1457" = (var"##cache#1456").value var"##1457" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1457"[1] == :quote && (begin var"##1458" = var"##1457"[2] var"##1458" isa AbstractArray end && ((ndims(var"##1458") === 1 && length(var"##1458") >= 0) && begin var"##1459" = SubArray(var"##1458", (1:length(var"##1458"),)) true end)))))))) var"##return#1442" = let xs = var"##1459" ex end $(Expr(:symbolicgoto, Symbol("####final#1443#1510"))) end if begin var"##1460" = (var"##cache#1445").value var"##1460" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1460"[1] == :try && (begin var"##1461" = var"##1460"[2] var"##1461" isa AbstractArray end && (length(var"##1461") === 4 && (begin begin var"##cache#1463" = nothing end var"##1462" = var"##1461"[1] var"##1462" isa Expr end && (begin if var"##cache#1463" === nothing var"##cache#1463" = Some(((var"##1462").head, (var"##1462").args)) end var"##1464" = (var"##cache#1463").value var"##1464" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1464"[1] == :block && (begin var"##1465" = var"##1464"[2] var"##1465" isa AbstractArray end && ((ndims(var"##1465") === 1 && length(var"##1465") >= 0) && (begin var"##1466" = SubArray(var"##1465", (1:length(var"##1465"),)) var"##1461"[2] === false end && (var"##1461"[3] === false && (begin begin var"##cache#1468" = nothing end var"##1467" = var"##1461"[4] var"##1467" isa Expr end && (begin if var"##cache#1468" === nothing var"##cache#1468" = Some(((var"##1467").head, (var"##1467").args)) end var"##1469" = (var"##cache#1468").value var"##1469" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1469"[1] == :block && (begin var"##1470" = var"##1469"[2] var"##1470" isa AbstractArray end && ((ndims(var"##1470") === 1 && length(var"##1470") >= 0) && begin var"##1471" = SubArray(var"##1470", (1:length(var"##1470"),)) true end))))))))))))))) var"##return#1442" = let try_stmts = var"##1466", finally_stmts = var"##1471" Expr(:try, Expr(:block, rm_single_block.(try_stmts)...), false, false, Expr(:block, rm_single_block.(finally_stmts)...)) end $(Expr(:symbolicgoto, Symbol("####final#1443#1510"))) end if begin var"##1472" = (var"##cache#1445").value var"##1472" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1472"[1] == :try && (begin var"##1473" = var"##1472"[2] var"##1473" isa AbstractArray end && (length(var"##1473") === 3 && (begin begin var"##cache#1475" = nothing end var"##1474" = var"##1473"[1] var"##1474" isa Expr end && (begin if var"##cache#1475" === nothing var"##cache#1475" = Some(((var"##1474").head, (var"##1474").args)) end var"##1476" = (var"##cache#1475").value var"##1476" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1476"[1] == :block && (begin var"##1477" = var"##1476"[2] var"##1477" isa AbstractArray end && ((ndims(var"##1477") === 1 && length(var"##1477") >= 0) && (begin var"##1478" = SubArray(var"##1477", (1:length(var"##1477"),)) var"##1479" = var"##1473"[2] begin var"##cache#1481" = nothing end var"##1480" = var"##1473"[3] var"##1480" isa Expr end && (begin if var"##cache#1481" === nothing var"##cache#1481" = Some(((var"##1480").head, (var"##1480").args)) end var"##1482" = (var"##cache#1481").value var"##1482" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1482"[1] == :block && (begin var"##1483" = var"##1482"[2] var"##1483" isa AbstractArray end && ((ndims(var"##1483") === 1 && length(var"##1483") >= 0) && begin var"##1484" = SubArray(var"##1483", (1:length(var"##1483"),)) true end))))))))))))) var"##return#1442" = let try_stmts = var"##1478", catch_stmts = var"##1484", catch_var = var"##1479" Expr(:try, Expr(:block, rm_single_block.(try_stmts)...), catch_var, Expr(:block, rm_single_block.(catch_stmts)...)) end $(Expr(:symbolicgoto, Symbol("####final#1443#1510"))) end if begin var"##1485" = (var"##cache#1445").value var"##1485" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1485"[1] == :try && (begin var"##1486" = var"##1485"[2] var"##1486" isa AbstractArray end && (length(var"##1486") === 4 && (begin begin var"##cache#1488" = nothing end var"##1487" = var"##1486"[1] var"##1487" isa Expr end && (begin if var"##cache#1488" === nothing var"##cache#1488" = Some(((var"##1487").head, (var"##1487").args)) end var"##1489" = (var"##cache#1488").value var"##1489" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1489"[1] == :block && (begin var"##1490" = var"##1489"[2] var"##1490" isa AbstractArray end && ((ndims(var"##1490") === 1 && length(var"##1490") >= 0) && (begin var"##1491" = SubArray(var"##1490", (1:length(var"##1490"),)) var"##1492" = var"##1486"[2] begin var"##cache#1494" = nothing end var"##1493" = var"##1486"[3] var"##1493" isa Expr end && (begin if var"##cache#1494" === nothing var"##cache#1494" = Some(((var"##1493").head, (var"##1493").args)) end var"##1495" = (var"##cache#1494").value var"##1495" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1495"[1] == :block && (begin var"##1496" = var"##1495"[2] var"##1496" isa AbstractArray end && ((ndims(var"##1496") === 1 && length(var"##1496") >= 0) && (begin var"##1497" = SubArray(var"##1496", (1:length(var"##1496"),)) begin var"##cache#1499" = nothing end var"##1498" = var"##1486"[4] var"##1498" isa Expr end && (begin if var"##cache#1499" === nothing var"##cache#1499" = Some(((var"##1498").head, (var"##1498").args)) end var"##1500" = (var"##cache#1499").value var"##1500" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1500"[1] == :block && (begin var"##1501" = var"##1500"[2] var"##1501" isa AbstractArray end && ((ndims(var"##1501") === 1 && length(var"##1501") >= 0) && begin var"##1502" = SubArray(var"##1501", (1:length(var"##1501"),)) true end)))))))))))))))))) var"##return#1442" = let try_stmts = var"##1491", catch_stmts = var"##1497", catch_var = var"##1492", finally_stmts = var"##1502" Expr(:try, Expr(:block, rm_single_block.(try_stmts)...), catch_var, Expr(:block, rm_single_block.(catch_stmts)...), Expr(:block, rm_single_block.(finally_stmts)...)) end $(Expr(:symbolicgoto, Symbol("####final#1443#1510"))) end if begin var"##1503" = (var"##cache#1445").value var"##1503" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1503"[1] == :block && (begin var"##1504" = var"##1503"[2] var"##1504" isa AbstractArray end && (length(var"##1504") === 1 && begin var"##1505" = var"##1504"[1] true end))) var"##return#1442" = let stmt = var"##1505" stmt end $(Expr(:symbolicgoto, Symbol("####final#1443#1510"))) end if begin var"##1506" = (var"##cache#1445").value var"##1506" isa (Tuple{var1, var2} where {var2 <: AbstractArray, var1}) end && (begin var"##1507" = var"##1506"[1] var"##1508" = var"##1506"[2] var"##1508" isa AbstractArray end && ((ndims(var"##1508") === 1 && length(var"##1508") >= 0) && begin var"##1509" = SubArray(var"##1508", (1:length(var"##1508"),)) true end)) var"##return#1442" = let args = var"##1509", head = var"##1507" Expr(head, map(rm_single_block, args)...) end $(Expr(:symbolicgoto, Symbol("####final#1443#1510"))) end end begin var"##return#1442" = let ex end $(Expr(:symbolicgoto, Symbol("####final#1443#1510"))) end error("matching non-exhaustive, at #= none:258 =#") $(Expr(:symboliclabel, Symbol("####final#1443#1510"))) var"##return#1442" end end #= none:286 =# Core.@doc " rm_annotations(x)\n\nRemove type annotation of given expression.\n" function rm_annotations(x) x isa Expr || return x if x.head == :(::) if length(x.args) == 1 return gensym("::$(x.args[1])") else return x.args[1] end elseif x.head in [:(=), :kw] return rm_annotations(x.args[1]) else return Expr(x.head, map(rm_annotations, x.args)...) end end #= none:306 =# Core.@doc " alias_gensym(ex)\n\nReplace gensym with `_`.\n\n!!! note\n Borrowed from [MacroTools](https://github.com/FluxML/MacroTools.jl).\n" alias_gensym(ex) = begin alias_gensym!(Dict{Symbol, Symbol}(), Dict{Symbol, Int}(), ex) end function alias_gensym!(d::Dict{Symbol, Symbol}, count::Dict{Symbol, Int}, ex) if is_gensym(ex) haskey(d, ex) && return d[ex] name = Symbol(gensym_name(ex)) id = get(count, name, 0) + 1 d[ex] = Symbol(name, :_, id) count[name] = id return d[ex] end ex isa Expr || return ex args = map(ex.args) do x alias_gensym!(d, count, x) end return Expr(ex.head, args...) end #= none:334 =# Core.@doc " renumber_gensym(ex)\n\nRe-number gensym with counter from this expression.\nProduce a deterministic gensym name for testing etc.\nSee also: [`alias_gensym`](@ref)\n" renumber_gensym(ex) = begin renumber_gensym!(Dict{Symbol, Symbol}(), Dict{Symbol, Int}(), ex) end function renumber_gensym!(d::Dict{Symbol, Symbol}, count::Dict{Symbol, Int}, ex) function renumber(head, m) name = Symbol(m.captures[1]) id = (count[name] = get(count, name, 0) + 1) return d[ex] = Symbol(head, name, "#", id) end if is_gensym(ex) haskey(d, ex) && return d[ex] gensym_str = String(ex) m = Base.match(r"##(.+)#\d+", gensym_str) m === nothing || return renumber("##", m) m = Base.match(r"#\d+#(.+)", gensym_str) m === nothing || return renumber("#", m) end ex isa Expr || return ex args = map(ex.args) do x renumber_gensym!(d, count, x) end return Expr(ex.head, args...) end #= none:368 =# Core.@doc " expr_map(f, c...)\n\nSimilar to `Base.map`, but expects `f` to return an expression,\nand will concanate these expression as a `Expr(:block, ...)`\nexpression.\n\n# Example\n\n```jldoctest\njulia> expr_map(1:10, 2:11) do i,j\n :(1 + \$i + \$j)\n end\nquote\n 1 + 1 + 2\n 1 + 2 + 3\n 1 + 3 + 4\n 1 + 4 + 5\n 1 + 5 + 6\n 1 + 6 + 7\n 1 + 7 + 8\n 1 + 8 + 9\n 1 + 9 + 10\n 1 + 10 + 11\nend\n```\n" function expr_map(f, c...) ex = Expr(:block) for args = zip(c...) push!(ex.args, f(args...)) end return ex end #= none:403 =# Core.@doc " nexprs(f, n::Int)\n\nCreate `n` similar expressions by evaluating `f`.\n\n# Example\n\n```jldoctest\njulia> nexprs(5) do k\n :(1 + \$k)\n end\nquote\n 1 + 1\n 1 + 2\n 1 + 3\n 1 + 4\n 1 + 5\nend\n```\n" nexprs(f, k::Int) = begin expr_map(f, 1:k) end #= none:425 =# Core.@doc " Substitute(condition) -> substitute(f(expr), expr)\n\nReturns a function that substitutes `expr` with\n`f(expr)` if `condition(expr)` is true. Applied\nrecursively to all sub-expressions.\n\n# Example\n\n```jldoctest\njulia> sub = Substitute() do expr\n expr isa Symbol && expr in [:x] && return true\n return false\n end;\n\njulia> sub(_->1, :(x + y))\n:(1 + y)\n```\n" struct Substitute condition end (sub::Substitute)(f) = begin Base.Fix1(sub, f) end function (sub::Substitute)(f, expr) if sub.condition(expr) return f(expr) elseif expr isa Expr return Expr(expr.head, map(sub(f), expr.args)...) else return expr end end A/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/analysis.jl __include_generated__("exception.jl") __include_generated__("check.jl") __include_generated__("cons.jl") __include_generated__("guess.jl") __include_generated__("reflection.jl") __include_generated__("split.jl") __include_generated__("compare.jl") B/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/exception.jl struct SyntaxError <: Exception msg::AbstractString source::Union{Nothing, LineNumberNode} end SyntaxError(msg::AbstractString; source = nothing) = begin SyntaxError(msg, source) end function Base.showerror(io::IO, err::SyntaxError) print(io, "SyntaxError: ", err.msg, " at ", err.source) end struct AnalysisError <: Exception expect::String got end anlys_error(expect, got) = begin throw(AnalysisError(expect, got)) end function Base.showerror(io::IO, e::AnalysisError) print(io, "expect ", e.expect, " expression, got ", e.got, ".") end struct ExprNotEqual <: Exception lhs rhs end function Base.showerror(io::IO, err::ExprNotEqual) printstyled(io, "expression not equal due to:"; color = :red) println(io) print(io, " lhs: ") show(io, err.lhs) print(io) err.lhs isa EmptyLine || printstyled(io, "::", typeof(err.lhs); color = :light_black) println(io) print(io, " rhs: ") show(io, err.rhs) printstyled(io, "::", typeof(err.rhs); color = :light_black) println(io) end >/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/check.jlq #= none:1 =# Core.@doc " is_valid_typevar(typevar)\n\nCheck if the given typevar is a valid typevar.\n\n!!! note\n This function is based on [this discourse post](https://discourse.julialang.org/t/what-are-valid-type-parameters/471).\n" function is_valid_typevar(typevar) let true var"##return#225" = nothing var"##227" = typevar if var"##227" isa TypeVar begin var"##return#225" = let true end $(Expr(:symbolicgoto, Symbol("####final#226#228"))) end end if var"##227" isa QuoteNode begin var"##return#225" = let true end $(Expr(:symbolicgoto, Symbol("####final#226#228"))) end end if var"##227" isa Type begin var"##return#225" = let true end $(Expr(:symbolicgoto, Symbol("####final#226#228"))) end end if isbitstype(typeof(typevar)) var"##return#225" = let true end $(Expr(:symbolicgoto, Symbol("####final#226#228"))) end if var"##227" isa Tuple var"##return#225" = let all((x->begin x isa Symbol || isbitstype(typeof(x)) end), typevar) end $(Expr(:symbolicgoto, Symbol("####final#226#228"))) end begin var"##return#225" = let false end $(Expr(:symbolicgoto, Symbol("####final#226#228"))) end error("matching non-exhaustive, at #= none:10 =#") $(Expr(:symboliclabel, Symbol("####final#226#228"))) var"##return#225" end end #= none:20 =# Core.@doc " is_literal(x)\n\nCheck if `x` is a literal value.\n" function is_literal(x) !(x isa Expr || (x isa Symbol || x isa GlobalRef)) end #= none:29 =# Core.@doc " is_tuple(ex)\n\nCheck if `ex` is a tuple expression, i.e. `:((a,b,c))`\n" is_tuple(x) = begin Meta.isexpr(x, :tuple) end #= none:36 =# Core.@doc " is_splat(ex)\n\nCheck if `ex` is a splat expression, i.e. `:(f(x)...)`\n" is_splat(x) = begin Meta.isexpr(x, :...) end #= none:43 =# Core.@doc " is_gensym(s)\n\nCheck if `s` is generated by `gensym`.\n\n!!! note\n Borrowed from [MacroTools](https://github.com/FluxML/MacroTools.jl).\n" is_gensym(s::Symbol) = begin occursin("#", string(s)) end is_gensym(s) = begin false end #= none:54 =# Core.@doc " support_default(f)\n\nCheck if field type `f` supports default value.\n" support_default(f) = begin false end support_default(f::JLKwField) = begin true end #= none:62 =# Core.@doc " has_symbol(ex, name::Symbol)\n\nCheck if `ex` contains symbol `name`.\n" function has_symbol(#= none:67 =# @nospecialize(ex), name::Symbol) ex isa Symbol && return ex === name ex isa Expr || return false return any((x->begin has_symbol(x, name) end), ex.args) end #= none:73 =# Core.@doc " has_kwfn_constructor(def[, name = struct_name_plain(def)])\n\nCheck if the struct definition contains keyword function constructor of `name`.\nThe constructor name to check by default is the plain constructor which does\nnot infer any type variables and requires user to input all type variables.\nSee also [`struct_name_plain`](@ref).\n" function has_kwfn_constructor(def, name = struct_name_plain(def)) any(def.constructors) do fn::JLFunction isempty(fn.args) && fn.name == name end end #= none:87 =# Core.@doc " has_plain_constructor(def, name = struct_name_plain(def))\n\nCheck if the struct definition contains the plain constructor of `name`.\nBy default the name is the inferable name [`struct_name_plain`](@ref).\n\n# Example\n\n```julia\ndef = @expr JLKwStruct struct Foo{T, N}\n x::Int\n y::N\n\n Foo{T, N}(x, y) where {T, N} = new{T, N}(x, y)\nend\n\nhas_plain_constructor(def) # true\n\ndef = @expr JLKwStruct struct Foo{T, N}\n x::T\n y::N\n\n Foo(x, y) = new{typeof(x), typeof(y)}(x, y)\nend\n\nhas_plain_constructor(def) # false\n```\n\nthe arguments must have no type annotations.\n\n```julia\ndef = @expr JLKwStruct struct Foo{T, N}\n x::T\n y::N\n\n Foo{T, N}(x::T, y::N) where {T, N} = new{T, N}(x, y)\nend\n\nhas_plain_constructor(def) # false\n```\n" function has_plain_constructor(def, name = struct_name_plain(def)) any(def.constructors) do fn::JLFunction fn.name == name || return false fn.kwargs === nothing || return false length(def.fields) == length(fn.args) || return false for (f, x) = zip(def.fields, fn.args) f.name === x || return false end return true end end #= none:140 =# Core.@doc " is_function(def)\n\nCheck if given object is a function expression.\n" function is_function(#= none:145 =# @nospecialize(def)) let true var"##return#229" = nothing var"##231" = def if var"##231" isa Expr begin var"##return#229" = let (line, doc, expr) = split_doc(def) if !(isnothing(doc)) source = line end split_function_tuple = split_function_nothrow(expr) isnothing(split_function_tuple) && return false (head, call, body) = split_function_tuple split_head_tuple = let true var"##return#233" = nothing var"##235" = head if var"##235" == :-> var"##return#233" = let split_anonymous_function_head_nothrow(call) end $(Expr(:symbolicgoto, Symbol("####final#234#236"))) end begin var"##return#233" = let h = var"##235" split_function_head_nothrow(call) end $(Expr(:symbolicgoto, Symbol("####final#234#236"))) end error("matching non-exhaustive, at #= none:157 =#") $(Expr(:symboliclabel, Symbol("####final#234#236"))) var"##return#233" end isnothing(split_head_tuple) && return false (name, args, kw, whereparams, rettype) = split_head_tuple true end $(Expr(:symbolicgoto, Symbol("####final#230#232"))) end end if var"##231" isa JLFunction begin var"##return#229" = let true end $(Expr(:symbolicgoto, Symbol("####final#230#232"))) end end begin var"##return#229" = let false end $(Expr(:symbolicgoto, Symbol("####final#230#232"))) end error("matching non-exhaustive, at #= none:146 =#") $(Expr(:symboliclabel, Symbol("####final#230#232"))) var"##return#229" end end #= none:170 =# Core.@doc " is_kw_function(def)\n\nCheck if a given function definition supports keyword arguments.\n" function is_kw_function(#= none:175 =# @nospecialize(def)) is_function(def) || return false if def isa JLFunction return def.kwargs !== nothing end (_, call, _) = split_function(def) let begin var"##cache#240" = nothing end var"##return#237" = nothing var"##239" = call if var"##239" isa Expr if begin if var"##cache#240" === nothing var"##cache#240" = Some(((var"##239").head, (var"##239").args)) end var"##241" = (var"##cache#240").value var"##241" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##241"[1] == :tuple && (begin var"##242" = var"##241"[2] var"##242" isa AbstractArray end && ((ndims(var"##242") === 1 && length(var"##242") >= 1) && (begin begin var"##cache#244" = nothing end var"##243" = var"##242"[1] var"##243" isa Expr end && (begin if var"##cache#244" === nothing var"##cache#244" = Some(((var"##243").head, (var"##243").args)) end var"##245" = (var"##cache#244").value var"##245" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##245"[1] == :parameters && (begin var"##246" = var"##245"[2] var"##246" isa AbstractArray end && (ndims(var"##246") === 1 && length(var"##246") >= 0)))))))) var"##return#237" = let true end $(Expr(:symbolicgoto, Symbol("####final#238#256"))) end if begin var"##247" = (var"##cache#240").value var"##247" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##247"[1] == :call && (begin var"##248" = var"##247"[2] var"##248" isa AbstractArray end && ((ndims(var"##248") === 1 && length(var"##248") >= 2) && (begin begin var"##cache#250" = nothing end var"##249" = var"##248"[2] var"##249" isa Expr end && (begin if var"##cache#250" === nothing var"##cache#250" = Some(((var"##249").head, (var"##249").args)) end var"##251" = (var"##cache#250").value var"##251" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##251"[1] == :parameters && (begin var"##252" = var"##251"[2] var"##252" isa AbstractArray end && (ndims(var"##252") === 1 && length(var"##252") >= 0)))))))) var"##return#237" = let true end $(Expr(:symbolicgoto, Symbol("####final#238#256"))) end if begin var"##253" = (var"##cache#240").value var"##253" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##253"[1] == :block && (begin var"##254" = var"##253"[2] var"##254" isa AbstractArray end && (length(var"##254") === 3 && begin var"##255" = var"##254"[2] var"##255" isa LineNumberNode end))) var"##return#237" = let true end $(Expr(:symbolicgoto, Symbol("####final#238#256"))) end end begin var"##return#237" = let false end $(Expr(:symbolicgoto, Symbol("####final#238#256"))) end error("matching non-exhaustive, at #= none:183 =#") $(Expr(:symboliclabel, Symbol("####final#238#256"))) var"##return#237" end end #= none:191 =# @deprecate is_kw_fn(def) is_kw_function(def) #= none:192 =# @deprecate is_fn(def) is_function(def) #= none:194 =# Core.@doc " is_struct(ex)\n\nCheck if `ex` is a struct expression.\n" function is_struct(#= none:199 =# @nospecialize(ex)) ex isa Expr || return false return ex.head === :struct end #= none:204 =# Core.@doc " is_struct_not_kw_struct(ex)\n\nCheck if `ex` is a struct expression excluding keyword struct syntax.\n" function is_struct_not_kw_struct(ex) is_struct(ex) || return false body = ex.args[3] body isa Expr && body.head === :block || return false any(is_field_default, body.args) && return false return true end #= none:217 =# Core.@doc " is_ifelse(ex)\n\nCheck if `ex` is an `if ... elseif ... else ... end` expression.\n" function is_ifelse(#= none:222 =# @nospecialize(ex)) ex isa Expr || return false return ex.head === :if end #= none:227 =# Core.@doc " is_for(ex)\n\nCheck if `ex` is a `for` loop expression.\n" function is_for(#= none:232 =# @nospecialize(ex)) ex isa Expr || return false return ex.head === :for end #= none:237 =# Core.@doc " is_field(ex)\n\nCheck if `ex` is a valid field expression.\n" function is_field(#= none:242 =# @nospecialize(ex)) let begin var"##cache#260" = nothing end var"##return#257" = nothing var"##259" = ex if var"##259" isa Expr if begin if var"##cache#260" === nothing var"##cache#260" = Some(((var"##259").head, (var"##259").args)) end var"##261" = (var"##cache#260").value var"##261" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##261"[1] == :(=) && (begin var"##262" = var"##261"[2] var"##262" isa AbstractArray end && (length(var"##262") === 2 && (begin begin var"##cache#264" = nothing end var"##263" = var"##262"[1] var"##263" isa Expr end && (begin if var"##cache#264" === nothing var"##cache#264" = Some(((var"##263").head, (var"##263").args)) end var"##265" = (var"##cache#264").value var"##265" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##265"[1] == :(::) && (begin var"##266" = var"##265"[2] var"##266" isa AbstractArray end && (length(var"##266") === 2 && begin var"##267" = var"##266"[1] var"##268" = var"##266"[2] var"##269" = var"##262"[2] true end)))))))) var"##return#257" = let default = var"##269", type = var"##268", name = var"##267" false end $(Expr(:symbolicgoto, Symbol("####final#258#278"))) end if begin var"##270" = (var"##cache#260").value var"##270" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##270"[1] == :(=) && (begin var"##271" = var"##270"[2] var"##271" isa AbstractArray end && (length(var"##271") === 2 && (begin var"##272" = var"##271"[1] var"##272" isa Symbol end && begin var"##273" = var"##271"[2] true end)))) var"##return#257" = let default = var"##273", name = var"##272" false end $(Expr(:symbolicgoto, Symbol("####final#258#278"))) end if begin var"##274" = (var"##cache#260").value var"##274" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##274"[1] == :(::) && (begin var"##275" = var"##274"[2] var"##275" isa AbstractArray end && (length(var"##275") === 2 && begin var"##276" = var"##275"[1] var"##277" = var"##275"[2] true end))) var"##return#257" = let type = var"##277", name = var"##276" true end $(Expr(:symbolicgoto, Symbol("####final#258#278"))) end end if var"##259" isa Symbol begin var"##return#257" = let name = var"##259" true end $(Expr(:symbolicgoto, Symbol("####final#258#278"))) end end begin var"##return#257" = let false end $(Expr(:symbolicgoto, Symbol("####final#258#278"))) end error("matching non-exhaustive, at #= none:243 =#") $(Expr(:symboliclabel, Symbol("####final#258#278"))) var"##return#257" end end #= none:252 =# Core.@doc " is_field_default(ex)\n\nCheck if `ex` is a ` = ` expression.\n" function is_field_default(#= none:257 =# @nospecialize(ex)) let begin var"##cache#282" = nothing end var"##return#279" = nothing var"##281" = ex if var"##281" isa Expr if begin if var"##cache#282" === nothing var"##cache#282" = Some(((var"##281").head, (var"##281").args)) end var"##283" = (var"##cache#282").value var"##283" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##283"[1] == :(=) && (begin var"##284" = var"##283"[2] var"##284" isa AbstractArray end && (length(var"##284") === 2 && (begin begin var"##cache#286" = nothing end var"##285" = var"##284"[1] var"##285" isa Expr end && (begin if var"##cache#286" === nothing var"##cache#286" = Some(((var"##285").head, (var"##285").args)) end var"##287" = (var"##cache#286").value var"##287" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##287"[1] == :(::) && (begin var"##288" = var"##287"[2] var"##288" isa AbstractArray end && (length(var"##288") === 2 && begin var"##289" = var"##288"[1] var"##290" = var"##288"[2] var"##291" = var"##284"[2] true end)))))))) var"##return#279" = let default = var"##291", type = var"##290", name = var"##289" true end $(Expr(:symbolicgoto, Symbol("####final#280#296"))) end if begin var"##292" = (var"##cache#282").value var"##292" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##292"[1] == :(=) && (begin var"##293" = var"##292"[2] var"##293" isa AbstractArray end && (length(var"##293") === 2 && (begin var"##294" = var"##293"[1] var"##294" isa Symbol end && begin var"##295" = var"##293"[2] true end)))) var"##return#279" = let default = var"##295", name = var"##294" true end $(Expr(:symbolicgoto, Symbol("####final#280#296"))) end end begin var"##return#279" = let false end $(Expr(:symbolicgoto, Symbol("####final#280#296"))) end error("matching non-exhaustive, at #= none:258 =#") $(Expr(:symboliclabel, Symbol("####final#280#296"))) var"##return#279" end end #= none:265 =# Core.@doc " is_datatype_expr(ex)\n\nCheck if `ex` is an expression for a concrete `DataType`, e.g\n`where` is not allowed in the expression.\n" function is_datatype_expr(#= none:271 =# @nospecialize(ex)) let begin var"##cache#300" = nothing end var"##return#297" = nothing var"##299" = ex if var"##299" isa GlobalRef begin var"##return#297" = let true end $(Expr(:symbolicgoto, Symbol("####final#298#314"))) end end if var"##299" isa Expr if begin if var"##cache#300" === nothing var"##cache#300" = Some(((var"##299").head, (var"##299").args)) end var"##301" = (var"##cache#300").value var"##301" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##301"[1] == :curly && (begin var"##302" = var"##301"[2] var"##302" isa AbstractArray end && (length(var"##302") === 2 && (begin begin var"##cache#304" = nothing end var"##303" = var"##302"[2] var"##303" isa Expr end && (begin if var"##cache#304" === nothing var"##cache#304" = Some(((var"##303").head, (var"##303").args)) end var"##305" = (var"##cache#304").value var"##305" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##305"[1] == :... && (begin var"##306" = var"##305"[2] var"##306" isa AbstractArray end && length(var"##306") === 1))))))) var"##return#297" = let true end $(Expr(:symbolicgoto, Symbol("####final#298#314"))) end if begin var"##307" = (var"##cache#300").value var"##307" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##307"[1] == :. && (begin var"##308" = var"##307"[2] var"##308" isa AbstractArray end && (length(var"##308") === 2 && (begin var"##309" = var"##308"[2] var"##309" isa QuoteNode end && begin var"##310" = (var"##309").value true end)))) var"##return#297" = let b = var"##310" is_datatype_expr(b) end $(Expr(:symbolicgoto, Symbol("####final#298#314"))) end if begin var"##311" = (var"##cache#300").value var"##311" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##311"[1] == :curly && (begin var"##312" = var"##311"[2] var"##312" isa AbstractArray end && ((ndims(var"##312") === 1 && length(var"##312") >= 0) && begin var"##313" = SubArray(var"##312", (1:length(var"##312"),)) true end))) var"##return#297" = let args = var"##313" all(is_datatype_expr, args) end $(Expr(:symbolicgoto, Symbol("####final#298#314"))) end end if var"##299" isa Symbol begin var"##return#297" = let true end $(Expr(:symbolicgoto, Symbol("####final#298#314"))) end end begin var"##return#297" = let false end $(Expr(:symbolicgoto, Symbol("####final#298#314"))) end error("matching non-exhaustive, at #= none:272 =#") $(Expr(:symboliclabel, Symbol("####final#298#314"))) var"##return#297" end end #= none:282 =# Core.@doc " is_matrix_expr(ex)\n\nCheck if `ex` is an expression for a `Matrix`.\n" function is_matrix_expr(#= none:287 =# @nospecialize(ex)) Meta.isexpr(ex, :hcat) && return true if Meta.isexpr(ex, :typed_vcat) args = ex.args[2:end] elseif Meta.isexpr(ex, :vcat) args = ex.args else return false end for row = args Meta.isexpr(row, :row) || return false end return true end =/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/cons.jl1 #= none:1 =# Core.@doc " JLFunction(ex::Expr)\n\nCreate a `JLFunction` object from a Julia function `Expr`.\n\n# Example\n\n```julia\njulia> JLFunction(:(f(x) = 2))\nf(x) = begin\n #= REPL[37]:1 =# \n 2 \nend\n```\n" function JLFunction(ex::Expr; source = nothing) (line, doc, expr) = split_doc(ex) if !(isnothing(doc)) source = line end (generated, expr) = let begin var"##cache#444" = nothing end var"##return#441" = nothing var"##443" = expr if var"##443" isa Expr if begin if var"##cache#444" === nothing var"##cache#444" = Some(((var"##443").head, (var"##443").args)) end var"##445" = (var"##cache#444").value var"##445" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##445"[1] == :macrocall && (begin var"##446" = var"##445"[2] var"##446" isa AbstractArray end && (length(var"##446") === 3 && (begin var"##447" = var"##446"[1] var"##447" == GlobalRef(Base, Symbol("@generated")) end && begin var"##448" = var"##446"[2] var"##449" = var"##446"[3] true end)))) var"##return#441" = let line = var"##448", expr = var"##449" (true, expr) end $(Expr(:symbolicgoto, Symbol("####final#442#464"))) end if begin var"##450" = (var"##cache#444").value var"##450" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##450"[1] == :macrocall && (begin var"##451" = var"##450"[2] var"##451" isa AbstractArray end && (length(var"##451") === 3 && (begin var"##452" = var"##451"[1] var"##452" == Symbol("@generated") end && begin var"##453" = var"##451"[2] var"##454" = var"##451"[3] true end)))) var"##return#441" = let line = var"##453", expr = var"##454" (true, expr) end $(Expr(:symbolicgoto, Symbol("####final#442#464"))) end if begin var"##455" = (var"##cache#444").value var"##455" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##455"[1] == :macrocall && (begin var"##456" = var"##455"[2] var"##456" isa AbstractArray end && (length(var"##456") === 3 && (begin begin var"##cache#458" = nothing end var"##457" = var"##456"[1] var"##457" isa Expr end && (begin if var"##cache#458" === nothing var"##cache#458" = Some(((var"##457").head, (var"##457").args)) end var"##459" = (var"##cache#458").value var"##459" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##459"[1] == :. && (begin var"##460" = var"##459"[2] var"##460" isa AbstractArray end && (length(var"##460") === 2 && (var"##460"[1] == :Base && (begin var"##461" = var"##460"[2] var"##461" == QuoteNode(Symbol("@generated")) end && begin var"##462" = var"##456"[2] var"##463" = var"##456"[3] true end)))))))))) var"##return#441" = let line = var"##462", expr = var"##463" (true, expr) end $(Expr(:symbolicgoto, Symbol("####final#442#464"))) end end begin var"##return#441" = let (false, expr) end $(Expr(:symbolicgoto, Symbol("####final#442#464"))) end error("matching non-exhaustive, at #= none:22 =#") $(Expr(:symboliclabel, Symbol("####final#442#464"))) var"##return#441" end (head, call, body) = split_function(expr; source) (name, args, kw, whereparams, rettype) = let true var"##return#465" = nothing var"##467" = head if var"##467" == :-> var"##return#465" = let split_anonymous_function_head(call; source) end $(Expr(:symbolicgoto, Symbol("####final#466#468"))) end begin var"##return#465" = let h = var"##467" split_function_head(call; source) end $(Expr(:symbolicgoto, Symbol("####final#466#468"))) end error("matching non-exhaustive, at #= none:30 =#") $(Expr(:symboliclabel, Symbol("####final#466#468"))) var"##return#465" end JLFunction(head, name, args, kw, rettype, generated, whereparams, body, line, doc) end #= none:37 =# Core.@doc " JLStruct(ex::Expr)\n\nCreate a `JLStruct` object from a Julia struct `Expr`.\n\n# Example\n\n```julia\njulia> JLStruct(:(struct Foo\n x::Int\n end))\nstruct Foo\n #= REPL[38]:2 =#\n x::Int\nend\n```\n" function JLStruct(ex::Expr; source = nothing) (line, doc, expr) = split_doc(ex) if !(isnothing(doc)) source = line end (ismutable, typename, typevars, supertype, body) = split_struct(expr; source) (fields, constructors, misc) = (JLField[], JLFunction[], []) (field_doc, field_source) = (nothing, source) body = flatten_blocks(body) for each = body.args m = split_field_if_match(typename, each; source = field_source) if m isa String field_doc = m elseif m isa LineNumberNode field_source = m elseif m isa NamedTuple push!(fields, JLField(; m..., doc = field_doc, line = field_source)) (field_doc, field_source) = (nothing, nothing) elseif m isa JLFunction push!(constructors, m) else push!(misc, m) end end JLStruct(typename, ismutable, typevars, supertype, fields, constructors, line, doc, misc) end #= none:84 =# Core.@doc " JLKwStruct(ex::Expr, typealias=nothing)\n\nCreate a `JLKwStruct` from given Julia struct `Expr`, with an option to attach\nan alias to this type name.\n\n# Example\n\n```julia\njulia> JLKwStruct(:(struct Foo\n x::Int = 1\n end))\n#= kw =# struct Foo\n #= REPL[39]:2 =#\n x::Int = 1\nend\n```\n" function JLKwStruct(ex::Expr, typealias = nothing; source = nothing) (line, doc, expr) = split_doc(ex) if !(isnothing(doc)) source = line end (ismutable, typename, typevars, supertype, body) = split_struct(expr; source) (fields, constructors, misc) = (JLKwField[], JLFunction[], []) (field_doc, field_source) = (nothing, source) body = flatten_blocks(body) for each = body.args m = split_field_if_match(typename, each, true; source = field_source) if m isa String field_doc = m elseif m isa LineNumberNode field_source = m elseif m isa NamedTuple field = JLKwField(; m..., doc = field_doc, line = field_source) push!(fields, field) (field_doc, field_source) = (nothing, nothing) elseif m isa JLFunction push!(constructors, m) else push!(misc, m) end end JLKwStruct(typename, typealias, ismutable, typevars, supertype, fields, constructors, line, doc, misc) end #= none:131 =# Core.@doc " JLIfElse(ex::Expr)\n\nCreate a `JLIfElse` from given Julia ifelse `Expr`.\n\n# Example\n\n```julia\njulia> ex = :(if foo(x)\n x = 1 + 1\n elseif goo(x)\n y = 1 + 2\n else\n error(\"abc\")\n end)\n:(if foo(x)\n #= REPL[41]:2 =#\n x = 1 + 1\n elseif #= REPL[41]:3 =# goo(x)\n #= REPL[41]:4 =#\n y = 1 + 2\n else\n #= REPL[41]:6 =#\n error(\"abc\")\n end)\n\njulia> JLIfElse(ex)\nif foo(x)\n begin\n #= REPL[41]:2 =# \n x = 1 + 1 \n end\nelseif begin\n #= REPL[41]:3 =# \n goo(x) \nend\n begin\n #= REPL[41]:4 =# \n y = 1 + 2 \n end\nelse\n begin\n #= REPL[41]:6 =# \n error(\"abc\") \n end\nend\n```\n" function JLIfElse(ex::Expr; source = nothing) ex.head === :if || throw(SyntaxError("expect an if ... elseif ... else ... end expression", source)) (conds, stmts, otherwise) = split_ifelse(ex) return JLIfElse(conds, stmts, otherwise) end #= none:187 =# Core.@doc " JLFor(ex::Expr)\n\nCreate a `JLFor` from given Julia for loop expression.\n\n# Example\n\n```julia\njulia> ex = @expr for i in 1:10, j in 1:j\n M[i, j] += 1\n end\n:(for i = 1:10, j = 1:j\n #= REPL[3]:2 =#\n M[i, j] += 1\n end)\n\njulia> jl = JLFor(ex)\nfor i in 1 : 10,\n j in 1 : j\n #= loop body =#\n begin\n #= REPL[3]:2 =# \n M[i, j] += 1 \n end\nend\n\njulia> jl.vars\n2-element Vector{Any}:\n :i\n :j\n\njulia> jl.iterators\n2-element Vector{Any}:\n :(1:10)\n :(1:j)\n```\n" function JLFor(ex::Expr) (vars, itrs, body) = split_forloop(ex) return JLFor(vars, itrs, body) end >/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/guess.jl& #= none:1 =# Core.@doc " guess_module(m, ex)\n\nGuess the module of given expression `ex` (of a module)\nin module `m`. If `ex` is not a module, or cannot be\ndetermined return `nothing`.\n" function guess_module(m::Module, ex) begin begin var"##cache#472" = nothing end var"##471" = ex if var"##471" isa Expr if begin if var"##cache#472" === nothing var"##cache#472" = Some(((var"##471").head, (var"##471").args)) end var"##473" = (var"##cache#472").value var"##473" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##473"[1] == :. && (begin var"##474" = var"##473"[2] var"##474" isa AbstractArray end && (length(var"##474") === 2 && (begin var"##475" = var"##474"[1] var"##476" = var"##474"[2] var"##476" isa QuoteNode end && begin var"##477" = (var"##476").value true end)))) name = var"##475" sub = var"##477" var"##return#469" = begin mod = guess_module(m, name) if mod isa Module return guess_module(mod, sub) else return ex end end $(Expr(:symbolicgoto, Symbol("####final#470#478"))) end end if var"##471" isa Symbol if isdefined(m, ex) var"##return#469" = begin maybe_m = getproperty(m, ex) maybe_m isa Module && return maybe_m return ex end $(Expr(:symbolicgoto, Symbol("####final#470#478"))) end end if var"##471" isa Module begin var"##return#469" = begin return ex end $(Expr(:symbolicgoto, Symbol("####final#470#478"))) end end begin var"##return#469" = begin return ex end $(Expr(:symbolicgoto, Symbol("####final#470#478"))) end error("matching non-exhaustive, at #= none:9 =#") $(Expr(:symboliclabel, Symbol("####final#470#478"))) var"##return#469" end end #= none:28 =# Core.@doc " guess_type(m::Module, ex)\n\nGuess the actual type of expression `ex` (of a type) in module `m`.\nReturns the type if it can be determined, otherwise returns the\nexpression. This function is used in [`compare_expr`](@ref).\n" function guess_type(m::Module, ex) begin begin var"##cache#482" = nothing end var"##481" = ex if var"##481" isa Expr if begin if var"##cache#482" === nothing var"##cache#482" = Some(((var"##481").head, (var"##481").args)) end var"##483" = (var"##cache#482").value var"##483" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##483"[1] == :curly && (begin var"##484" = var"##483"[2] var"##484" isa AbstractArray end && ((ndims(var"##484") === 1 && length(var"##484") >= 1) && begin var"##485" = var"##484"[1] var"##486" = SubArray(var"##484", (2:length(var"##484"),)) true end))) typevars = var"##486" name = var"##485" var"##return#479" = begin type = guess_type(m, name) typevars = map(typevars) do typevar guess_type(m, typevar) end if type === Union all((x->begin x isa Type end), typevars) || return ex return Union{typevars...} elseif type isa Type && all(is_valid_typevar, typevars) return type{typevars...} else return ex end end $(Expr(:symbolicgoto, Symbol("####final#480#487"))) end end if var"##481" isa Symbol begin var"##return#479" = begin isdefined(m, ex) || return ex return getproperty(m, ex) end $(Expr(:symbolicgoto, Symbol("####final#480#487"))) end end if var"##481" isa Type begin var"##return#479" = begin return ex end $(Expr(:symbolicgoto, Symbol("####final#480#487"))) end end if var"##481" isa QuoteNode begin var"##return#479" = begin return ex end $(Expr(:symbolicgoto, Symbol("####final#480#487"))) end end begin var"##return#479" = begin return ex end $(Expr(:symbolicgoto, Symbol("####final#480#487"))) end error("matching non-exhaustive, at #= none:36 =#") $(Expr(:symboliclabel, Symbol("####final#480#487"))) var"##return#479" end end function guess_value(m::Module, ex) let begin var"##cache#491" = nothing end var"##return#488" = nothing var"##490" = ex if var"##490" isa Expr if begin if var"##cache#491" === nothing var"##cache#491" = Some(((var"##490").head, (var"##490").args)) end var"##492" = (var"##cache#491").value var"##492" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##492"[1] == :. && (begin var"##493" = var"##492"[2] var"##493" isa AbstractArray end && (length(var"##493") === 2 && (begin var"##494" = var"##493"[1] var"##495" = var"##493"[2] var"##495" isa QuoteNode end && begin var"##496" = (var"##495").value true end)))) var"##return#488" = let name = var"##494", sub = var"##496" mod = guess_module(m, name) if mod isa Module return guess_value(mod, sub) else return ex end end $(Expr(:symbolicgoto, Symbol("####final#489#497"))) end end if var"##490" isa Symbol begin var"##return#488" = let if isdefined(m, ex) getfield(m, ex) else ex end end $(Expr(:symbolicgoto, Symbol("####final#489#497"))) end end begin var"##return#488" = let ex end $(Expr(:symbolicgoto, Symbol("####final#489#497"))) end error("matching non-exhaustive, at #= none:62 =#") $(Expr(:symboliclabel, Symbol("####final#489#497"))) var"##return#488" end end C/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/reflection.jl[ #= none:1 =# Core.@doc " @expr \n\nReturn the original expression object.\n\n# Example\n\n```julia\njulia> ex = @expr x + 1\n:(x + 1)\n```\n" macro expr(ex) return QuoteNode(ex) end #= none:17 =# Core.@doc " @expr \n\nReturn the expression in given type.\n\n# Example\n\n```julia\njulia> ex = @expr JLKwStruct struct Foo{N, T}\n x::T = 1\n end\n#= kw =# struct Foo{N, T}\n #= /home/roger/code/julia/Expronicon/test/analysis.jl:5 =#\n x::T = 1\nend\n```\n" macro expr(type, ex) quote ($type)($(Expr(:quote, ex))) end |> esc end #= none:40 =# Core.@doc " gensym_name(x::Symbol)\n\nReturn the gensym name.\n\n!!! note\n Borrowed from [MacroTools](https://github.com/FluxML/MacroTools.jl).\n" function gensym_name(x::Symbol) m = Base.match(r"##(.+)#\d+", String(x)) m === nothing || return m.captures[1] m = Base.match(r"#\d+#(.+)", String(x)) m === nothing || return m.captures[1] return "x" end >/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/split.jl? #= none:1 =# Core.@doc " split_doc(ex::Expr) -> line, doc, expr\n\nSplit doc string from given expression.\n" function split_doc(ex::Expr) begin begin var"##cache#501" = nothing end var"##500" = ex if var"##500" isa Expr if begin if var"##cache#501" === nothing var"##cache#501" = Some(((var"##500").head, (var"##500").args)) end var"##502" = (var"##cache#501").value var"##502" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##502"[1] == :macrocall && (begin var"##503" = var"##502"[2] var"##503" isa AbstractArray end && (length(var"##503") === 4 && (begin var"##504" = var"##503"[1] var"##504" == GlobalRef(Core, Symbol("@doc")) end && begin var"##505" = var"##503"[2] var"##506" = var"##503"[3] var"##507" = var"##503"[4] true end)))) line = var"##505" expr = var"##507" doc = var"##506" var"##return#498" = begin return (line, doc, expr) end $(Expr(:symbolicgoto, Symbol("####final#499#528"))) end if begin var"##508" = (var"##cache#501").value var"##508" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##508"[1] == :macrocall && (begin var"##509" = var"##508"[2] var"##509" isa AbstractArray end && (length(var"##509") === 4 && (begin var"##510" = var"##509"[1] var"##510" == Symbol("@doc") end && begin var"##511" = var"##509"[2] var"##512" = var"##509"[3] var"##513" = var"##509"[4] true end)))) line = var"##511" expr = var"##513" doc = var"##512" var"##return#498" = begin return (line, doc, expr) end $(Expr(:symbolicgoto, Symbol("####final#499#528"))) end if begin var"##514" = (var"##cache#501").value var"##514" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##514"[1] == :macrocall && (begin var"##515" = var"##514"[2] var"##515" isa AbstractArray end && (length(var"##515") === 4 && (begin begin var"##cache#517" = nothing end var"##516" = var"##515"[1] var"##516" isa Expr end && (begin if var"##cache#517" === nothing var"##cache#517" = Some(((var"##516").head, (var"##516").args)) end var"##518" = (var"##cache#517").value var"##518" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##518"[1] == :. && (begin var"##519" = var"##518"[2] var"##519" isa AbstractArray end && (length(var"##519") === 2 && (var"##519"[1] == :Core && (begin var"##520" = var"##519"[2] var"##520" == QuoteNode(Symbol("@doc")) end && begin var"##521" = var"##515"[2] var"##522" = var"##515"[3] var"##523" = var"##515"[4] true end)))))))))) line = var"##521" expr = var"##523" doc = var"##522" var"##return#498" = begin return (line, doc, expr) end $(Expr(:symbolicgoto, Symbol("####final#499#528"))) end if begin var"##524" = (var"##cache#501").value var"##524" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##524"[1] == :block && (begin var"##525" = var"##524"[2] var"##525" isa AbstractArray end && (length(var"##525") === 2 && (begin var"##526" = var"##525"[1] var"##526" isa LineNumberNode end && begin var"##527" = var"##525"[2] true end)))) stmt = var"##527" var"##return#498" = begin (line, doc, expr) = split_doc(stmt) return (line, doc, expr) end $(Expr(:symbolicgoto, Symbol("####final#499#528"))) end end begin var"##return#498" = begin return (nothing, nothing, ex) end $(Expr(:symbolicgoto, Symbol("####final#499#528"))) end error("matching non-exhaustive, at #= none:7 =#") $(Expr(:symboliclabel, Symbol("####final#499#528"))) var"##return#498" end end #= none:24 =# Core.@doc " split_function(ex::Expr) -> head, call, body\n\nSplit function head declaration with function body.\n" function split_function(ex::Expr; source = nothing) ret = split_function_nothrow(ex) isnothing(ret) && throw(SyntaxError("expect a function expr, got $(ex)", source)) ret end function split_function_nothrow(ex::Expr) let begin var"##cache#532" = nothing end var"##return#529" = nothing var"##531" = ex if var"##531" isa Expr if begin if var"##cache#532" === nothing var"##cache#532" = Some(((var"##531").head, (var"##531").args)) end var"##533" = (var"##cache#532").value var"##533" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##533"[1] == :function && (begin var"##534" = var"##533"[2] var"##534" isa AbstractArray end && (length(var"##534") === 2 && begin var"##535" = var"##534"[1] var"##536" = var"##534"[2] true end))) var"##return#529" = let call = var"##535", body = var"##536" (:function, call, body) end $(Expr(:symbolicgoto, Symbol("####final#530#549"))) end if begin var"##537" = (var"##cache#532").value var"##537" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##537"[1] == :function && (begin var"##538" = var"##537"[2] var"##538" isa AbstractArray end && (length(var"##538") === 2 && begin var"##539" = var"##538"[1] var"##540" = var"##538"[2] true end))) var"##return#529" = let call = var"##539", body = var"##540" (:function, call, body) end $(Expr(:symbolicgoto, Symbol("####final#530#549"))) end if begin var"##541" = (var"##cache#532").value var"##541" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##541"[1] == :(=) && (begin var"##542" = var"##541"[2] var"##542" isa AbstractArray end && (length(var"##542") === 2 && begin var"##543" = var"##542"[1] var"##544" = var"##542"[2] true end))) var"##return#529" = let call = var"##543", body = var"##544" let begin var"##cache#553" = nothing end var"##return#550" = nothing var"##552" = call if var"##552" isa Expr if begin if var"##cache#553" === nothing var"##cache#553" = Some(((var"##552").head, (var"##552").args)) end var"##554" = (var"##cache#553").value var"##554" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##554"[1] == :call && (begin var"##555" = var"##554"[2] var"##555" isa AbstractArray end && ((ndims(var"##555") === 1 && length(var"##555") >= 1) && begin var"##556" = var"##555"[1] var"##557" = SubArray(var"##555", (2:length(var"##555"),)) true end))) var"##return#550" = let f = var"##556", args = var"##557" true end $(Expr(:symbolicgoto, Symbol("####final#551#590"))) end if begin var"##558" = (var"##cache#553").value var"##558" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##558"[1] == :(::) && (begin var"##559" = var"##558"[2] var"##559" isa AbstractArray end && (length(var"##559") === 2 && (begin begin var"##cache#561" = nothing end var"##560" = var"##559"[1] var"##560" isa Expr end && (begin if var"##cache#561" === nothing var"##cache#561" = Some(((var"##560").head, (var"##560").args)) end var"##562" = (var"##cache#561").value var"##562" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##562"[1] == :call && (begin var"##563" = var"##562"[2] var"##563" isa AbstractArray end && ((ndims(var"##563") === 1 && length(var"##563") >= 1) && begin var"##564" = var"##563"[1] var"##565" = SubArray(var"##563", (2:length(var"##563"),)) var"##566" = var"##559"[2] true end)))))))) var"##return#550" = let f = var"##564", args = var"##565", rettype = var"##566" true end $(Expr(:symbolicgoto, Symbol("####final#551#590"))) end if begin var"##567" = (var"##cache#553").value var"##567" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##567"[1] == :where && (begin var"##568" = var"##567"[2] var"##568" isa AbstractArray end && ((ndims(var"##568") === 1 && length(var"##568") >= 1) && (begin begin var"##cache#570" = nothing end var"##569" = var"##568"[1] var"##569" isa Expr end && (begin if var"##cache#570" === nothing var"##cache#570" = Some(((var"##569").head, (var"##569").args)) end var"##571" = (var"##cache#570").value var"##571" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##571"[1] == :call && (begin var"##572" = var"##571"[2] var"##572" isa AbstractArray end && ((ndims(var"##572") === 1 && length(var"##572") >= 1) && begin var"##573" = var"##572"[1] var"##574" = SubArray(var"##572", (2:length(var"##572"),)) var"##575" = SubArray(var"##568", (2:length(var"##568"),)) true end)))))))) var"##return#550" = let f = var"##573", params = var"##575", args = var"##574" true end $(Expr(:symbolicgoto, Symbol("####final#551#590"))) end if begin var"##576" = (var"##cache#553").value var"##576" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##576"[1] == :where && (begin var"##577" = var"##576"[2] var"##577" isa AbstractArray end && ((ndims(var"##577") === 1 && length(var"##577") >= 1) && (begin begin var"##cache#579" = nothing end var"##578" = var"##577"[1] var"##578" isa Expr end && (begin if var"##cache#579" === nothing var"##cache#579" = Some(((var"##578").head, (var"##578").args)) end var"##580" = (var"##cache#579").value var"##580" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##580"[1] == :(::) && (begin var"##581" = var"##580"[2] var"##581" isa AbstractArray end && (length(var"##581") === 2 && (begin begin var"##cache#583" = nothing end var"##582" = var"##581"[1] var"##582" isa Expr end && (begin if var"##cache#583" === nothing var"##cache#583" = Some(((var"##582").head, (var"##582").args)) end var"##584" = (var"##cache#583").value var"##584" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##584"[1] == :call && (begin var"##585" = var"##584"[2] var"##585" isa AbstractArray end && ((ndims(var"##585") === 1 && length(var"##585") >= 1) && begin var"##586" = var"##585"[1] var"##587" = SubArray(var"##585", (2:length(var"##585"),)) var"##588" = var"##581"[2] var"##589" = SubArray(var"##577", (2:length(var"##577"),)) true end))))))))))))) var"##return#550" = let f = var"##586", params = var"##589", args = var"##587", rettype = var"##588" true end $(Expr(:symbolicgoto, Symbol("####final#551#590"))) end end begin var"##return#550" = let return nothing end $(Expr(:symbolicgoto, Symbol("####final#551#590"))) end error("matching non-exhaustive, at #= none:40 =#") $(Expr(:symboliclabel, Symbol("####final#551#590"))) var"##return#550" end (:(=), call, body) end $(Expr(:symbolicgoto, Symbol("####final#530#549"))) end if begin var"##545" = (var"##cache#532").value var"##545" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##545"[1] == :-> && (begin var"##546" = var"##545"[2] var"##546" isa AbstractArray end && (length(var"##546") === 2 && begin var"##547" = var"##546"[1] var"##548" = var"##546"[2] true end))) var"##return#529" = let call = var"##547", body = var"##548" (:->, call, body) end $(Expr(:symbolicgoto, Symbol("####final#530#549"))) end end begin var"##return#529" = let nothing end $(Expr(:symbolicgoto, Symbol("####final#530#549"))) end error("matching non-exhaustive, at #= none:36 =#") $(Expr(:symboliclabel, Symbol("####final#530#549"))) var"##return#529" end end #= none:54 =# Core.@doc " split_function_head(ex::Expr) -> name, args, kw, whereparams, rettype\n\nSplit function head to name, arguments, keyword arguments and where parameters.\n" function split_function_head(ex::Expr; source = nothing) split_head_tuple = split_function_head_nothrow(ex) isnothing(split_head_tuple) && throw(SyntaxError("expect a function head, got $(ex)", source)) split_head_tuple end function split_function_head_nothrow(ex::Expr) let begin var"##cache#594" = nothing end var"##return#591" = nothing var"##593" = ex if var"##593" isa Expr if begin if var"##cache#594" === nothing var"##cache#594" = Some(((var"##593").head, (var"##593").args)) end var"##595" = (var"##cache#594").value var"##595" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##595"[1] == :tuple && (begin var"##596" = var"##595"[2] var"##596" isa AbstractArray end && ((ndims(var"##596") === 1 && length(var"##596") >= 1) && (begin begin var"##cache#598" = nothing end var"##597" = var"##596"[1] var"##597" isa Expr end && (begin if var"##cache#598" === nothing var"##cache#598" = Some(((var"##597").head, (var"##597").args)) end var"##599" = (var"##cache#598").value var"##599" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##599"[1] == :parameters && (begin var"##600" = var"##599"[2] var"##600" isa AbstractArray end && ((ndims(var"##600") === 1 && length(var"##600") >= 0) && begin var"##601" = SubArray(var"##600", (1:length(var"##600"),)) var"##602" = SubArray(var"##596", (2:length(var"##596"),)) true end)))))))) var"##return#591" = let args = var"##602", kw = var"##601" (nothing, args, kw, nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#592#642"))) end if begin var"##603" = (var"##cache#594").value var"##603" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##603"[1] == :tuple && (begin var"##604" = var"##603"[2] var"##604" isa AbstractArray end && ((ndims(var"##604") === 1 && length(var"##604") >= 0) && begin var"##605" = SubArray(var"##604", (1:length(var"##604"),)) true end))) var"##return#591" = let args = var"##605" (nothing, args, nothing, nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#592#642"))) end if begin var"##606" = (var"##cache#594").value var"##606" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##606"[1] == :call && (begin var"##607" = var"##606"[2] var"##607" isa AbstractArray end && ((ndims(var"##607") === 1 && length(var"##607") >= 2) && (begin var"##608" = var"##607"[1] begin var"##cache#610" = nothing end var"##609" = var"##607"[2] var"##609" isa Expr end && (begin if var"##cache#610" === nothing var"##cache#610" = Some(((var"##609").head, (var"##609").args)) end var"##611" = (var"##cache#610").value var"##611" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##611"[1] == :parameters && (begin var"##612" = var"##611"[2] var"##612" isa AbstractArray end && ((ndims(var"##612") === 1 && length(var"##612") >= 0) && begin var"##613" = SubArray(var"##612", (1:length(var"##612"),)) var"##614" = SubArray(var"##607", (3:length(var"##607"),)) true end)))))))) var"##return#591" = let name = var"##608", args = var"##614", kw = var"##613" (name, args, kw, nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#592#642"))) end if begin var"##615" = (var"##cache#594").value var"##615" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##615"[1] == :call && (begin var"##616" = var"##615"[2] var"##616" isa AbstractArray end && ((ndims(var"##616") === 1 && length(var"##616") >= 1) && begin var"##617" = var"##616"[1] var"##618" = SubArray(var"##616", (2:length(var"##616"),)) true end))) var"##return#591" = let name = var"##617", args = var"##618" (name, args, nothing, nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#592#642"))) end if begin var"##619" = (var"##cache#594").value var"##619" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##619"[1] == :block && (begin var"##620" = var"##619"[2] var"##620" isa AbstractArray end && (length(var"##620") === 3 && (begin var"##621" = var"##620"[1] var"##622" = var"##620"[2] var"##622" isa LineNumberNode end && (begin begin var"##cache#624" = nothing end var"##623" = var"##620"[3] var"##623" isa Expr end && (begin if var"##cache#624" === nothing var"##cache#624" = Some(((var"##623").head, (var"##623").args)) end var"##625" = (var"##cache#624").value var"##625" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##625"[1] == :(=) && (begin var"##626" = var"##625"[2] var"##626" isa AbstractArray end && (length(var"##626") === 2 && begin var"##627" = var"##626"[1] var"##628" = var"##626"[2] true end))))))))) var"##return#591" = let value = var"##628", kw = var"##627", x = var"##621" (nothing, Any[x], Any[Expr(:kw, kw, value)], nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#592#642"))) end if begin var"##629" = (var"##cache#594").value var"##629" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##629"[1] == :block && (begin var"##630" = var"##629"[2] var"##630" isa AbstractArray end && (length(var"##630") === 3 && (begin var"##631" = var"##630"[1] var"##632" = var"##630"[2] var"##632" isa LineNumberNode end && begin var"##633" = var"##630"[3] true end)))) var"##return#591" = let kw = var"##633", x = var"##631" (nothing, Any[x], Any[kw], nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#592#642"))) end if begin var"##634" = (var"##cache#594").value var"##634" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##634"[1] == :(::) && (begin var"##635" = var"##634"[2] var"##635" isa AbstractArray end && (length(var"##635") === 2 && (begin var"##636" = var"##635"[1] var"##636" isa Expr end && begin var"##637" = var"##635"[2] true end)))) var"##return#591" = let call = var"##636", rettype = var"##637" sub_tuple = split_function_head_nothrow(call) isnothing(sub_tuple) && return nothing (name, args, kw, whereparams, _) = split_function_head_nothrow(call) (name, args, kw, whereparams, rettype) end $(Expr(:symbolicgoto, Symbol("####final#592#642"))) end if begin var"##638" = (var"##cache#594").value var"##638" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##638"[1] == :where && (begin var"##639" = var"##638"[2] var"##639" isa AbstractArray end && ((ndims(var"##639") === 1 && length(var"##639") >= 1) && begin var"##640" = var"##639"[1] var"##641" = SubArray(var"##639", (2:length(var"##639"),)) true end))) var"##return#591" = let call = var"##640", whereparams = var"##641" sub_tuple = split_function_head_nothrow(call) isnothing(sub_tuple) && return nothing (name, args, kw, _, rettype) = sub_tuple (name, args, kw, whereparams, rettype) end $(Expr(:symbolicgoto, Symbol("####final#592#642"))) end end begin var"##return#591" = let nothing end $(Expr(:symbolicgoto, Symbol("####final#592#642"))) end error("matching non-exhaustive, at #= none:66 =#") $(Expr(:symboliclabel, Symbol("####final#592#642"))) var"##return#591" end end split_function_head_nothrow(s::Symbol) = begin (nothing, Any[s], nothing, nothing, nothing) end #= none:90 =# Core.@doc " split_anonymous_function_head(ex::Expr) -> nothing, args, kw, whereparams, rettype\n\nSplit anonymous function head to arguments, keyword arguments and where parameters.\n" function split_anonymous_function_head(ex::Expr; source = nothing) split_head_tuple = split_anonymous_function_head_nothrow(ex) isnothing(split_head_tuple) && throw(SyntaxError("expect an anonymous function head, got $(ex)", source)) split_head_tuple end split_anonymous_function_head(ex::Symbol; source = nothing) = begin split_anonymous_function_head_nothrow(ex) end function split_anonymous_function_head_nothrow(ex::Expr) let begin var"##cache#646" = nothing end var"##return#643" = nothing var"##645" = ex if var"##645" isa Expr if begin if var"##cache#646" === nothing var"##cache#646" = Some(((var"##645").head, (var"##645").args)) end var"##647" = (var"##cache#646").value var"##647" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##647"[1] == :tuple && (begin var"##648" = var"##647"[2] var"##648" isa AbstractArray end && ((ndims(var"##648") === 1 && length(var"##648") >= 1) && (begin begin var"##cache#650" = nothing end var"##649" = var"##648"[1] var"##649" isa Expr end && (begin if var"##cache#650" === nothing var"##cache#650" = Some(((var"##649").head, (var"##649").args)) end var"##651" = (var"##cache#650").value var"##651" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##651"[1] == :parameters && (begin var"##652" = var"##651"[2] var"##652" isa AbstractArray end && ((ndims(var"##652") === 1 && length(var"##652") >= 0) && begin var"##653" = SubArray(var"##652", (1:length(var"##652"),)) var"##654" = SubArray(var"##648", (2:length(var"##648"),)) true end)))))))) var"##return#643" = let args = var"##654", kw = var"##653" (nothing, args, kw, nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#644#688"))) end if begin var"##655" = (var"##cache#646").value var"##655" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##655"[1] == :tuple && (begin var"##656" = var"##655"[2] var"##656" isa AbstractArray end && ((ndims(var"##656") === 1 && length(var"##656") >= 0) && begin var"##657" = SubArray(var"##656", (1:length(var"##656"),)) true end))) var"##return#643" = let args = var"##657" (nothing, args, nothing, nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#644#688"))) end if begin var"##658" = (var"##cache#646").value var"##658" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##658"[1] == :block && (begin var"##659" = var"##658"[2] var"##659" isa AbstractArray end && (length(var"##659") === 3 && (begin var"##660" = var"##659"[1] var"##661" = var"##659"[2] var"##661" isa LineNumberNode end && (begin begin var"##cache#663" = nothing end var"##662" = var"##659"[3] var"##662" isa Expr end && (begin if var"##cache#663" === nothing var"##cache#663" = Some(((var"##662").head, (var"##662").args)) end var"##664" = (var"##cache#663").value var"##664" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##664"[1] == :(=) && (begin var"##665" = var"##664"[2] var"##665" isa AbstractArray end && (length(var"##665") === 2 && begin var"##666" = var"##665"[1] var"##667" = var"##665"[2] true end))))))))) var"##return#643" = let value = var"##667", kw = var"##666", x = var"##660" (nothing, Any[x], Any[Expr(:kw, kw, value)], nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#644#688"))) end if begin var"##668" = (var"##cache#646").value var"##668" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##668"[1] == :block && (begin var"##669" = var"##668"[2] var"##669" isa AbstractArray end && (length(var"##669") === 3 && (begin var"##670" = var"##669"[1] var"##671" = var"##669"[2] var"##671" isa LineNumberNode end && begin var"##672" = var"##669"[3] true end)))) var"##return#643" = let kw = var"##672", x = var"##670" (nothing, Any[x], Any[kw], nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#644#688"))) end if begin var"##673" = (var"##cache#646").value var"##673" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##673"[1] == :(::) && (begin var"##674" = var"##673"[2] var"##674" isa AbstractArray end && (length(var"##674") === 2 && (begin var"##675" = var"##674"[1] var"##675" isa Expr end && begin var"##676" = var"##674"[2] true end)))) var"##return#643" = let rettype = var"##676", fh = var"##675" sub_tuple = split_anonymous_function_head_nothrow(fh) isnothing(sub_tuple) && return nothing (name, args, kw, whereparams, _) = sub_tuple (name, args, kw, whereparams, rettype) end $(Expr(:symbolicgoto, Symbol("####final#644#688"))) end if begin var"##677" = (var"##cache#646").value var"##677" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##677"[1] == :(::) && (begin var"##678" = var"##677"[2] var"##678" isa AbstractArray end && (length(var"##678") === 2 && (begin var"##679" = var"##678"[1] var"##679" isa Symbol end && begin var"##680" = var"##678"[2] true end)))) var"##return#643" = let arg = var"##679", argtype = var"##680" (nothing, Any[ex], nothing, nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#644#688"))) end if begin var"##681" = (var"##cache#646").value var"##681" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##681"[1] == :(::) && (begin var"##682" = var"##681"[2] var"##682" isa AbstractArray end && (length(var"##682") === 1 && begin var"##683" = var"##682"[1] true end))) var"##return#643" = let argtype = var"##683" (nothing, Any[ex], nothing, nothing, nothing) end $(Expr(:symbolicgoto, Symbol("####final#644#688"))) end if begin var"##684" = (var"##cache#646").value var"##684" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##684"[1] == :where && (begin var"##685" = var"##684"[2] var"##685" isa AbstractArray end && ((ndims(var"##685") === 1 && length(var"##685") >= 1) && begin var"##686" = var"##685"[1] var"##687" = SubArray(var"##685", (2:length(var"##685"),)) true end))) var"##return#643" = let call = var"##686", whereparams = var"##687" sub_tuple = split_anonymous_function_head_nothrow(call) isnothing(sub_tuple) && return nothing (name, args, kw, _, rettype) = sub_tuple (name, args, kw, whereparams, rettype) end $(Expr(:symbolicgoto, Symbol("####final#644#688"))) end end begin var"##return#643" = let nothing end $(Expr(:symbolicgoto, Symbol("####final#644#688"))) end error("matching non-exhaustive, at #= none:105 =#") $(Expr(:symboliclabel, Symbol("####final#644#688"))) var"##return#643" end end split_anonymous_function_head_nothrow(s::Symbol) = begin (nothing, Any[s], nothing, nothing, nothing) end #= none:129 =# Core.@doc " split_struct_name(ex::Expr) -> name, typevars, supertype\n\nSplit the name, type parameters and supertype definition from `struct`\ndeclaration head.\n" function split_struct_name(#= none:135 =# @nospecialize(ex); source = nothing) return let begin var"##cache#692" = nothing end var"##return#689" = nothing var"##691" = ex if var"##691" isa Expr if begin if var"##cache#692" === nothing var"##cache#692" = Some(((var"##691").head, (var"##691").args)) end var"##693" = (var"##cache#692").value var"##693" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##693"[1] == :curly && (begin var"##694" = var"##693"[2] var"##694" isa AbstractArray end && ((ndims(var"##694") === 1 && length(var"##694") >= 1) && begin var"##695" = var"##694"[1] var"##696" = SubArray(var"##694", (2:length(var"##694"),)) true end))) var"##return#689" = let typevars = var"##696", name = var"##695" (name, typevars, nothing) end $(Expr(:symbolicgoto, Symbol("####final#690#710"))) end if begin var"##697" = (var"##cache#692").value var"##697" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##697"[1] == :<: && (begin var"##698" = var"##697"[2] var"##698" isa AbstractArray end && (length(var"##698") === 2 && (begin begin var"##cache#700" = nothing end var"##699" = var"##698"[1] var"##699" isa Expr end && (begin if var"##cache#700" === nothing var"##cache#700" = Some(((var"##699").head, (var"##699").args)) end var"##701" = (var"##cache#700").value var"##701" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##701"[1] == :curly && (begin var"##702" = var"##701"[2] var"##702" isa AbstractArray end && ((ndims(var"##702") === 1 && length(var"##702") >= 1) && begin var"##703" = var"##702"[1] var"##704" = SubArray(var"##702", (2:length(var"##702"),)) var"##705" = var"##698"[2] true end)))))))) var"##return#689" = let typevars = var"##704", type = var"##705", name = var"##703" (name, typevars, type) end $(Expr(:symbolicgoto, Symbol("####final#690#710"))) end if begin var"##706" = (var"##cache#692").value var"##706" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##706"[1] == :<: && (begin var"##707" = var"##706"[2] var"##707" isa AbstractArray end && (length(var"##707") === 2 && begin var"##708" = var"##707"[1] var"##709" = var"##707"[2] true end))) var"##return#689" = let type = var"##709", name = var"##708" (name, [], type) end $(Expr(:symbolicgoto, Symbol("####final#690#710"))) end end if var"##691" isa Symbol begin var"##return#689" = let (ex, [], nothing) end $(Expr(:symbolicgoto, Symbol("####final#690#710"))) end end begin var"##return#689" = let throw(SyntaxError("expect struct got $(ex)", source)) end $(Expr(:symbolicgoto, Symbol("####final#690#710"))) end error("matching non-exhaustive, at #= none:136 =#") $(Expr(:symboliclabel, Symbol("####final#690#710"))) var"##return#689" end end #= none:145 =# Core.@doc " split_struct(ex::Expr) -> ismutable, name, typevars, supertype, body\n\nSplit struct definition head and body.\n" function split_struct(ex::Expr; source = nothing) ex.head === :struct || throw(SyntaxError("expect a struct expr, got $(ex)", source)) (name, typevars, supertype) = split_struct_name(ex.args[2]; source) body = ex.args[3] return (ex.args[1], name, typevars, supertype, body) end function split_ifelse(ex::Expr) (conds, stmts) = ([], []) otherwise = split_ifelse!((conds, stmts), ex) return (conds, stmts, otherwise) end function split_ifelse!((conds, stmts), ex::Expr) ex.head in [:if, :elseif] || return ex push!(conds, ex.args[1]) push!(stmts, ex.args[2]) if length(ex.args) == 3 return split_ifelse!((conds, stmts), ex.args[3]) end return nothing end function split_forloop(ex::Expr) ex.head === :for || error("expect a for loop expr, got $(ex)") lhead = ex.args[1] lbody = ex.args[2] return (split_for_head(lhead)..., lbody) end function split_for_head(ex::Expr) if ex.head === :block (vars, itrs) = ([], []) for each = ex.args each isa Expr || continue (var, itr) = split_single_for_head(each) push!(vars, var) push!(itrs, itr) end return (vars, itrs) else (var, itr) = split_single_for_head(ex) return (Any[var], Any[itr]) end end function split_single_for_head(ex::Expr) ex.head === :(=) || error("expect a single loop head, got $(ex)") return (ex.args[1], ex.args[2]) end #= none:202 =# Core.@doc " uninferrable_typevars(def::Union{JLStruct, JLKwStruct}; leading_inferable::Bool=true)\n\nReturn the type variables that are not inferrable in given struct definition.\n" function uninferrable_typevars(def::Union{JLStruct, JLKwStruct}; leading_inferable::Bool = true) typevars = name_only.(def.typevars) field_types = [field.type for field = def.fields] if leading_inferable idx = findfirst(typevars) do t !(any(map((f->begin has_symbol(f, t) end), field_types))) end idx === nothing && return [] else idx = 0 end uninferrable = typevars[1:idx] for T = typevars[idx + 1:end] any(map((f->begin has_symbol(f, T) end), field_types)) || push!(uninferrable, T) end return uninferrable end #= none:227 =# Core.@doc " split_field_if_match(typename::Symbol, expr, default::Bool=false)\n\nSplit the field definition if it matches the given type name.\nReturns `NamedTuple` with `name`, `type`, `default` and `isconst` fields\nif it matches, otherwise return `nothing`.\n" function split_field_if_match(typename::Symbol, expr, default::Bool = false; source = nothing) begin begin var"##cache#714" = nothing end var"##713" = expr if var"##713" isa Expr if begin if var"##cache#714" === nothing var"##cache#714" = Some(((var"##713").head, (var"##713").args)) end var"##715" = (var"##cache#714").value var"##715" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##715"[1] == :const && (begin var"##716" = var"##715"[2] var"##716" isa AbstractArray end && (length(var"##716") === 1 && (begin begin var"##cache#718" = nothing end var"##717" = var"##716"[1] var"##717" isa Expr end && (begin if var"##cache#718" === nothing var"##cache#718" = Some(((var"##717").head, (var"##717").args)) end var"##719" = (var"##cache#718").value var"##719" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##719"[1] == :(=) && (begin var"##720" = var"##719"[2] var"##720" isa AbstractArray end && (length(var"##720") === 2 && (begin begin var"##cache#722" = nothing end var"##721" = var"##720"[1] var"##721" isa Expr end && (begin if var"##cache#722" === nothing var"##cache#722" = Some(((var"##721").head, (var"##721").args)) end var"##723" = (var"##cache#722").value var"##723" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##723"[1] == :(::) && (begin var"##724" = var"##723"[2] var"##724" isa AbstractArray end && (length(var"##724") === 2 && (begin var"##725" = var"##724"[1] var"##725" isa Symbol end && begin var"##726" = var"##724"[2] var"##727" = var"##720"[2] true end)))))))))))))) value = var"##727" type = var"##726" name = var"##725" var"##return#711" = begin default && return (; name, type, isconst = true, default = value) throw(SyntaxError("default value syntax is not allowed", source)) end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end if begin var"##728" = (var"##cache#714").value var"##728" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##728"[1] == :const && (begin var"##729" = var"##728"[2] var"##729" isa AbstractArray end && (length(var"##729") === 1 && (begin begin var"##cache#731" = nothing end var"##730" = var"##729"[1] var"##730" isa Expr end && (begin if var"##cache#731" === nothing var"##cache#731" = Some(((var"##730").head, (var"##730").args)) end var"##732" = (var"##cache#731").value var"##732" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##732"[1] == :(=) && (begin var"##733" = var"##732"[2] var"##733" isa AbstractArray end && (length(var"##733") === 2 && (begin var"##734" = var"##733"[1] var"##734" isa Symbol end && begin var"##735" = var"##733"[2] true end))))))))) value = var"##735" name = var"##734" var"##return#711" = begin default && return (; name, type = Any, isconst = true, default = value) throw(SyntaxError("default value syntax is not allowed", source)) end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end if begin var"##736" = (var"##cache#714").value var"##736" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##736"[1] == :(=) && (begin var"##737" = var"##736"[2] var"##737" isa AbstractArray end && (length(var"##737") === 2 && (begin begin var"##cache#739" = nothing end var"##738" = var"##737"[1] var"##738" isa Expr end && (begin if var"##cache#739" === nothing var"##cache#739" = Some(((var"##738").head, (var"##738").args)) end var"##740" = (var"##cache#739").value var"##740" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##740"[1] == :(::) && (begin var"##741" = var"##740"[2] var"##741" isa AbstractArray end && (length(var"##741") === 2 && (begin var"##742" = var"##741"[1] var"##742" isa Symbol end && begin var"##743" = var"##741"[2] var"##744" = var"##737"[2] true end))))))))) value = var"##744" type = var"##743" name = var"##742" var"##return#711" = begin default && return (; name, type, isconst = false, default = value) throw(SyntaxError("default value syntax is not allowed", source)) end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end if begin var"##745" = (var"##cache#714").value var"##745" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##745"[1] == :(=) && (begin var"##746" = var"##745"[2] var"##746" isa AbstractArray end && (length(var"##746") === 2 && (begin var"##747" = var"##746"[1] var"##747" isa Symbol end && begin var"##748" = var"##746"[2] true end)))) value = var"##748" name = var"##747" var"##return#711" = begin default && return (; name, type = Any, isconst = false, default = value) throw(SyntaxError("default value syntax is not allowed", source)) end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end if begin var"##749" = (var"##cache#714").value var"##749" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##749"[1] == :const && (begin var"##750" = var"##749"[2] var"##750" isa AbstractArray end && (length(var"##750") === 1 && (begin begin var"##cache#752" = nothing end var"##751" = var"##750"[1] var"##751" isa Expr end && (begin if var"##cache#752" === nothing var"##cache#752" = Some(((var"##751").head, (var"##751").args)) end var"##753" = (var"##cache#752").value var"##753" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##753"[1] == :(::) && (begin var"##754" = var"##753"[2] var"##754" isa AbstractArray end && (length(var"##754") === 2 && (begin var"##755" = var"##754"[1] var"##755" isa Symbol end && begin var"##756" = var"##754"[2] true end))))))))) type = var"##756" name = var"##755" var"##return#711" = begin default && return (; name, type, isconst = true, default = no_default) return (; name, type, isconst = true) end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end if begin var"##757" = (var"##cache#714").value var"##757" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##757"[1] == :const && (begin var"##758" = var"##757"[2] var"##758" isa AbstractArray end && (length(var"##758") === 1 && begin var"##759" = var"##758"[1] var"##759" isa Symbol end))) name = var"##759" var"##return#711" = begin default && return (; name, type = Any, isconst = true, default = no_default) return (; name, type = Any, isconst = true) end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end if begin var"##760" = (var"##cache#714").value var"##760" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##760"[1] == :(::) && (begin var"##761" = var"##760"[2] var"##761" isa AbstractArray end && (length(var"##761") === 2 && (begin var"##762" = var"##761"[1] var"##762" isa Symbol end && begin var"##763" = var"##761"[2] true end)))) type = var"##763" name = var"##762" var"##return#711" = begin default && return (; name, type, isconst = false, default = no_default) return (; name, type, isconst = false) end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end end if var"##713" isa Symbol begin name = var"##713" var"##return#711" = begin default && return (; name, type = Any, isconst = false, default = no_default) return (; name, type = Any, isconst = false) end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end end if var"##713" isa String begin var"##return#711" = begin return expr end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end end if var"##713" isa LineNumberNode begin var"##return#711" = begin return expr end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end end if is_function(expr) var"##return#711" = begin if name_only(expr) === typename return JLFunction(expr) else return expr end end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end begin var"##return#711" = begin return expr end $(Expr(:symbolicgoto, Symbol("####final#712#764"))) end error("matching non-exhaustive, at #= none:235 =#") $(Expr(:symboliclabel, Symbol("####final#712#764"))) var"##return#711" end end @/opt/julia/packages/ExproniconLite/yfi6A/src/analysis/compare.jlU struct EmptyLine end const empty_line = EmptyLine() Base.show(io::IO, ::EmptyLine) = begin print(io, "") end #= none:5 =# Core.@doc " struct Variable\n\nMarks a `Symbol` as a variable. So that [`compare_expr`](@ref)\nwill always return `true`.\n" struct Variable name::Symbol end Base.show(io::IO, x::Variable) = begin printstyled(io, "<", x.name, ">"; color = :light_blue) end function locate_inequal_expr(m::Module, lhs, rhs) lhs isa Expr && rhs isa Expr || return (lhs, rhs) if length(lhs.args) > length(rhs.args) (lhs, rhs) = (rhs, lhs) end not_equals = Tuple{Any, Any}[] for (l, r) = zip(lhs.args, rhs.args) if !(compare_expr(m, l, r)) push!(not_equals, (l, r)) end end for each = rhs.args[length(lhs.args) + 1:end] push!(not_equals, (empty_line, each)) end if length(not_equals) == length(rhs.args) return (lhs, rhs) else return locate_inequal_expr(m, first(not_equals)...) end end #= none:46 =# Core.@doc " assert_equal_expr(m::Module, lhs, rhs)\n\nAssert that `lhs` and `rhs` are equal in `m`.\nThrow an `ExprNotEqual` if they are not equal.\n" function assert_equal_expr(m::Module, lhs, rhs) lhs = prettify(lhs; preserve_last_nothing = true, alias_gensym = false) rhs = prettify(rhs; preserve_last_nothing = true, alias_gensym = false) lhs = renumber_gensym(lhs) rhs = renumber_gensym(rhs) compare_expr(m, lhs, rhs) && return true (lhs, rhs) = locate_inequal_expr(m, lhs, rhs) throw(ExprNotEqual(lhs, rhs)) end #= none:62 =# Core.@doc " @test_expr \n\nTest if the syntax type generates the same expression `ex`. Returns the\ncorresponding syntax type instance. Requires `using Test` before using\nthis macro.\n\n# Example\n\n```julia\ndef = @test_expr JLFunction function (x, y)\n return 2\nend\n@test is_kw_fn(def) == false\n```\n" macro test_expr(type, ex) #= none:79 =# @gensym def generated_expr original_expr quote $def = #= none:81 =# ExproniconLite.@expr($type, $ex) ($Base).show(stdout, (MIME"text/plain")(), $def) $generated_expr = ($codegen_ast)($def) $original_expr = $(Expr(:quote, ex)) #= none:85 =# @test $(Expr(:block, __source__, :(($assert_equal_expr)($__module__, $generated_expr, $original_expr)))) $def end |> esc end #= none:93 =# Core.@doc " @test_expr == \n\nTest if two expression is equivalent semantically, this uses `compare_expr`\nto decide if they are equivalent, ignores things such as `LineNumberNode`\ngenerated `Symbol` in `Expr(:curly, ...)` or `Expr(:where, ...)`.\n\n!!! note\n\n This macro requires one `using Test` to import the `Test` module\n name.\n" macro test_expr(ex::Expr) esc(test_expr_m(__module__, __source__, ex)) end function test_expr_m(__module__, __source__, ex::Expr) ex.head === :call && ex.args[1] === :(==) || error("expect == , got $(ex)") (lhs, rhs) = (ex.args[2], ex.args[3]) #= none:112 =# @gensym result cmp_result err return quote $result = try $cmp_result = ($assert_equal_expr)($__module__, $lhs, $rhs) Test.Returned($cmp_result, nothing, $(QuoteNode(__source__))) catch $err $err isa Test.InterruptException && Test.rethrow() Test.Threw($err, ($Base).current_exceptions(), $(QuoteNode(__source__))) end Test.do_test($result, $(QuoteNode(ex))) end end macro compare_expr(lhs, rhs) return quote ($ExproniconLite).compare_expr($__module__, $lhs, $rhs) end |> esc end #= none:137 =# Core.@doc " compare_expr([m=Main], lhs, rhs)\n\nCompare two expression of type `Expr` or `Symbol` semantically, which:\n\n1. ignore the detail value `LineNumberNode` in comparision;\n2. ignore the detailed name of typevars declared by `where`;\n3. recognize inserted objects and `Symbol`, e.g `:(\$Int)` is equal to `:(Int)`;\n4. recognize `QuoteNode(:x)` and `Symbol(\"x\")` as equal;\n5. will guess module and type objects and compare their value directly\n instead of their expression;\n\n!!! tips\n\n This function is usually combined with [`prettify`](@ref)\n with `preserve_last_nothing=true` and `alias_gensym=false`.\n\nThis gives a way to compare two Julia expression semantically which means\nalthough some details of the expression is different but they should\nproduce the same lowered code.\n" compare_expr(lhs, rhs) = begin compare_expr(Main, lhs, rhs) end function compare_expr(m::Module, lhs, rhs) begin true var"##317" = (lhs, rhs) if var"##317" isa Tuple{Any, Any} if var"##317" isa Tuple{Symbol, Symbol} && (begin var"##318" = var"##317"[1] var"##318" isa Symbol end && begin var"##319" = var"##317"[2] var"##319" isa Symbol end) var"##return#315" = begin return lhs === rhs end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa Tuple{Module, Module} && (begin var"##320" = var"##317"[1] var"##320" isa Module end && begin var"##321" = var"##317"[2] var"##321" isa Module end) var"##return#315" = begin return lhs === rhs end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa Tuple{QuoteNode, Expr} && (begin var"##322" = var"##317"[1] var"##322" isa QuoteNode end && (begin begin var"##cache#324" = nothing end var"##323" = var"##317"[2] var"##323" isa Expr end && (begin if var"##cache#324" === nothing var"##cache#324" = Some(((var"##323").head, (var"##323").args)) end var"##325" = (var"##cache#324").value var"##325" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##325"[1] == :call && (begin var"##326" = var"##325"[2] var"##326" isa AbstractArray end && (length(var"##326") === 2 && (var"##326"[1] == :Symbol && begin var"##327" = var"##326"[2] true end))))))) a = var"##322" b = var"##327" var"##return#315" = begin isdefined(m, :Symbol) || return false return a.value === Symbol(b) end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa Tuple{Expr, QuoteNode} && (begin begin var"##cache#329" = nothing end var"##328" = var"##317"[1] var"##328" isa Expr end && (begin if var"##cache#329" === nothing var"##cache#329" = Some(((var"##328").head, (var"##328").args)) end var"##330" = (var"##cache#329").value var"##330" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##330"[1] == :call && (begin var"##331" = var"##330"[2] var"##331" isa AbstractArray end && (length(var"##331") === 2 && (var"##331"[1] == :Symbol && begin var"##332" = var"##331"[2] var"##333" = var"##317"[2] var"##333" isa QuoteNode end)))))) a = var"##333" b = var"##332" var"##return#315" = begin isdefined(m, :Symbol) || return false return a.value === Symbol(b) end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa Tuple{Expr, Expr} && (begin var"##334" = var"##317"[1] var"##334" isa Expr end && begin var"##335" = var"##317"[2] var"##335" isa Expr end) var"##return#315" = begin return compare_expr_object(m, lhs, rhs) end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa (Tuple{Expr, var2} where var2 <: Type) && (begin begin var"##cache#337" = nothing end var"##336" = var"##317"[1] var"##336" isa Expr end && (begin if var"##cache#337" === nothing var"##cache#337" = Some(((var"##336").head, (var"##336").args)) end var"##338" = (var"##cache#337").value var"##338" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##338"[1] == :curly && (begin var"##339" = var"##338"[2] var"##339" isa AbstractArray end && ((ndims(var"##339") === 1 && length(var"##339") >= 0) && begin var"##340" = var"##317"[2] var"##340" isa Type end))))) var"##return#315" = begin return guess_type(m, lhs) == rhs end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa (Tuple{var1, Expr} where var1 <: Type) && (begin var"##341" = var"##317"[1] var"##341" isa Type end && (begin begin var"##cache#343" = nothing end var"##342" = var"##317"[2] var"##342" isa Expr end && (begin if var"##cache#343" === nothing var"##cache#343" = Some(((var"##342").head, (var"##342").args)) end var"##344" = (var"##cache#343").value var"##344" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##344"[1] == :curly && (begin var"##345" = var"##344"[2] var"##345" isa AbstractArray end && (ndims(var"##345") === 1 && length(var"##345") >= 0)))))) var"##return#315" = begin return lhs == guess_type(m, rhs) end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa (Tuple{var1, Symbol} where var1) && begin var"##346" = var"##317"[1] var"##347" = var"##317"[2] var"##347" isa Symbol end a = var"##346" b = var"##347" var"##return#315" = begin isdefined(m, b) || return false return getfield(m, b) === a end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa (Tuple{Symbol, var2} where var2) && (begin var"##348" = var"##317"[1] var"##348" isa Symbol end && begin var"##349" = var"##317"[2] true end) a = var"##349" b = var"##348" var"##return#315" = begin isdefined(m, b) || return false return getfield(m, b) === a end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa (Tuple{var1, Expr} where var1) && begin var"##350" = var"##317"[1] var"##351" = var"##317"[2] var"##351" isa Expr end a = var"##350" b = var"##351" var"##return#315" = begin try return a == Base.eval(m, b) catch _ return false end end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa (Tuple{Expr, var2} where var2) && (begin var"##352" = var"##317"[1] var"##352" isa Expr end && begin var"##353" = var"##317"[2] true end) a = var"##353" b = var"##352" var"##return#315" = begin try return a == Base.eval(m, b) catch _ return false end end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa (Tuple{Module, var2} where var2) && (begin var"##354" = var"##317"[1] var"##354" isa Module end && begin var"##355" = var"##317"[2] true end) a = var"##354" b = var"##355" var"##return#315" = begin mod = guess_module(m, b) isnothing(mod) && return false return a === mod end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end if var"##317" isa (Tuple{var1, Module} where var1) && begin var"##356" = var"##317"[1] var"##357" = var"##317"[2] var"##357" isa Module end a = var"##357" b = var"##356" var"##return#315" = begin mod = guess_module(m, b) isnothing(mod) && return false return a === mod end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end end if var"##317" isa Tuple{TypeVar, TypeVar} if begin var"##358" = var"##317"[1] var"##358" isa TypeVar end && begin var"##359" = var"##317"[2] var"##359" isa TypeVar end var"##return#315" = begin compare_expr(m, lhs.lb, rhs.lb) || return false compare_expr(m, lhs.ub, rhs.ub) || return false return true end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end end if var"##317" isa Tuple{LineNumberNode, LineNumberNode} if begin var"##360" = var"##317"[1] var"##360" isa LineNumberNode end && begin var"##361" = var"##317"[2] var"##361" isa LineNumberNode end var"##return#315" = begin return true end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end end if var"##317" isa Tuple{GlobalRef, GlobalRef} if begin var"##362" = var"##317"[1] var"##362" isa GlobalRef end && begin var"##363" = var"##317"[2] var"##363" isa GlobalRef end var"##return#315" = begin return lhs === rhs end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end end if var"##317" isa Tuple{Variable, Variable} if begin var"##364" = var"##317"[1] var"##364" isa Variable end && begin var"##365" = var"##317"[2] var"##365" isa Variable end var"##return#315" = begin return true end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end end begin var"##return#315" = begin return lhs == rhs end $(Expr(:symbolicgoto, Symbol("####final#316#366"))) end error("matching non-exhaustive, at #= none:161 =#") $(Expr(:symboliclabel, Symbol("####final#316#366"))) var"##return#315" end end function compare_expr_object(m::Module, lhs::Expr, rhs::Expr) begin true var"##369" = (lhs, rhs) if var"##369" isa Tuple{Expr, Expr} if begin begin var"##cache#371" = nothing end var"##370" = var"##369"[1] var"##370" isa Expr end && (begin if var"##cache#371" === nothing var"##cache#371" = Some(((var"##370").head, (var"##370").args)) end var"##372" = (var"##cache#371").value var"##372" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##372"[1] == :(::) && (begin var"##373" = var"##372"[2] var"##373" isa AbstractArray end && (length(var"##373") === 1 && (begin var"##374" = var"##373"[1] begin var"##cache#376" = nothing end var"##375" = var"##369"[2] var"##375" isa Expr end && (begin if var"##cache#376" === nothing var"##cache#376" = Some(((var"##375").head, (var"##375").args)) end var"##377" = (var"##cache#376").value var"##377" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##377"[1] == :(::) && (begin var"##378" = var"##377"[2] var"##378" isa AbstractArray end && (length(var"##378") === 1 && begin var"##379" = var"##378"[1] true end))))))))) tx = var"##374" ty = var"##379" var"##return#367" = begin tx = guess_type(m, tx) ty = guess_type(m, ty) return compare_expr(m, tx, ty) end $(Expr(:symbolicgoto, Symbol("####final#368#440"))) end if begin begin var"##cache#381" = nothing end var"##380" = var"##369"[1] var"##380" isa Expr end && (begin if var"##cache#381" === nothing var"##cache#381" = Some(((var"##380").head, (var"##380").args)) end var"##382" = (var"##cache#381").value var"##382" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##382"[1] == :(::) && (begin var"##383" = var"##382"[2] var"##383" isa AbstractArray end && (length(var"##383") === 2 && (begin var"##384" = var"##383"[1] var"##385" = var"##383"[2] begin var"##cache#387" = nothing end var"##386" = var"##369"[2] var"##386" isa Expr end && (begin if var"##cache#387" === nothing var"##cache#387" = Some(((var"##386").head, (var"##386").args)) end var"##388" = (var"##cache#387").value var"##388" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##388"[1] == :(::) && (begin var"##389" = var"##388"[2] var"##389" isa AbstractArray end && (length(var"##389") === 2 && begin var"##390" = var"##389"[1] var"##391" = var"##389"[2] true end))))))))) tx = var"##385" y = var"##390" ty = var"##391" x = var"##384" var"##return#367" = begin tx = guess_type(m, tx) ty = guess_type(m, ty) return compare_expr(m, x, y) && compare_expr(m, tx, ty) end $(Expr(:symbolicgoto, Symbol("####final#368#440"))) end if begin begin var"##cache#393" = nothing end var"##392" = var"##369"[1] var"##392" isa Expr end && (begin if var"##cache#393" === nothing var"##cache#393" = Some(((var"##392").head, (var"##392").args)) end var"##394" = (var"##cache#393").value var"##394" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##394"[1] == :. && (begin var"##395" = var"##394"[2] var"##395" isa AbstractArray end && (length(var"##395") === 2 && (begin var"##396" = var"##395"[1] var"##397" = var"##395"[2] var"##397" isa QuoteNode end && (begin var"##398" = (var"##397").value begin var"##cache#400" = nothing end var"##399" = var"##369"[2] var"##399" isa Expr end && (begin if var"##cache#400" === nothing var"##cache#400" = Some(((var"##399").head, (var"##399").args)) end var"##401" = (var"##cache#400").value var"##401" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##401"[1] == :. && (begin var"##402" = var"##401"[2] var"##402" isa AbstractArray end && (length(var"##402") === 2 && (begin var"##403" = var"##402"[1] var"##404" = var"##402"[2] var"##404" isa QuoteNode end && begin var"##405" = (var"##404").value true end))))))))))) sub_a = var"##398" sub_b = var"##405" mod_b = var"##403" mod_a = var"##396" var"##return#367" = begin mod_a = guess_module(m, mod_a) mod_b = guess_module(m, mod_b) compare_expr(m, mod_a, mod_b) || return false return compare_expr(m, sub_a, sub_b) end $(Expr(:symbolicgoto, Symbol("####final#368#440"))) end if begin begin var"##cache#407" = nothing end var"##406" = var"##369"[1] var"##406" isa Expr end && (begin if var"##cache#407" === nothing var"##cache#407" = Some(((var"##406").head, (var"##406").args)) end var"##408" = (var"##cache#407").value var"##408" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##408"[1] == :where && (begin var"##409" = var"##408"[2] var"##409" isa AbstractArray end && ((ndims(var"##409") === 1 && length(var"##409") >= 0) && (begin begin var"##cache#411" = nothing end var"##410" = var"##369"[2] var"##410" isa Expr end && (begin if var"##cache#411" === nothing var"##cache#411" = Some(((var"##410").head, (var"##410").args)) end var"##412" = (var"##cache#411").value var"##412" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##412"[1] == :where && (begin var"##413" = var"##412"[2] var"##413" isa AbstractArray end && (ndims(var"##413") === 1 && length(var"##413") >= 0))))))))) var"##return#367" = begin return compare_where(m, lhs, rhs) end $(Expr(:symbolicgoto, Symbol("####final#368#440"))) end if begin begin var"##cache#415" = nothing end var"##414" = var"##369"[1] var"##414" isa Expr end && (begin if var"##cache#415" === nothing var"##cache#415" = Some(((var"##414").head, (var"##414").args)) end var"##416" = (var"##cache#415").value var"##416" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##416"[1] == :curly && (begin var"##417" = var"##416"[2] var"##417" isa AbstractArray end && ((ndims(var"##417") === 1 && length(var"##417") >= 0) && (begin begin var"##cache#419" = nothing end var"##418" = var"##369"[2] var"##418" isa Expr end && (begin if var"##cache#419" === nothing var"##cache#419" = Some(((var"##418").head, (var"##418").args)) end var"##420" = (var"##cache#419").value var"##420" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##420"[1] == :curly && (begin var"##421" = var"##420"[2] var"##421" isa AbstractArray end && (ndims(var"##421") === 1 && length(var"##421") >= 0))))))))) var"##return#367" = begin return compare_curly(m, lhs, rhs) end $(Expr(:symbolicgoto, Symbol("####final#368#440"))) end if begin begin var"##cache#423" = nothing end var"##422" = var"##369"[1] var"##422" isa Expr end && (begin if var"##cache#423" === nothing var"##cache#423" = Some(((var"##422").head, (var"##422").args)) end var"##424" = (var"##cache#423").value var"##424" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##424"[1] == :macrocall && (begin var"##425" = var"##424"[2] var"##425" isa AbstractArray end && ((ndims(var"##425") === 1 && length(var"##425") >= 0) && (begin begin var"##cache#427" = nothing end var"##426" = var"##369"[2] var"##426" isa Expr end && (begin if var"##cache#427" === nothing var"##cache#427" = Some(((var"##426").head, (var"##426").args)) end var"##428" = (var"##cache#427").value var"##428" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##428"[1] == :macrocall && (begin var"##429" = var"##428"[2] var"##429" isa AbstractArray end && (ndims(var"##429") === 1 && length(var"##429") >= 0))))))))) var"##return#367" = begin return compare_macrocall(m, lhs, rhs) end $(Expr(:symbolicgoto, Symbol("####final#368#440"))) end if begin begin var"##cache#431" = nothing end var"##430" = var"##369"[1] var"##430" isa Expr end && (begin if var"##cache#431" === nothing var"##cache#431" = Some(((var"##430").head, (var"##430").args)) end var"##432" = (var"##cache#431").value var"##432" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##432"[1] == :function && (begin var"##433" = var"##432"[2] var"##433" isa AbstractArray end && ((ndims(var"##433") === 1 && length(var"##433") >= 0) && (begin begin var"##cache#435" = nothing end var"##434" = var"##369"[2] var"##434" isa Expr end && (begin if var"##cache#435" === nothing var"##cache#435" = Some(((var"##434").head, (var"##434").args)) end var"##436" = (var"##cache#435").value var"##436" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##436"[1] == :function && (begin var"##437" = var"##436"[2] var"##437" isa AbstractArray end && (ndims(var"##437") === 1 && length(var"##437") >= 0))))))))) var"##return#367" = begin return compare_function(m, lhs, rhs) end $(Expr(:symbolicgoto, Symbol("####final#368#440"))) end if begin var"##438" = var"##369"[1] var"##438" isa Expr end && begin var"##439" = var"##369"[2] var"##439" isa Expr end var"##return#367" = begin lhs.head === rhs.head || return false length(lhs.args) == length(rhs.args) || return false for (a, b) = zip(lhs.args, rhs.args) compare_expr(m, a, b) || return false end return true end $(Expr(:symbolicgoto, Symbol("####final#368#440"))) end end begin var"##return#367" = begin return lhs == rhs end $(Expr(:symbolicgoto, Symbol("####final#368#440"))) end error("matching non-exhaustive, at #= none:206 =#") $(Expr(:symboliclabel, Symbol("####final#368#440"))) var"##return#367" end end function compare_macrocall(m::Module, lhs::Expr, rhs::Expr) length(lhs.args) == length(rhs.args) || return false compare_expr(lhs.args[1], rhs.args[1]) || return false for (a, b) = zip(lhs.args[3:end], rhs.args[3:end]) compare_expr(m, a, b) || return false end return true end function compare_function(m::Module, lhs::Expr, rhs::Expr) (lhs, rhs) = (canonicalize_lambda_head(lhs), canonicalize_lambda_head(rhs)) compare_expr(m, lhs.args[1], rhs.args[1]) || return false length(lhs.args) == length(rhs.args) == 1 && return true function is_all_lineno(ex) Meta.isexpr(ex, :block) || return false return all((x->begin x isa LineNumberNode end), ex.args) end if length(lhs.args) == 1 is_all_lineno(rhs.args[2]) && return true elseif length(rhs.args) == 1 is_all_lineno(lhs.args[2]) && return true end return compare_expr(m, lhs.args[2], rhs.args[2]) end function compare_curly(m::Module, lhs::Expr, rhs::Expr) type_a = guess_type(m, lhs) type_b = guess_type(m, rhs) (name_a, name_b) = (lhs.args[1], rhs.args[1]) (typevars_a, typevars_b) = (lhs.args[2:end], rhs.args[2:end]) if type_a isa Type || type_b isa Type return type_a === type_b else compare_expr(m, guess_type(m, name_a), guess_type(m, name_b)) || return false length(typevars_a) == length(typevars_b) || return false return all(zip(typevars_a, typevars_b)) do (a, b) compare_expr(m, guess_type(m, a), guess_type(m, b)) end end end function compare_where(m::Module, lhs::Expr, rhs::Expr) (lbody, lparams) = (lhs.args[1], lhs.args[2:end]) (rbody, rparams) = (rhs.args[1], rhs.args[2:end]) lbody = mark_typevars(lbody, name_only.(lparams)) rbody = mark_typevars(rbody, name_only.(rparams)) compare_expr(m, lbody, rbody) || return false return all(zip(lparams, rparams)) do (l, r) l isa Symbol && (r isa Symbol && return true) Meta.isexpr(l, :<:) && Meta.isexpr(r, :<:) || return false return compare_expr(m, l.args[2], r.args[2]) end end function mark_typevars(expr, typevars::Vector{Symbol}) sub = Substitute() do expr expr isa Symbol && (expr in typevars && return true) return false end return sub(Variable, expr) end 7/opt/julia/packages/ExproniconLite/yfi6A/src/codegen.jlA #= none:2 =# Core.@doc " codegen_ast(def)\n\nGenerate Julia AST object `Expr` from a given syntax type.\n\n# Example\n\nOne can generate the Julia AST object from a `JLKwStruct` syntax\ntype.\n\n```julia\njulia> def = @expr JLKwStruct struct Foo{N, T}\n x::T = 1\n end\n#= kw =# struct Foo{N, T}\n #= REPL[19]:2 =#\n x::T = 1\nend\n\njulia> codegen_ast(def)|>rm_lineinfo\nquote\n struct Foo{N, T}\n x::T\n end\n begin\n function Foo{N, T}(; x = 1) where {N, T}\n Foo{N, T}(x)\n end\n function Foo{N}(; x::T = 1) where {N, T}\n Foo{N, T}(x)\n end\n end\nend\n```\n" codegen_ast(ex) = begin ex end function codegen_ast(def::JLFor) lhead = Expr(:block) for (var, itr) = zip(def.vars, def.iterators) push!(lhead.args, :($var = $itr)) end return Expr(:for, lhead, codegen_ast(def.kernel)) end function codegen_ast(def::JLIfElse) isempty(def.conds) && return def.otherwise stmt = (ex = Expr(:if)) for (k, (cond, action)) = enumerate(def) push!(stmt.args, cond) push!(stmt.args, rm_single_block(Expr(:block, codegen_ast(action)))) if k !== length(def) push!(stmt.args, Expr(:elseif)) stmt = stmt.args[end] end end def.otherwise === nothing || push!(stmt.args, codegen_ast(def.otherwise)) return ex end #= none:63 =# @static if VERSION < v"1.10-" function codegen_ast(fn::JLFunction) if fn.head === :function && (fn.name === nothing && (fn.kwargs !== nothing && (isone(length(fn.args)) && isone(length(fn.kwargs))))) kw = (fn.kwargs[1]).args[1] va = (fn.kwargs[1]).args[2] call = Expr(:block, fn.args[1], :($kw = $va)) else if fn.name === nothing call = Expr(:tuple) else call = Expr(:call, fn.name) end if fn.kwargs !== nothing push!(call.args, Expr(:parameters, fn.kwargs...)) end append!(call.args, fn.args) end if fn.rettype !== nothing call = Expr(:(::), call, fn.rettype) end if fn.whereparams !== nothing call = Expr(:where, call, fn.whereparams...) end fn_def = Expr(fn.head, call, maybe_wrap_block(codegen_ast(fn.body))) fn_def = codegen_ast_generated(fn, fn_def) return codegen_ast_docstring(fn, fn_def) end else function codegen_ast(fn::JLFunction) if fn.name === nothing call = Expr(:tuple) else call = Expr(:call, fn.name) end if fn.kwargs !== nothing push!(call.args, Expr(:parameters, fn.kwargs...)) end append!(call.args, fn.args) if fn.rettype !== nothing call = Expr(:(::), call, fn.rettype) end if fn.whereparams !== nothing call = Expr(:where, call, fn.whereparams...) end fn_def = Expr(fn.head, call, maybe_wrap_block(codegen_ast(fn.body))) fn_def = codegen_ast_generated(fn, fn_def) return codegen_ast_docstring(fn, fn_def) end end function codegen_ast(def::JLStruct) return codegen_ast_struct(def) end function codegen_ast(def::JLKwStruct) quote $(codegen_ast_struct(def)) $(codegen_ast_kwfn(def)) nothing end end function maybe_wrap_block(ex::Expr) ex.head === :block && return ex return Expr(:block, ex) end #= none:141 =# Core.@doc " codegen_ast_kwfn(def[, name = nothing])\n\nGenerate the keyword function from a Julia struct definition.\n\n# Example\n\n```julia\njulia> def = @expr JLKwStruct struct Foo{N, T}\n x::T = 1\n end\n#= kw =# struct Foo{N, T}\n #= REPL[19]:2 =#\n x::T = 1\nend\n\njulia> codegen_ast_kwfn(def)|>prettify\nquote\n function Foo{N, T}(; x = 1) where {N, T}\n Foo{N, T}(x)\n end\n function Foo{N}(; x::T = 1) where {N, T}\n Foo{N, T}(x)\n end\nend\n\njulia> def = @expr JLKwStruct struct Foo\n x::Int = 1\n end\n#= kw =# struct Foo\n #= REPL[23]:2 =#\n x::Int = 1\nend\n\njulia> codegen_ast_kwfn(def)|>prettify\nquote\n function Foo(; x = 1)\n Foo(x)\n end\n nothing\nend\n```\n" function codegen_ast_kwfn(def, name = nothing) quote $(codegen_ast_kwfn_plain(def, name)) $(codegen_ast_kwfn_infer(def, name)) end end #= none:191 =# Core.@doc " codegen_ast_kwfn_plain(def[, name = nothing])\n\nGenerate the plain keyword function that does not infer type variables.\nSo that one can use the type conversions defined by constructors.\n" function codegen_ast_kwfn_plain(def, name = nothing) isempty(def.fields) && return nothing struct_name = struct_name_plain(def) if name === nothing name = struct_name args = [] whereparams = if isempty(def.typevars) nothing else name_only.(def.typevars) end else #= none:206 =# @gensym T args = [:(::Type{$T})] whereparams = [name_only.(def.typevars)..., :($T <: $struct_name)] end has_kwfn_constructor(def, name) && return nothing kwfn_def = JLFunction(; name = name, args = args, kwargs = codegen_ast_fields(def.fields; just_name = true), whereparams = whereparams, body = Expr(:call, struct_name, [field.name for field = def.fields]...)) return codegen_ast(kwfn_def) end #= none:229 =# Core.@doc " codegen_ast_kwfn_infer(def, name = nothing)\n\nGenerate the keyword function that infers the type.\n" function codegen_ast_kwfn_infer(def, name = nothing) isempty(def.typevars) && return nothing struct_name = struct_name_without_inferable(def) requires = uninferrable_typevars(def) length(requires) == length(def.typevars) && return nothing if name === nothing name = struct_name args = [] whereparams = if isempty(requires) nothing else requires end else #= none:247 =# @gensym T ub = if isempty(requires) def.name else Expr(:curly, def.name, requires...) end args = [:(::Type{$T})] whereparams = [requires..., :($T <: $ub)] end has_kwfn_constructor(def, name) && return nothing kwfn_def = JLFunction(; name = name, args = args, kwargs = codegen_ast_fields(def.fields; just_name = true), whereparams = whereparams, body = Expr(:call, struct_name, [field.name for field = def.fields]...)) return codegen_ast(kwfn_def) end #= none:269 =# Core.@doc " codegen_ast_fields(fields; just_name::Bool=true)\n\nGenerate a list of Julia AST object for each field, only generate\na list of field names by default, option `just_name` can be turned\noff to call [`codegen_ast`](@ref) on each field object.\n" function codegen_ast_fields(fields; just_name::Bool = true) map(fields) do field name = if just_name field.name else codegen_ast(field) end support_default(field) || return name if field.default === no_default name else Expr(:kw, name, field.default) end end end #= none:289 =# Core.@doc " struct_name_plain(def)\n\nPlain constructor name. See also [`struct_name_without_inferable`](@ref).\n\n# Example\n\n```julia\njulia> def = @expr JLKwStruct struct Foo{N, Inferable}\n x::Inferable = 1\nend\n\njulia> struct_name_plain(def)\n:(Foo{N, Inferable})\n```\n" function struct_name_plain(def) isempty(def.typevars) && return def.name return Expr(:curly, def.name, name_only.(def.typevars)...) end #= none:310 =# Core.@doc " struct_name_without_inferable(def; leading_inferable::Bool=true)\n\nConstructor name that assume some of the type variables is inferred.\nSee also [`struct_name_plain`](@ref). The kwarg `leading_inferable`\ncan be used to configure whether to preserve the leading inferable\ntype variables, the default is `true` to be consistent with the\ndefault julia constructors.\n\n# Example\n\n```julia\njulia> def = @expr JLKwStruct struct Foo{N, Inferable}\n x::Inferable = 1\nend\n\njulia> struct_name_without_inferable(def)\n:(Foo{N})\n\njulia> def = @expr JLKwStruct struct Foo{Inferable, NotInferable}\n x::Inferable\nend\n\njulia> struct_name_without_inferable(def; leading_inferable=true)\n:(Foo{Inferable, NotInferable})\n\njulia> struct_name_without_inferable(def; leading_inferable=false)\n:(Foo{NotInferable})\n```\n" function struct_name_without_inferable(def; leading_inferable::Bool = true) isempty(def.typevars) && return def.name required_typevars = uninferrable_typevars(def; leading_inferable = leading_inferable) isempty(required_typevars) && return def.name return Expr(:curly, def.name, required_typevars...) end function codegen_ast_docstring(def, body) def.doc === nothing && return body Expr(:macrocall, GlobalRef(Core, Symbol("@doc")), def.line, def.doc, body) end function codegen_ast_generated(def::JLFunction, body) def.generated || return body return Expr(:macrocall, Expr(:., Base, QuoteNode(Symbol("@generated"))), def.line, body) end #= none:357 =# Core.@doc " codegen_ast_struct_head(def)\n\nGenerate the struct head.\n\n# Example\n\n```julia\njulia> using Expronicon\n\njulia> def = JLStruct(:(struct Foo{T} end))\nstruct Foo{T}\nend\n\njulia> codegen_ast_struct_head(def)\n:(Foo{T})\n\njulia> def = JLStruct(:(struct Foo{T} <: AbstractArray end))\nstruct Foo{T} <: AbstractArray\nend\n\njulia> codegen_ast_struct_head(def)\n:(Foo{T} <: AbstractArray)\n```\n" function codegen_ast_struct_head(def) head = def.name::Symbol if !(isempty(def.typevars)) head = Expr(:curly, head, def.typevars...) end if def.supertype !== nothing head = Expr(:<:, head, def.supertype) end return head end #= none:394 =# Core.@doc " codegen_ast_struct_body(def)\n\nGenerate the struct body.\n\n# Example\n\n```julia\njulia> def = JLStruct(:(struct Foo\n x::Int\n \n Foo(x::Int) = new(x)\n end))\nstruct Foo\n x::Int\nend\n\njulia> codegen_ast_struct_body(def)\nquote\n #= REPL[15]:2 =#\n x::Int\n Foo(x::Int) = begin\n #= REPL[15]:4 =#\n new(x)\n end\nend\n```\n" function codegen_ast_struct_body(def) body = Expr(:block) for field = def.fields field.line === nothing || push!(body.args, field.line) field.doc === nothing || push!(body.args, field.doc) push!(body.args, codegen_ast(field)) end for constructor = def.constructors push!(body.args, codegen_ast(constructor)) end body = flatten_blocks(body) def.misc === nothing || append!(body.args, def.misc) return body end #= none:439 =# Core.@doc " codegen_ast_struct(def)\n\nGenerate pure Julia struct `Expr` from struct definition. This is equivalent\nto `codegen_ast` for `JLStruct`. See also [`codegen_ast`](@ref).\n\n# Example\n\n```julia-repl\njulia> def = JLKwStruct(:(struct Foo\n x::Int=1\n \n Foo(x::Int) = new(x)\n end))\nstruct Foo\n x::Int = 1\nend\n\njulia> codegen_ast_struct(def)\n:(struct Foo\n #= REPL[21]:2 =#\n x::Int\n Foo(x::Int) = begin\n #= REPL[21]:4 =#\n new(x)\n end\n end)\n```\n" function codegen_ast_struct(def) head = codegen_ast_struct_head(def) body = codegen_ast_struct_body(def) ex = Expr(:struct, def.ismutable, head, body) return codegen_ast_docstring(def, ex) end function codegen_ast(def::Union{JLField, JLKwField}) expr = if def.type === Any def.name else :($(def.name)::$(def.type)) end #= none:482 =# @static if VERSION > v"1.8-" def.isconst && return Expr(:const, expr) end return expr end #= none:490 =# Core.@doc " xtuple(xs...)\n\nCreate a `Tuple` expression.\n" xtuple(xs...) = begin Expr(:tuple, xs...) end #= none:497 =# Core.@doc " xnamedtuple(;kw...)\n\nCreate a `NamedTuple` expression.\n" function xnamedtuple(; kw...) ex = Expr(:tuple) for (k, v) = kw push!(ex.args, :($k = $v)) end return ex end #= none:510 =# Core.@doc " xcall(name, args...; kw...)\n\nCreate a function call to `name`.\n" function xcall(name, args...; kw...) isempty(kw) && return Expr(:call, name, args...) p = Expr(:parameters) for (k, v) = kw push!(p.args, Expr(:kw, k, v)) end Expr(:call, name, p, args...) end #= none:524 =# Core.@doc " xcall(m::Module, name::Symbol, args...; kw...)\n\nCreate a function call to `GlobalRef(m, name)`.\n\n!!! tip\n\n due to [Revise/#616](https://github.com/timholy/Revise.jl/issues/616),\n to make your macro work with Revise, we use the dot expression\n `Expr(:., , QuoteNode())` instead of `GlobalRef` here.\n" function xcall(m::Module, name::Symbol, args...; kw...) xcall(Expr(:., m, QuoteNode(name)), args...; kw...) end #= none:540 =# Core.@doc " xgetindex(collection, key...)\n\nCreate a function call expression to `Base.getindex`.\n" xgetindex(coll, key...) = begin xcall(Base, :getindex, coll, key...) end #= none:547 =# Core.@doc " xpush(collection, items...)\n\nCreate a function call expression to `Base.push!`.\n" function xpush(collection, items...) xcall(Base, :push!, collection, items...) end #= none:556 =# Core.@doc " xfirst(collection)\n\nCreate a function call expression to `Base.first`.\n" xfirst(collection) = begin xcall(Base, :first, collection) end #= none:563 =# Core.@doc " xlast(collection)\n\nCreate a function call expression to `Base.last`.\n" xlast(collection) = begin xcall(Base, :last, collection) end #= none:570 =# Core.@doc " xprint(xs...)\n\nCreate a function call expression to `Base.print`.\n" xprint(xs...) = begin xcall(Base, :print, xs...) end #= none:577 =# Core.@doc " xprintln(xs...)\n\nCreate a function call expression to `Base.println`.\n" xprintln(xs...) = begin xcall(Base, :println, xs...) end #= none:584 =# Core.@doc " xmap(f, xs...)\n\nCreate a function call expression to `Base.map`.\n" xmap(f, xs...) = begin xcall(Base, :map, f, xs...) end #= none:591 =# Core.@doc " xmapreduce(f, op, xs...)\n\nCreate a function call expression to `Base.mapreduce`.\n" xmapreduce(f, op, xs...) = begin xcall(Base, :mapreduce, f, op, xs...) end #= none:598 =# Core.@doc " xiterate(it)\n\nCreate a function call expression to `Base.iterate`.\n" xiterate(it) = begin xcall(Base, :iterate, it) end #= none:605 =# Core.@doc " xiterate(it, st)\n\nCreate a function call expression to `Base.iterate`.\n" xiterate(it, st) = begin xcall(Base, :iterate, it, st) end ;/opt/julia/packages/ExproniconLite/yfi6A/src/print/print.jl __include_generated__("utils.jl") __include_generated__("colors.jl") __include_generated__("inline.jl") __include_generated__("multi.jl") Base.show(io::IO, def::JLExpr) = begin print_inline(io, def) end Base.show(io::IO, ::MIME"text/plain", def::JLExpr) = begin print_expr(io, def) end function (p::Printer)(def::JLExpr) p(codegen_ast(def)) end function (p::InlinePrinter)(def::JLExpr) p(codegen_ast(def)) end #= none:17 =# Core.@doc " sprint_expr(ex; context=nothing, kw...)\n\nPrint given expression to `String`, see also [`print_expr`](@ref).\n" function sprint_expr(ex; context = nothing, kw...) buf = IOBuffer() if context === nothing print_expr(buf, ex; kw...) else print_expr(IOContext(buf, context), ex; kw...) end return String(take!(buf)) end ;/opt/julia/packages/ExproniconLite/yfi6A/src/print/utils.jll function mapjoin(f, xs, sep = ", ") for (i, x) = enumerate(xs) f(x) if i != length(xs) f(sep) end end return nothing end function is_line_no(x) x isa LineNumberNode && return true x isa Expr && (x.head == :line && return true) return false end function split_body(body) return let begin var"##cache#1354" = nothing end var"##return#1351" = nothing var"##1353" = body if var"##1353" isa Expr && (begin if var"##cache#1354" === nothing var"##cache#1354" = Some(((var"##1353").head, (var"##1353").args)) end var"##1355" = (var"##cache#1354").value var"##1355" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1355"[1] == :block && (begin var"##1356" = var"##1355"[2] var"##1356" isa AbstractArray end && ((ndims(var"##1356") === 1 && length(var"##1356") >= 0) && begin var"##1357" = SubArray(var"##1356", (1:length(var"##1356"),)) true end)))) var"##return#1351" = let stmts = var"##1357" stmts end $(Expr(:symbolicgoto, Symbol("####final#1352#1358"))) end begin var"##return#1351" = let (body,) end $(Expr(:symbolicgoto, Symbol("####final#1352#1358"))) end error("matching non-exhaustive, at #= none:18 =#") $(Expr(:symboliclabel, Symbol("####final#1352#1358"))) var"##return#1351" end end const expr_infix_wide = Set{Symbol}([:(=), :+=, :-=, :*=, :/=, :\=, :^=, :&=, :|=, :÷=, :%=, :>>>=, :>>=, :<<=, :.=, :.+=, :.-=, :.*=, :./=, :.\=, :.^=, :.&=, :.|=, :.÷=, :.%=, :.>>>=, :.>>=, :.<<=, :&&, :||, :<:, :$=, :⊻=, :>:, :-->]) </opt/julia/packages/ExproniconLite/yfi6A/src/print/colors.jl< #= none:1 =# Base.@kwdef struct ColorScheme symbol::Int type::Int variable::Int quoted::Int keyword::Int number::Int string::Int comment::Int line::Int call::Int macrocall::Int op::Int end function Monokai256() return ColorScheme(; symbol = 141, type = 141, variable = 141, quoted = 141, keyword = 197, number = 141, string = 185, comment = 240, line = 240, call = 81, macrocall = 81, op = 197) end </opt/julia/packages/ExproniconLite/yfi6A/src/print/inline.jl| #= none:1 =# Base.@kwdef mutable struct InlinePrinterState type::Bool = false symbol::Bool = false call::Bool = false macrocall::Bool = false quoted::Bool = false keyword::Bool = false loop_iterator::Bool = false block::Bool = true precedence::Int = 0 end function with(f::Function, p::InlinePrinterState, name::Symbol, new) old = getfield(p, name) setfield!(p, name, new) f() setfield!(p, name, old) end struct InlinePrinter{IO_t <: IO} io::IO_t color::ColorScheme line::Bool state::InlinePrinterState end function InlinePrinter(io::IO; color::ColorScheme = Monokai256(), line::Bool = false) InlinePrinter(io, color, line, InlinePrinterState()) end function (p::InlinePrinter)(x, xs...; delim = ", ") p(x) for x = xs printstyled(p.io, delim; color = p.color.keyword) p(x) end end function (p::InlinePrinter)(expr) c = p.color print(xs...) = begin Base.print(p.io, xs...) end printstyled(xs...; kw...) = begin Base.printstyled(p.io, xs...; kw...) end function join(xs, delim = ", ") if !(p.line) xs = filter(!is_line_no, xs) end for (i, x) = enumerate(xs) p(x) i < length(xs) && keyword(delim) end end function print_braces(xs, open, close, delim = ", ") print(open) join(xs, delim) print(close) end string(s) = begin printstyled(repr(s); color = c.string) end keyword(s) = begin printstyled(s, color = c.keyword) end assign() = begin if p.state.loop_iterator keyword(" in ") else keyword(" = ") end end function symbol(ex) color = if p.state.type c.type elseif p.state.quoted c.quoted elseif p.state.call c.call elseif p.state.macrocall c.macrocall else :normal end is_gensym(ex) && printstyled("var\""; color = color) printstyled(ex, color = color) is_gensym(ex) && printstyled("\""; color = color) end quoted(ex) = begin with((()->begin p(ex) end), p.state, :quoted, true) end type(ex) = begin with((()->begin p(ex) end), p.state, :type, true) end function call(ex) omit_parent = let begin var"##cache#768" = nothing end var"##return#765" = nothing var"##767" = ex if var"##767" isa Expr if begin if var"##cache#768" === nothing var"##cache#768" = Some(((var"##767").head, (var"##767").args)) end var"##769" = (var"##cache#768").value var"##769" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##769"[1] == :. && (begin var"##770" = var"##769"[2] var"##770" isa AbstractArray end && (ndims(var"##770") === 1 && length(var"##770") >= 0))) var"##return#765" = let true end $(Expr(:symbolicgoto, Symbol("####final#766#771"))) end end if var"##767" isa Symbol begin var"##return#765" = let true end $(Expr(:symbolicgoto, Symbol("####final#766#771"))) end end begin var"##return#765" = let false end $(Expr(:symbolicgoto, Symbol("####final#766#771"))) end error("matching non-exhaustive, at #= none:85 =#") $(Expr(:symboliclabel, Symbol("####final#766#771"))) var"##return#765" end omit_parent || print("(") with((()->begin p(ex) end), p.state, :call, true) omit_parent || print(")") end macrocall(ex) = begin with((()->begin p(ex) end), p.state, :macrocall, true) end noblock(ex) = begin with((()->begin p(ex) end), p.state, :block, false) end block(ex) = begin with((()->begin p(ex) end), p.state, :block, true) end function precedence(f, s) if s isa Int preced = s else preced = Base.operator_precedence(s) end require = preced > 0 && p.state.precedence > 0 require && (p.state.precedence >= preced && print('(')) with(f, p.state, :precedence, preced) require && (p.state.precedence >= preced && print(')')) end function print_call(ex) begin begin var"##cache#775" = nothing end var"##774" = ex if var"##774" isa Expr && (begin if var"##cache#775" === nothing var"##cache#775" = Some(((var"##774").head, (var"##774").args)) end var"##776" = (var"##cache#775").value var"##776" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##776"[1] == :call && (begin var"##777" = var"##776"[2] var"##777" isa AbstractArray end && ((ndims(var"##777") === 1 && length(var"##777") >= 1) && (var"##777"[1] == :(:) && begin var"##778" = SubArray(var"##777", (2:length(var"##777"),)) true end))))) args = var"##778" var"##return#772" = begin precedence(:(:)) do join(args, ":") end end $(Expr(:symbolicgoto, Symbol("####final#773#800"))) end if var"##774" isa Expr && (begin if var"##cache#775" === nothing var"##cache#775" = Some(((var"##774").head, (var"##774").args)) end var"##779" = (var"##cache#775").value var"##779" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##779"[1] == :call && (begin var"##780" = var"##779"[2] var"##780" isa AbstractArray end && (length(var"##780") === 2 && (begin var"##781" = var"##780"[1] var"##781" isa Symbol end && begin var"##782" = var"##780"[2] let f = var"##781", arg = var"##782" Base.isunaryoperator(f) end end))))) f = var"##781" arg = var"##782" var"##return#772" = begin precedence(typemax(Int)) do keyword(f) p(arg) end end $(Expr(:symbolicgoto, Symbol("####final#773#800"))) end if var"##774" isa Expr && (begin if var"##cache#775" === nothing var"##cache#775" = Some(((var"##774").head, (var"##774").args)) end var"##783" = (var"##cache#775").value var"##783" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##783"[1] == :call && (begin var"##784" = var"##783"[2] var"##784" isa AbstractArray end && ((ndims(var"##784") === 1 && length(var"##784") >= 1) && (begin var"##785" = var"##784"[1] var"##785" isa Symbol end && begin var"##786" = SubArray(var"##784", (2:length(var"##784"),)) let f = var"##785", args = var"##786" Base.isbinaryoperator(f) end end))))) f = var"##785" args = var"##786" var"##return#772" = begin precedence(f) do join(args, " $(f) ") end end $(Expr(:symbolicgoto, Symbol("####final#773#800"))) end if var"##774" isa Expr && (begin if var"##cache#775" === nothing var"##cache#775" = Some(((var"##774").head, (var"##774").args)) end var"##787" = (var"##cache#775").value var"##787" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##787"[1] == :call && (begin var"##788" = var"##787"[2] var"##788" isa AbstractArray end && ((ndims(var"##788") === 1 && length(var"##788") >= 2) && (begin var"##789" = var"##788"[1] begin var"##cache#791" = nothing end var"##790" = var"##788"[2] var"##790" isa Expr end && (begin if var"##cache#791" === nothing var"##cache#791" = Some(((var"##790").head, (var"##790").args)) end var"##792" = (var"##cache#791").value var"##792" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##792"[1] == :parameters && (begin var"##793" = var"##792"[2] var"##793" isa AbstractArray end && ((ndims(var"##793") === 1 && length(var"##793") >= 0) && begin var"##794" = SubArray(var"##793", (1:length(var"##793"),)) var"##795" = SubArray(var"##788", (3:length(var"##788"),)) true end))))))))) f = var"##789" args = var"##795" kwargs = var"##794" var"##return#772" = begin call(f) print("(") join(args) keyword("; ") join(kwargs) print(")") end $(Expr(:symbolicgoto, Symbol("####final#773#800"))) end if var"##774" isa Expr && (begin if var"##cache#775" === nothing var"##cache#775" = Some(((var"##774").head, (var"##774").args)) end var"##796" = (var"##cache#775").value var"##796" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##796"[1] == :call && (begin var"##797" = var"##796"[2] var"##797" isa AbstractArray end && ((ndims(var"##797") === 1 && length(var"##797") >= 1) && begin var"##798" = var"##797"[1] var"##799" = SubArray(var"##797", (2:length(var"##797"),)) true end)))) f = var"##798" args = var"##799" var"##return#772" = begin call(f) print_braces(args, "(", ")") end $(Expr(:symbolicgoto, Symbol("####final#773#800"))) end error("matching non-exhaustive, at #= none:111 =#") $(Expr(:symboliclabel, Symbol("####final#773#800"))) var"##return#772" end end function print_function(head, call, body) keyword("$(head) ") p(call) keyword("; ") join(split_body(body), ";") keyword("; end") end function print_expr(ex) begin begin var"##cache#804" = nothing end var"##803" = ex if var"##803" isa GlobalRef begin var"##return#801" = begin p(ex.mod) keyword(".") p(ex.name) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end end if var"##803" isa Nothing begin var"##return#801" = begin printstyled("nothing", color = c.number) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end end if var"##803" isa Symbol begin var"##return#801" = begin symbol(ex) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end end if var"##803" isa Number begin var"##return#801" = begin printstyled(ex, color = c.number) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end end if var"##803" isa Expr if begin if var"##cache#804" === nothing var"##cache#804" = Some(((var"##803").head, (var"##803").args)) end var"##805" = (var"##cache#804").value var"##805" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##805"[1] == :line && (begin var"##806" = var"##805"[2] var"##806" isa AbstractArray end && (length(var"##806") === 2 && begin var"##807" = var"##806"[1] var"##808" = var"##806"[2] true end))) line = var"##808" file = var"##807" var"##return#801" = begin p.line || return nothing printstyled("#= $(file):$(line) =#", color = c.line) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##809" = (var"##cache#804").value var"##809" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##809"[1] == :kw && (begin var"##810" = var"##809"[2] var"##810" isa AbstractArray end && (length(var"##810") === 2 && begin var"##811" = var"##810"[1] var"##812" = var"##810"[2] true end))) k = var"##811" v = var"##812" var"##return#801" = begin p(k) print(" = ") p(v) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##813" = (var"##cache#804").value var"##813" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##813"[1] == :(=) && (begin var"##814" = var"##813"[2] var"##814" isa AbstractArray end && (length(var"##814") === 2 && (begin var"##815" = var"##814"[1] begin var"##cache#817" = nothing end var"##816" = var"##814"[2] var"##816" isa Expr end && (begin if var"##cache#817" === nothing var"##cache#817" = Some(((var"##816").head, (var"##816").args)) end var"##818" = (var"##cache#817").value var"##818" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##818"[1] == :block && (begin var"##819" = var"##818"[2] var"##819" isa AbstractArray end && ((ndims(var"##819") === 1 && length(var"##819") >= 0) && begin var"##820" = SubArray(var"##819", (1:length(var"##819"),)) true end)))))))) k = var"##815" stmts = var"##820" var"##return#801" = begin precedence(:(=)) do if length(stmts) == 2 && count(!is_line_no, stmts) == 1 p(k) assign() p.line && (is_line_no(stmts[1]) && p(stmts[1])) p(stmts[end]) else p(k) assign() p(ex.args[2]) end end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##821" = (var"##cache#804").value var"##821" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##821"[1] == :(=) && (begin var"##822" = var"##821"[2] var"##822" isa AbstractArray end && (length(var"##822") === 2 && begin var"##823" = var"##822"[1] var"##824" = var"##822"[2] true end))) k = var"##823" v = var"##824" var"##return#801" = begin precedence(:(=)) do p(k) assign() p(v) end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##825" = (var"##cache#804").value var"##825" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##825"[1] == :... && (begin var"##826" = var"##825"[2] var"##826" isa AbstractArray end && (length(var"##826") === 1 && begin var"##827" = var"##826"[1] true end))) name = var"##827" var"##return#801" = begin precedence(:...) do p(name) keyword("...") end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##828" = (var"##cache#804").value var"##828" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##828"[1] == :& && (begin var"##829" = var"##828"[2] var"##829" isa AbstractArray end && (length(var"##829") === 1 && begin var"##830" = var"##829"[1] true end))) name = var"##830" var"##return#801" = begin precedence(:&) do keyword("&") p(name) end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##831" = (var"##cache#804").value var"##831" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##831"[1] == :(::) && (begin var"##832" = var"##831"[2] var"##832" isa AbstractArray end && (length(var"##832") === 1 && begin var"##833" = var"##832"[1] true end))) t = var"##833" var"##return#801" = begin precedence(:(::)) do keyword("::") type(t) end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##834" = (var"##cache#804").value var"##834" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##834"[1] == :(::) && (begin var"##835" = var"##834"[2] var"##835" isa AbstractArray end && (length(var"##835") === 2 && begin var"##836" = var"##835"[1] var"##837" = var"##835"[2] true end))) name = var"##836" t = var"##837" var"##return#801" = begin precedence(:(::)) do p(name) keyword("::") type(t) end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##838" = (var"##cache#804").value var"##838" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##838"[1] == :$ && (begin var"##839" = var"##838"[2] var"##839" isa AbstractArray end && (length(var"##839") === 1 && begin var"##840" = var"##839"[1] true end))) name = var"##840" var"##return#801" = begin precedence(:$) do keyword('$') print("(") p(name) print(")") end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##841" = (var"##cache#804").value var"##841" isa (Tuple{var1, var2} where {var2 <: AbstractArray, var1}) end && (begin var"##842" = var"##841"[1] var"##843" = var"##841"[2] var"##843" isa AbstractArray end && (length(var"##843") === 2 && begin var"##844" = var"##843"[1] var"##845" = var"##843"[2] let rhs = var"##845", lhs = var"##844", head = var"##842" head in expr_infix_wide end end)) rhs = var"##845" lhs = var"##844" head = var"##842" var"##return#801" = begin precedence(head) do p(lhs) keyword(" $(head) ") p(rhs) end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##846" = (var"##cache#804").value var"##846" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##846"[1] == :. && (begin var"##847" = var"##846"[2] var"##847" isa AbstractArray end && (length(var"##847") === 1 && begin var"##848" = var"##847"[1] true end))) name = var"##848" var"##return#801" = begin print(name) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##849" = (var"##cache#804").value var"##849" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##849"[1] == :. && (begin var"##850" = var"##849"[2] var"##850" isa AbstractArray end && (length(var"##850") === 2 && (begin var"##851" = var"##850"[1] var"##852" = var"##850"[2] var"##852" isa QuoteNode end && begin var"##853" = (var"##852").value true end)))) name = var"##853" object = var"##851" var"##return#801" = begin precedence(:.) do p(object) keyword(".") if name in Base.quoted_syms p(QuoteNode(name)) else p(name) end end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##854" = (var"##cache#804").value var"##854" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##854"[1] == :. && (begin var"##855" = var"##854"[2] var"##855" isa AbstractArray end && (length(var"##855") === 2 && begin var"##856" = var"##855"[1] var"##857" = var"##855"[2] true end))) name = var"##857" object = var"##856" var"##return#801" = begin precedence(:.) do p(object) keyword(".") p(name) end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##858" = (var"##cache#804").value var"##858" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##858"[1] == :<: && (begin var"##859" = var"##858"[2] var"##859" isa AbstractArray end && (length(var"##859") === 2 && begin var"##860" = var"##859"[1] var"##861" = var"##859"[2] true end))) type = var"##860" supertype = var"##861" var"##return#801" = begin precedence(:<:) do p(type) keyword(" <: ") p(supertype) end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##862" = (var"##cache#804").value var"##862" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##862"[1] == :call && (begin var"##863" = var"##862"[2] var"##863" isa AbstractArray end && (ndims(var"##863") === 1 && length(var"##863") >= 0))) var"##return#801" = begin print_call(ex) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##864" = (var"##cache#804").value var"##864" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##864"[1] == :tuple && (begin var"##865" = var"##864"[2] var"##865" isa AbstractArray end && (length(var"##865") === 1 && (begin begin var"##cache#867" = nothing end var"##866" = var"##865"[1] var"##866" isa Expr end && (begin if var"##cache#867" === nothing var"##cache#867" = Some(((var"##866").head, (var"##866").args)) end var"##868" = (var"##cache#867").value var"##868" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##868"[1] == :parameters && (begin var"##869" = var"##868"[2] var"##869" isa AbstractArray end && ((ndims(var"##869") === 1 && length(var"##869") >= 0) && begin var"##870" = SubArray(var"##869", (1:length(var"##869"),)) true end)))))))) args = var"##870" var"##return#801" = begin print_braces(args, "(;", ")") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##871" = (var"##cache#804").value var"##871" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##871"[1] == :tuple && (begin var"##872" = var"##871"[2] var"##872" isa AbstractArray end && ((ndims(var"##872") === 1 && length(var"##872") >= 0) && begin var"##873" = SubArray(var"##872", (1:length(var"##872"),)) true end))) args = var"##873" var"##return#801" = begin if length(args) == 1 print("(") p(args[1]) print(",)") else print_braces(args, "(", ")") end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##874" = (var"##cache#804").value var"##874" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##874"[1] == :curly && (begin var"##875" = var"##874"[2] var"##875" isa AbstractArray end && ((ndims(var"##875") === 1 && length(var"##875") >= 1) && begin var"##876" = var"##875"[1] var"##877" = SubArray(var"##875", (2:length(var"##875"),)) true end))) args = var"##877" t = var"##876" var"##return#801" = begin with(p.state, :type, true) do p(t) print_braces(args, "{", "}") end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##878" = (var"##cache#804").value var"##878" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##878"[1] == :vect && (begin var"##879" = var"##878"[2] var"##879" isa AbstractArray end && ((ndims(var"##879") === 1 && length(var"##879") >= 0) && begin var"##880" = SubArray(var"##879", (1:length(var"##879"),)) true end))) args = var"##880" var"##return#801" = begin print_braces(args, "[", "]") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##881" = (var"##cache#804").value var"##881" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##881"[1] == :hcat && (begin var"##882" = var"##881"[2] var"##882" isa AbstractArray end && ((ndims(var"##882") === 1 && length(var"##882") >= 0) && begin var"##883" = SubArray(var"##882", (1:length(var"##882"),)) true end))) args = var"##883" var"##return#801" = begin print_braces(args, "[", "]", " ") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##884" = (var"##cache#804").value var"##884" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##884"[1] == :typed_hcat && (begin var"##885" = var"##884"[2] var"##885" isa AbstractArray end && ((ndims(var"##885") === 1 && length(var"##885") >= 1) && begin var"##886" = var"##885"[1] var"##887" = SubArray(var"##885", (2:length(var"##885"),)) true end))) args = var"##887" t = var"##886" var"##return#801" = begin type(t) print_braces(args, "[", "]", " ") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##888" = (var"##cache#804").value var"##888" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##888"[1] == :vcat && (begin var"##889" = var"##888"[2] var"##889" isa AbstractArray end && ((ndims(var"##889") === 1 && length(var"##889") >= 0) && begin var"##890" = SubArray(var"##889", (1:length(var"##889"),)) true end))) args = var"##890" var"##return#801" = begin print_braces(args, "[", "]", "; ") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##891" = (var"##cache#804").value var"##891" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##891"[1] == :ncat && (begin var"##892" = var"##891"[2] var"##892" isa AbstractArray end && ((ndims(var"##892") === 1 && length(var"##892") >= 1) && begin var"##893" = var"##892"[1] var"##894" = SubArray(var"##892", (2:length(var"##892"),)) true end))) n = var"##893" args = var"##894" var"##return#801" = begin print_braces(args, "[", "]", ";" ^ n * " ") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##895" = (var"##cache#804").value var"##895" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##895"[1] == :ref && (begin var"##896" = var"##895"[2] var"##896" isa AbstractArray end && ((ndims(var"##896") === 1 && length(var"##896") >= 1) && begin var"##897" = var"##896"[1] var"##898" = SubArray(var"##896", (2:length(var"##896"),)) true end))) args = var"##898" object = var"##897" var"##return#801" = begin p(object) print_braces(args, "[", "]") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##899" = (var"##cache#804").value var"##899" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##899"[1] == :comprehension && (begin var"##900" = var"##899"[2] var"##900" isa AbstractArray end && (length(var"##900") === 1 && (begin begin var"##cache#902" = nothing end var"##901" = var"##900"[1] var"##901" isa Expr end && (begin if var"##cache#902" === nothing var"##cache#902" = Some(((var"##901").head, (var"##901").args)) end var"##903" = (var"##cache#902").value var"##903" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##903"[1] == :generator && (begin var"##904" = var"##903"[2] var"##904" isa AbstractArray end && (length(var"##904") === 2 && begin var"##905" = var"##904"[1] var"##906" = var"##904"[2] true end)))))))) iter = var"##905" body = var"##906" var"##return#801" = begin preced = p.state.precedence p.state.precedence = 0 with(p.state, :loop_iterator, true) do print("[") p(iter) keyword(" for ") p(body) print("]") end p.state.precedence = preced end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##907" = (var"##cache#804").value var"##907" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##907"[1] == :typed_comprehension && (begin var"##908" = var"##907"[2] var"##908" isa AbstractArray end && (length(var"##908") === 2 && (begin var"##909" = var"##908"[1] begin var"##cache#911" = nothing end var"##910" = var"##908"[2] var"##910" isa Expr end && (begin if var"##cache#911" === nothing var"##cache#911" = Some(((var"##910").head, (var"##910").args)) end var"##912" = (var"##cache#911").value var"##912" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##912"[1] == :generator && (begin var"##913" = var"##912"[2] var"##913" isa AbstractArray end && (length(var"##913") === 2 && begin var"##914" = var"##913"[1] var"##915" = var"##913"[2] true end)))))))) iter = var"##914" body = var"##915" t = var"##909" var"##return#801" = begin preced = p.state.precedence p.state.precedence = 0 with(p.state, :loop_iterator, true) do type(t) print("[") p(iter) keyword(" for ") p(body) print("]") end p.state.precedence = preced end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##916" = (var"##cache#804").value var"##916" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##916"[1] == :-> && (begin var"##917" = var"##916"[2] var"##917" isa AbstractArray end && (length(var"##917") === 2 && (begin var"##918" = var"##917"[1] begin var"##cache#920" = nothing end var"##919" = var"##917"[2] var"##919" isa Expr end && (begin if var"##cache#920" === nothing var"##cache#920" = Some(((var"##919").head, (var"##919").args)) end var"##921" = (var"##cache#920").value var"##921" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##921"[1] == :block && (begin var"##922" = var"##921"[2] var"##922" isa AbstractArray end && (length(var"##922") === 2 && begin var"##923" = var"##922"[1] var"##924" = var"##922"[2] true end)))))))) line = var"##923" code = var"##924" args = var"##918" var"##return#801" = begin p(args) keyword(" -> ") p.line && begin print("(") p(line) print(" ") end p(code) p.line && print(")") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##925" = (var"##cache#804").value var"##925" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##925"[1] == :-> && (begin var"##926" = var"##925"[2] var"##926" isa AbstractArray end && (length(var"##926") === 2 && begin var"##927" = var"##926"[1] var"##928" = var"##926"[2] true end))) args = var"##927" body = var"##928" var"##return#801" = begin p(args) keyword(" -> ") print("(") noblock(body) print(")") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##929" = (var"##cache#804").value var"##929" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##929"[1] == :do && (begin var"##930" = var"##929"[2] var"##930" isa AbstractArray end && (length(var"##930") === 2 && (begin var"##931" = var"##930"[1] begin var"##cache#933" = nothing end var"##932" = var"##930"[2] var"##932" isa Expr end && (begin if var"##cache#933" === nothing var"##cache#933" = Some(((var"##932").head, (var"##932").args)) end var"##934" = (var"##cache#933").value var"##934" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##934"[1] == :-> && (begin var"##935" = var"##934"[2] var"##935" isa AbstractArray end && (length(var"##935") === 2 && (begin begin var"##cache#937" = nothing end var"##936" = var"##935"[1] var"##936" isa Expr end && (begin if var"##cache#937" === nothing var"##cache#937" = Some(((var"##936").head, (var"##936").args)) end var"##938" = (var"##cache#937").value var"##938" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##938"[1] == :tuple && (begin var"##939" = var"##938"[2] var"##939" isa AbstractArray end && ((ndims(var"##939") === 1 && length(var"##939") >= 0) && begin var"##940" = SubArray(var"##939", (1:length(var"##939"),)) var"##941" = var"##935"[2] true end))))))))))))) call = var"##931" args = var"##940" body = var"##941" var"##return#801" = begin p(call) keyword(" do") isempty(args) || begin print(" ") p(args...) end keyword("; ") noblock(body) isempty(args) || print(" ") keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##942" = (var"##cache#804").value var"##942" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##942"[1] == :function && (begin var"##943" = var"##942"[2] var"##943" isa AbstractArray end && (length(var"##943") === 2 && begin var"##944" = var"##943"[1] var"##945" = var"##943"[2] true end))) call = var"##944" body = var"##945" var"##return#801" = begin print_function(:function, call, body) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##946" = (var"##cache#804").value var"##946" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##946"[1] == :quote && (begin var"##947" = var"##946"[2] var"##947" isa AbstractArray end && (length(var"##947") === 1 && begin var"##948" = var"##947"[1] true end))) stmt = var"##948" var"##return#801" = begin keyword(":(") noblock(stmt) keyword(")") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##949" = (var"##cache#804").value var"##949" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##949"[1] == :quote && (begin var"##950" = var"##949"[2] var"##950" isa AbstractArray end && ((ndims(var"##950") === 1 && length(var"##950") >= 0) && begin var"##951" = SubArray(var"##950", (1:length(var"##950"),)) true end))) args = var"##951" var"##return#801" = begin keyword("quote ") with(p.state, :block, false) do join(args, "; ") end keyword(" end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##952" = (var"##cache#804").value var"##952" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##952"[1] == :string && (begin var"##953" = var"##952"[2] var"##953" isa AbstractArray end && ((ndims(var"##953") === 1 && length(var"##953") >= 0) && begin var"##954" = SubArray(var"##953", (1:length(var"##953"),)) true end))) args = var"##954" var"##return#801" = begin printstyled("\"", color = c.string) foreach(args) do x x isa AbstractString && return printstyled(x; color = c.string) keyword('$') x isa Symbol && return p(x) print("(") p(x) print(")") end printstyled("\"", color = c.string) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##955" = (var"##cache#804").value var"##955" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##955"[1] == :block && (begin var"##956" = var"##955"[2] var"##956" isa AbstractArray end && ((ndims(var"##956") === 1 && length(var"##956") >= 0) && begin var"##957" = SubArray(var"##956", (1:length(var"##956"),)) let args = var"##957" length(args) == 2 && (is_line_no(args[1]) && is_line_no(args[2])) end end))) args = var"##957" var"##return#801" = begin p(args[1]) print(" ") p(args[2]) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##958" = (var"##cache#804").value var"##958" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##958"[1] == :block && (begin var"##959" = var"##958"[2] var"##959" isa AbstractArray end && ((ndims(var"##959") === 1 && length(var"##959") >= 0) && begin var"##960" = SubArray(var"##959", (1:length(var"##959"),)) let args = var"##960" length(args) == 2 && is_line_no(args[1]) end end))) args = var"##960" var"##return#801" = begin p(args[1]) print(" ") noblock(args[2]) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##961" = (var"##cache#804").value var"##961" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##961"[1] == :block && (begin var"##962" = var"##961"[2] var"##962" isa AbstractArray end && ((ndims(var"##962") === 1 && length(var"##962") >= 0) && begin var"##963" = SubArray(var"##962", (1:length(var"##962"),)) let args = var"##963" length(args) == 2 && is_line_no(args[2]) end end))) args = var"##963" var"##return#801" = begin noblock(args[1]) print(" ") p(args[2]) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##964" = (var"##cache#804").value var"##964" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##964"[1] == :block && (begin var"##965" = var"##964"[2] var"##965" isa AbstractArray end && ((ndims(var"##965") === 1 && length(var"##965") >= 0) && begin var"##966" = SubArray(var"##965", (1:length(var"##965"),)) let args = var"##966" length(args) == 2 end end))) args = var"##966" var"##return#801" = begin print("(") noblock(args[1]) keyword("; ") noblock(args[2]) print(")") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##967" = (var"##cache#804").value var"##967" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##967"[1] == :block && (begin var"##968" = var"##967"[2] var"##968" isa AbstractArray end && ((ndims(var"##968") === 1 && length(var"##968") >= 0) && begin var"##969" = SubArray(var"##968", (1:length(var"##968"),)) true end))) args = var"##969" var"##return#801" = begin p.state.block && keyword("begin ") with(p.state, :block, true) do join(args, "; ") end p.state.block && keyword(" end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##970" = (var"##cache#804").value var"##970" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##970"[1] == :let && (begin var"##971" = var"##970"[2] var"##971" isa AbstractArray end && (length(var"##971") === 2 && (begin begin var"##cache#973" = nothing end var"##972" = var"##971"[1] var"##972" isa Expr end && (begin if var"##cache#973" === nothing var"##cache#973" = Some(((var"##972").head, (var"##972").args)) end var"##974" = (var"##cache#973").value var"##974" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##974"[1] == :block && (begin var"##975" = var"##974"[2] var"##975" isa AbstractArray end && ((ndims(var"##975") === 1 && length(var"##975") >= 0) && begin var"##976" = SubArray(var"##975", (1:length(var"##975"),)) var"##977" = var"##971"[2] true end)))))))) args = var"##976" body = var"##977" var"##return#801" = begin keyword("let ") join(args, ", ") keyword("; ") noblock(body) keyword("; end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##978" = (var"##cache#804").value var"##978" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##978"[1] == :let && (begin var"##979" = var"##978"[2] var"##979" isa AbstractArray end && (length(var"##979") === 2 && begin var"##980" = var"##979"[1] var"##981" = var"##979"[2] true end))) arg = var"##980" body = var"##981" var"##return#801" = begin keyword("let ") p(arg) keyword("; ") noblock(body) keyword("; end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##982" = (var"##cache#804").value var"##982" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##982"[1] == :macrocall && (begin var"##983" = var"##982"[2] var"##983" isa AbstractArray end && ((ndims(var"##983") === 1 && length(var"##983") >= 2) && begin var"##984" = var"##983"[1] var"##985" = var"##983"[2] var"##986" = SubArray(var"##983", (3:length(var"##983"),)) true end))) f = var"##984" line = var"##985" args = var"##986" var"##return#801" = begin p.line && printstyled(line, color = c.comment) macrocall(f) print_braces(args, "(", ")") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##987" = (var"##cache#804").value var"##987" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##987"[1] == :return && (begin var"##988" = var"##987"[2] var"##988" isa AbstractArray end && (length(var"##988") === 1 && (begin begin var"##cache#990" = nothing end var"##989" = var"##988"[1] var"##989" isa Expr end && (begin if var"##cache#990" === nothing var"##cache#990" = Some(((var"##989").head, (var"##989").args)) end var"##991" = (var"##cache#990").value var"##991" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##991"[1] == :tuple && (begin var"##992" = var"##991"[2] var"##992" isa AbstractArray end && ((ndims(var"##992") === 1 && length(var"##992") >= 1) && (begin begin var"##cache#994" = nothing end var"##993" = var"##992"[1] var"##993" isa Expr end && (begin if var"##cache#994" === nothing var"##cache#994" = Some(((var"##993").head, (var"##993").args)) end var"##995" = (var"##cache#994").value var"##995" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##995"[1] == :parameters && (begin var"##996" = var"##995"[2] var"##996" isa AbstractArray end && ((ndims(var"##996") === 1 && length(var"##996") >= 0) && begin var"##997" = SubArray(var"##996", (1:length(var"##996"),)) var"##998" = SubArray(var"##992", (2:length(var"##992"),)) true end))))))))))))) args = var"##998" kwargs = var"##997" var"##return#801" = begin keyword("return ") p(Expr(:tuple, Expr(:parameters, kwargs...), args...)) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##999" = (var"##cache#804").value var"##999" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##999"[1] == :return && (begin var"##1000" = var"##999"[2] var"##1000" isa AbstractArray end && (length(var"##1000") === 1 && (begin begin var"##cache#1002" = nothing end var"##1001" = var"##1000"[1] var"##1001" isa Expr end && (begin if var"##cache#1002" === nothing var"##cache#1002" = Some(((var"##1001").head, (var"##1001").args)) end var"##1003" = (var"##cache#1002").value var"##1003" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1003"[1] == :tuple && (begin var"##1004" = var"##1003"[2] var"##1004" isa AbstractArray end && ((ndims(var"##1004") === 1 && length(var"##1004") >= 0) && begin var"##1005" = SubArray(var"##1004", (1:length(var"##1004"),)) true end)))))))) args = var"##1005" var"##return#801" = begin keyword("return ") join(args) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1006" = (var"##cache#804").value var"##1006" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1006"[1] == :return && (begin var"##1007" = var"##1006"[2] var"##1007" isa AbstractArray end && ((ndims(var"##1007") === 1 && length(var"##1007") >= 0) && begin var"##1008" = SubArray(var"##1007", (1:length(var"##1007"),)) true end))) args = var"##1008" var"##return#801" = begin keyword("return ") join(args) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1009" = (var"##cache#804").value var"##1009" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1009"[1] == :module && (begin var"##1010" = var"##1009"[2] var"##1010" isa AbstractArray end && (length(var"##1010") === 3 && begin var"##1011" = var"##1010"[1] var"##1012" = var"##1010"[2] var"##1013" = var"##1010"[3] true end))) bare = var"##1011" name = var"##1012" body = var"##1013" var"##return#801" = begin if bare keyword("module ") else keyword("baremodule ") end p(name) print("; ") noblock(body) keyword(" end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1014" = (var"##cache#804").value var"##1014" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1014"[1] == :using && (begin var"##1015" = var"##1014"[2] var"##1015" isa AbstractArray end && ((ndims(var"##1015") === 1 && length(var"##1015") >= 0) && begin var"##1016" = SubArray(var"##1015", (1:length(var"##1015"),)) true end))) args = var"##1016" var"##return#801" = begin keyword("using ") join(args) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1017" = (var"##cache#804").value var"##1017" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1017"[1] == :import && (begin var"##1018" = var"##1017"[2] var"##1018" isa AbstractArray end && ((ndims(var"##1018") === 1 && length(var"##1018") >= 0) && begin var"##1019" = SubArray(var"##1018", (1:length(var"##1018"),)) true end))) args = var"##1019" var"##return#801" = begin keyword("import ") join(args) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1020" = (var"##cache#804").value var"##1020" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1020"[1] == :as && (begin var"##1021" = var"##1020"[2] var"##1021" isa AbstractArray end && (length(var"##1021") === 2 && begin var"##1022" = var"##1021"[1] var"##1023" = var"##1021"[2] true end))) name = var"##1022" alias = var"##1023" var"##return#801" = begin p(name) keyword(" as ") p(alias) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1024" = (var"##cache#804").value var"##1024" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1024"[1] == :export && (begin var"##1025" = var"##1024"[2] var"##1025" isa AbstractArray end && ((ndims(var"##1025") === 1 && length(var"##1025") >= 0) && begin var"##1026" = SubArray(var"##1025", (1:length(var"##1025"),)) true end))) args = var"##1026" var"##return#801" = begin keyword("export ") join(args) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1027" = (var"##cache#804").value var"##1027" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1027"[1] == :(:) && (begin var"##1028" = var"##1027"[2] var"##1028" isa AbstractArray end && ((ndims(var"##1028") === 1 && length(var"##1028") >= 1) && begin var"##1029" = var"##1028"[1] var"##1030" = SubArray(var"##1028", (2:length(var"##1028"),)) true end))) args = var"##1030" head = var"##1029" var"##return#801" = begin p(head) keyword(": ") join(args) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1031" = (var"##cache#804").value var"##1031" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1031"[1] == :where && (begin var"##1032" = var"##1031"[2] var"##1032" isa AbstractArray end && ((ndims(var"##1032") === 1 && length(var"##1032") >= 1) && begin var"##1033" = var"##1032"[1] var"##1034" = SubArray(var"##1032", (2:length(var"##1032"),)) true end))) body = var"##1033" whereparams = var"##1034" var"##return#801" = begin p(body) keyword(" where {") with(p.state, :type, true) do join(whereparams, ", ") end keyword("}") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1035" = (var"##cache#804").value var"##1035" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1035"[1] == :for && (begin var"##1036" = var"##1035"[2] var"##1036" isa AbstractArray end && (length(var"##1036") === 2 && begin var"##1037" = var"##1036"[1] var"##1038" = var"##1036"[2] true end))) body = var"##1038" iteration = var"##1037" var"##return#801" = begin preced = p.state.precedence p.state.precedence = 0 with(p.state, :loop_iterator, true) do keyword("for ") noblock(iteration) keyword("; ") noblock(body) keyword("; end") end p.state.precedence = preced end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1039" = (var"##cache#804").value var"##1039" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1039"[1] == :while && (begin var"##1040" = var"##1039"[2] var"##1040" isa AbstractArray end && (length(var"##1040") === 2 && begin var"##1041" = var"##1040"[1] var"##1042" = var"##1040"[2] true end))) body = var"##1042" condition = var"##1041" var"##return#801" = begin keyword("while ") noblock(condition) keyword("; ") noblock(body) keyword("; end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1043" = (var"##cache#804").value var"##1043" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1043"[1] == :continue && (begin var"##1044" = var"##1043"[2] var"##1044" isa AbstractArray end && isempty(var"##1044"))) var"##return#801" = begin keyword("continue") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1045" = (var"##cache#804").value var"##1045" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1045"[1] == :if && (begin var"##1046" = var"##1045"[2] var"##1046" isa AbstractArray end && (length(var"##1046") === 2 && begin var"##1047" = var"##1046"[1] var"##1048" = var"##1046"[2] true end))) body = var"##1048" condition = var"##1047" var"##return#801" = begin keyword("if ") noblock(condition) keyword("; ") noblock(body) keyword("; end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1049" = (var"##cache#804").value var"##1049" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1049"[1] == :if && (begin var"##1050" = var"##1049"[2] var"##1050" isa AbstractArray end && (length(var"##1050") === 3 && begin var"##1051" = var"##1050"[1] var"##1052" = var"##1050"[2] var"##1053" = var"##1050"[3] true end))) body = var"##1052" elsebody = var"##1053" condition = var"##1051" var"##return#801" = begin keyword("if ") noblock(condition) keyword("; ") noblock(body) keyword("; ") Meta.isexpr(elsebody, :elseif) || keyword("else ") noblock(elsebody) keyword("; end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1054" = (var"##cache#804").value var"##1054" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1054"[1] == :elseif && (begin var"##1055" = var"##1054"[2] var"##1055" isa AbstractArray end && (length(var"##1055") === 2 && begin var"##1056" = var"##1055"[1] var"##1057" = var"##1055"[2] true end))) body = var"##1057" condition = var"##1056" var"##return#801" = begin keyword("elseif ") noblock(condition) keyword("; ") noblock(body) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1058" = (var"##cache#804").value var"##1058" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1058"[1] == :elseif && (begin var"##1059" = var"##1058"[2] var"##1059" isa AbstractArray end && (length(var"##1059") === 3 && begin var"##1060" = var"##1059"[1] var"##1061" = var"##1059"[2] var"##1062" = var"##1059"[3] true end))) body = var"##1061" elsebody = var"##1062" condition = var"##1060" var"##return#801" = begin keyword("elseif ") noblock(condition) keyword("; ") noblock(body) keyword("; ") Meta.isexpr(elsebody, :elseif) || keyword("else") noblock(elsebody) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1063" = (var"##cache#804").value var"##1063" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1063"[1] == :try && (begin var"##1064" = var"##1063"[2] var"##1064" isa AbstractArray end && (length(var"##1064") === 3 && begin var"##1065" = var"##1064"[1] var"##1066" = var"##1064"[2] var"##1067" = var"##1064"[3] true end))) catch_vars = var"##1066" catch_body = var"##1067" try_body = var"##1065" var"##return#801" = begin keyword("try ") noblock(try_body) keyword("; ") keyword("catch") catch_vars == false || begin print(" ") noblock(catch_vars) end keyword(";") noblock(catch_body) keyword("; end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1068" = (var"##cache#804").value var"##1068" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1068"[1] == :try && (begin var"##1069" = var"##1068"[2] var"##1069" isa AbstractArray end && (length(var"##1069") === 4 && begin var"##1070" = var"##1069"[1] var"##1071" = var"##1069"[2] var"##1072" = var"##1069"[3] var"##1073" = var"##1069"[4] true end))) catch_vars = var"##1071" catch_body = var"##1072" try_body = var"##1070" finally_body = var"##1073" var"##return#801" = begin keyword("try ") noblock(try_body) keyword("; ") catch_vars == false || begin keyword("catch ") noblock(catch_vars) end catch_vars == false || begin keyword("; ") noblock(catch_body) end finally_body == false || begin keyword("; finally ") noblock(finally_body) end keyword("; end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1074" = (var"##cache#804").value var"##1074" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1074"[1] == :try && (begin var"##1075" = var"##1074"[2] var"##1075" isa AbstractArray end && (length(var"##1075") === 5 && begin var"##1076" = var"##1075"[1] var"##1077" = var"##1075"[2] var"##1078" = var"##1075"[3] var"##1079" = var"##1075"[4] var"##1080" = var"##1075"[5] true end))) catch_vars = var"##1077" catch_body = var"##1078" try_body = var"##1076" finally_body = var"##1079" else_body = var"##1080" var"##return#801" = begin keyword("try ") noblock(try_body) keyword("; ") catch_vars == false || begin keyword("catch ") noblock(catch_vars) end catch_vars == false || begin keyword("; ") noblock(catch_body) end keyword("; else ") noblock(else_body) finally_body == false || begin keyword("; finally ") noblock(finally_body) end keyword("; end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1081" = (var"##cache#804").value var"##1081" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1081"[1] == :struct && (begin var"##1082" = var"##1081"[2] var"##1082" isa AbstractArray end && (length(var"##1082") === 3 && begin var"##1083" = var"##1082"[1] var"##1084" = var"##1082"[2] var"##1085" = var"##1082"[3] true end))) ismutable = var"##1083" name = var"##1084" body = var"##1085" var"##return#801" = begin if ismutable keyword("mutable struct ") else keyword("struct ") end p(name) keyword("; ") noblock(body) keyword("; end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1086" = (var"##cache#804").value var"##1086" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1086"[1] == :abstract && (begin var"##1087" = var"##1086"[2] var"##1087" isa AbstractArray end && (length(var"##1087") === 1 && begin var"##1088" = var"##1087"[1] true end))) name = var"##1088" var"##return#801" = begin keyword("abstract type ") p(name) keyword(" end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1089" = (var"##cache#804").value var"##1089" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1089"[1] == :primitive && (begin var"##1090" = var"##1089"[2] var"##1090" isa AbstractArray end && (length(var"##1090") === 2 && begin var"##1091" = var"##1090"[1] var"##1092" = var"##1090"[2] true end))) name = var"##1091" size = var"##1092" var"##return#801" = begin keyword("primitive type ") p(name) print(" ") p(size) keyword(" end") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1093" = (var"##cache#804").value var"##1093" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1093"[1] == :meta && (begin var"##1094" = var"##1093"[2] var"##1094" isa AbstractArray end && (length(var"##1094") === 1 && var"##1094"[1] == :inline))) var"##return#801" = begin macrocall(GlobalRef(Base, Symbol("@_inline_meta"))) keyword(";") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1095" = (var"##cache#804").value var"##1095" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1095"[1] == :break && (begin var"##1096" = var"##1095"[2] var"##1096" isa AbstractArray end && isempty(var"##1096"))) var"##return#801" = begin keyword("break") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1097" = (var"##cache#804").value var"##1097" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1097"[1] == :symboliclabel && (begin var"##1098" = var"##1097"[2] var"##1098" isa AbstractArray end && (length(var"##1098") === 1 && begin var"##1099" = var"##1098"[1] true end))) label = var"##1099" var"##return#801" = begin macrocall(GlobalRef(Base, Symbol("@label"))) print(" ") p(label) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1100" = (var"##cache#804").value var"##1100" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1100"[1] == :symbolicgoto && (begin var"##1101" = var"##1100"[2] var"##1101" isa AbstractArray end && (length(var"##1101") === 1 && begin var"##1102" = var"##1101"[1] true end))) label = var"##1102" var"##return#801" = begin macrocall(GlobalRef(Base, Symbol("@goto"))) print(" ") p(label) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end if begin var"##1103" = (var"##cache#804").value var"##1103" isa (Tuple{var1, var2} where {var2 <: AbstractArray, var1}) end && (begin var"##1104" = var"##1103"[1] var"##1105" = var"##1103"[2] var"##1105" isa AbstractArray end && ((ndims(var"##1105") === 1 && length(var"##1105") >= 0) && begin var"##1106" = SubArray(var"##1105", (1:length(var"##1105"),)) true end)) args = var"##1106" head = var"##1104" var"##return#801" = begin keyword('$') print("(") printstyled(:Expr, color = c.call) print("(") keyword(":") printstyled(head, color = c.symbol) print(", ") join(args) print("))") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end end if var"##803" isa QuoteNode if ex.value in Base.quoted_syms var"##return#801" = begin keyword(":(") quoted(ex.value) keyword(")") end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end begin var"##return#801" = begin if ex.value isa Symbol && Base.isidentifier(ex.value) keyword(":") quoted(ex.value) else keyword(":(") quoted(ex.value) keyword(")") end end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end end if var"##803" isa Char begin var"##return#801" = begin printstyled(repr(ex), color = c.string) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end end if var"##803" isa String begin var"##return#801" = begin string(ex) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end end if var"##803" isa LineNumberNode begin var"##return#801" = begin p.line || return nothing printstyled("#= $(ex.file):$(ex.line) =#", color = c.line) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end end begin var"##return#801" = begin print(ex) end $(Expr(:symbolicgoto, Symbol("####final#802#1107"))) end error("matching non-exhaustive, at #= none:142 =#") $(Expr(:symboliclabel, Symbol("####final#802#1107"))) var"##return#801" end end print_expr(expr) return nothing end #= none:455 =# Core.@doc " print_expr([io::IO], ex; kw...)\n\nPrint a given expression within one line.\n`ex` can be a `Expr` or a syntax type `JLExpr`.\n" print_inline(io::IO, expr; kw...) = begin (InlinePrinter(io; kw...))(expr) end print_inline(expr; kw...) = begin (InlinePrinter(stdout; kw...))(expr) end ;/opt/julia/packages/ExproniconLite/yfi6A/src/print/multi.jlG #= none:2 =# Base.@kwdef mutable struct PrinterState indent::Int = 0 level::Int = 0 no_first_line_indent::Bool = false block::Bool = true quoted::Bool = false end function with(f, ps::PrinterState, name::Symbol, new) old = getfield(ps, name) setfield!(ps, name, new) f() setfield!(ps, name, old) return nothing end struct Printer{IO_t <: IO} io::IO_t color::ColorScheme line::Bool always_begin_end::Bool state::PrinterState end function Printer(io::IO; indent::Int = get(io, :indent, 0), color::ColorScheme = Monokai256(), line::Bool = false, always_begin_end = false, root::Bool = true) state = PrinterState(; indent, level = if root 0 else 1 end) Printer(io, color, line, always_begin_end, state) end function (p::Printer)(ex) c = p.color inline = InlinePrinter(p.io, color = c, line = p.line) print(xs...) = begin Base.print(p.io, xs...) end println(xs...) = begin Base.println(p.io, xs...) end printstyled(xs...; kw...) = begin Base.printstyled(p.io, xs...; kw...) end keyword(s) = begin printstyled(s, color = c.keyword) end tab() = begin print(" " ^ p.state.indent) end leading_tab() = begin p.state.no_first_line_indent || tab() end function indent(f; size::Int = 4, level::Int = 1) with(p.state, :level, p.state.level + level) do with(f, p.state, :indent, p.state.indent + size) end end function print_stmts(stmts; leading_indent::Bool = true) first_line = true if !(p.line) stmts = filter(!is_line_no, stmts) end for (i, stmt) = enumerate(stmts) if !leading_indent && first_line first_line = false else tab() end no_first_line_indent() do p(stmt) end if i < length(stmts) println() end end end noblock(f) = begin with(f, p.state, :block, false) end quoted(f) = begin with(f, p.state, :quoted, true) end is_root() = begin p.state.level == 0 end no_first_line_indent(f) = begin with(f, p.state, :no_first_line_indent, true) end function print_if(cond, body, otherwise = nothing) stmts = split_body(body) leading_tab() keyword("if ") inline(cond) println() indent() do print_stmts(stmts) end isnothing(otherwise) || print_else(otherwise) println() tab() keyword("end") end function print_else(otherwise) println() Meta.isexpr(otherwise, :elseif) && return p(otherwise) tab() keyword("else") println() let begin var"##cache#1111" = nothing end var"##return#1108" = nothing var"##1110" = otherwise if var"##1110" isa Expr && (begin if var"##cache#1111" === nothing var"##cache#1111" = Some(((var"##1110").head, (var"##1110").args)) end var"##1112" = (var"##cache#1111").value var"##1112" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1112"[1] == :block && (begin var"##1113" = var"##1112"[2] var"##1113" isa AbstractArray end && ((ndims(var"##1113") === 1 && length(var"##1113") >= 0) && begin var"##1114" = SubArray(var"##1113", (1:length(var"##1113"),)) true end)))) var"##return#1108" = let stmts = var"##1114" indent() do print_stmts(stmts) end end $(Expr(:symbolicgoto, Symbol("####final#1109#1115"))) end begin var"##return#1108" = let indent() do tab() no_first_line_indent() do p(otherwise) end end end $(Expr(:symbolicgoto, Symbol("####final#1109#1115"))) end error("matching non-exhaustive, at #= none:98 =#") $(Expr(:symboliclabel, Symbol("####final#1109#1115"))) var"##return#1108" end end function print_elseif(cond, body, line = nothing, otherwise = nothing) stmts = split_body(body) tab() keyword("elseif ") isnothing(line) || p.line && begin inline(line) print(" ") end inline(cond) println() indent() do print_stmts(stmts) end isnothing(otherwise) || print_else(otherwise) end function print_function(head, call, body) stmts = split_body(body) leading_tab() keyword("$(head) ") inline(call) println() indent() do print_stmts(stmts) end println() tab() keyword("end") end function print_try(body) body == false && return nothing stmts = split_body(body) leading_tab() keyword("try") println() indent() do print_stmts(stmts) end end function print_catch(body, vars) body == false && return nothing stmts = split_body(body) println() tab() keyword("catch") if vars != false print(" ") inline(vars) end println() indent() do print_stmts(stmts) end end function print_finally(body) body == false && return nothing stmts = split_body(body) println() tab() keyword("finally") println() indent() do print_stmts(stmts) end end function print_macrocall(name, line, args) leading_tab() p.line && begin inline(line) print(" ") end with(inline.state, :macrocall, true) do inline(name) end p.state.level += 1 foreach(args) do arg print(" ") p(arg) end end function print_switch(item, line, stmts) leading_tab() p.line && begin inline(line) print(" ") end any(stmts) do stmt let begin var"##cache#1119" = nothing end var"##return#1116" = nothing var"##1118" = stmt if var"##1118" isa Expr && (begin if var"##cache#1119" === nothing var"##cache#1119" = Some(((var"##1118").head, (var"##1118").args)) end var"##1120" = (var"##cache#1119").value var"##1120" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1120"[1] == :macrocall && (begin var"##1121" = var"##1120"[2] var"##1121" isa AbstractArray end && ((ndims(var"##1121") === 1 && length(var"##1121") >= 1) && begin var"##1122" = var"##1121"[1] var"##1122" == Symbol("@case") end)))) var"##return#1116" = let true end $(Expr(:symbolicgoto, Symbol("####final#1117#1123"))) end begin var"##return#1116" = let false end $(Expr(:symbolicgoto, Symbol("####final#1117#1123"))) end error("matching non-exhaustive, at #= none:181 =#") $(Expr(:symboliclabel, Symbol("####final#1117#1123"))) var"##return#1116" end end || return print_macrocall("@switch", line, (item, Expr(:block, stmts...))) is_case(stmt) = begin let begin var"##cache#1127" = nothing end var"##return#1124" = nothing var"##1126" = stmt if var"##1126" isa Expr && (begin if var"##cache#1127" === nothing var"##cache#1127" = Some(((var"##1126").head, (var"##1126").args)) end var"##1128" = (var"##cache#1127").value var"##1128" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1128"[1] == :macrocall && (begin var"##1129" = var"##1128"[2] var"##1129" isa AbstractArray end && ((ndims(var"##1129") === 1 && length(var"##1129") >= 1) && begin var"##1130" = var"##1129"[1] var"##1130" == Symbol("@case") end)))) var"##return#1124" = let true end $(Expr(:symbolicgoto, Symbol("####final#1125#1131"))) end begin var"##return#1124" = let false end $(Expr(:symbolicgoto, Symbol("####final#1125#1131"))) end error("matching non-exhaustive, at #= none:187 =#") $(Expr(:symboliclabel, Symbol("####final#1125#1131"))) var"##return#1124" end end keyword("@switch ") p(item) keyword(" begin") println() indent() do ptr = 1 while ptr <= length(stmts) stmt = stmts[ptr] let begin var"##cache#1135" = nothing end var"##return#1132" = nothing var"##1134" = stmt if var"##1134" isa Expr && (begin if var"##cache#1135" === nothing var"##cache#1135" = Some(((var"##1134").head, (var"##1134").args)) end var"##1136" = (var"##cache#1135").value var"##1136" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1136"[1] == :macrocall && (begin var"##1137" = var"##1136"[2] var"##1137" isa AbstractArray end && (length(var"##1137") === 3 && (begin var"##1138" = var"##1137"[1] var"##1138" == Symbol("@case") end && begin var"##1139" = var"##1137"[2] var"##1140" = var"##1137"[3] true end))))) var"##return#1132" = let pattern = var"##1140", line = var"##1139" tab() keyword("@case ") inline(pattern) println() case_ptr = ptr + 1 case_ptr <= length(stmts) || continue case_stmt = stmts[case_ptr] indent() do while case_ptr <= length(stmts) case_stmt = stmts[case_ptr] if is_case(case_stmt) case_ptr -= 1 break end tab() no_first_line_indent() do p(case_stmt) end println() case_ptr += 1 end end ptr = case_ptr end $(Expr(:symbolicgoto, Symbol("####final#1133#1141"))) end begin var"##return#1132" = let p(stmt) println() end $(Expr(:symbolicgoto, Symbol("####final#1133#1141"))) end error("matching non-exhaustive, at #= none:197 =#") $(Expr(:symboliclabel, Symbol("####final#1133#1141"))) var"##return#1132" end ptr += 1 end end println() tab() keyword("end") end function print_multi_lines(s::AbstractString) buf = IOBuffer(s) line_buf = IOBuffer() while !(eof(buf)) ch = read(buf, Char) if ch == '\n' printstyled(String(take!(line_buf)), color = c.string) println() tab() else ch in ('$',) && write(line_buf, '\\') write(line_buf, ch) end end last_line = String(take!(line_buf)) isempty(last_line) || printstyled(last_line, color = c.string) end begin begin var"##cache#1145" = nothing end var"##1144" = ex if var"##1144" isa Expr if begin if var"##cache#1145" === nothing var"##cache#1145" = Some(((var"##1144").head, (var"##1144").args)) end var"##1146" = (var"##cache#1145").value var"##1146" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1146"[1] == :string && (begin var"##1147" = var"##1146"[2] var"##1147" isa AbstractArray end && ((ndims(var"##1147") === 1 && length(var"##1147") >= 0) && begin var"##1148" = SubArray(var"##1147", (1:length(var"##1147"),)) true end))) args = var"##1148" var"##return#1142" = begin leading_tab() any((arg->begin arg isa AbstractString && occursin('\n', arg) end), args) || return inline(ex) printstyled("\"\"\"\n", color = c.string) tab() for arg = args if arg isa AbstractString print_multi_lines(arg) elseif arg isa Symbol keyword("\$") inline(arg) else keyword("\$") print("(") inline(arg) print(")") end end printstyled("\"\"\"", color = c.string) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1149" = (var"##cache#1145").value var"##1149" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1149"[1] == :block && (begin var"##1150" = var"##1149"[2] var"##1150" isa AbstractArray end && ((ndims(var"##1150") === 1 && length(var"##1150") >= 0) && begin var"##1151" = SubArray(var"##1150", (1:length(var"##1150"),)) true end))) stmts = var"##1151" var"##return#1142" = begin leading_tab() show_begin_end = if p.always_begin_end true else !(is_root()) end if show_begin_end if p.state.quoted keyword("quote") else keyword("begin") end println() end indent(size = if show_begin_end 4 else 0 end, level = 0) do print_stmts(stmts; leading_indent = show_begin_end) end show_begin_end && begin println() tab() keyword("end") end end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1152" = (var"##cache#1145").value var"##1152" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1152"[1] == :quote && (begin var"##1153" = var"##1152"[2] var"##1153" isa AbstractArray end && (length(var"##1153") === 1 && (begin begin var"##cache#1155" = nothing end var"##1154" = var"##1153"[1] var"##1154" isa Expr end && (begin if var"##cache#1155" === nothing var"##cache#1155" = Some(((var"##1154").head, (var"##1154").args)) end var"##1156" = (var"##cache#1155").value var"##1156" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1156"[1] == :block && (begin var"##1157" = var"##1156"[2] var"##1157" isa AbstractArray end && ((ndims(var"##1157") === 1 && length(var"##1157") >= 0) && begin var"##1158" = SubArray(var"##1157", (1:length(var"##1157"),)) let stmts = var"##1158" is_root() end end)))))))) stmts = var"##1158" var"##return#1142" = begin leading_tab() keyword("quote") println() indent(size = 4) do print_stmts(stmts) end println() tab() keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1159" = (var"##cache#1145").value var"##1159" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1159"[1] == :quote && (begin var"##1160" = var"##1159"[2] var"##1160" isa AbstractArray end && (length(var"##1160") === 1 && (begin begin var"##cache#1162" = nothing end var"##1161" = var"##1160"[1] var"##1161" isa Expr end && (begin if var"##cache#1162" === nothing var"##cache#1162" = Some(((var"##1161").head, (var"##1161").args)) end var"##1163" = (var"##cache#1162").value var"##1163" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1163"[1] == :block && (begin var"##1164" = var"##1163"[2] var"##1164" isa AbstractArray end && ((ndims(var"##1164") === 1 && length(var"##1164") >= 0) && begin var"##1165" = SubArray(var"##1164", (1:length(var"##1164"),)) true end)))))))) stmts = var"##1165" var"##return#1142" = begin leading_tab() keyword("quote") println() indent(size = if p.state.quoted 4 else 0 end) do p.state.quoted && begin tab() keyword("quote") println() end indent() do quoted() do print_stmts(stmts; leading_indent = !(is_root())) end end p.state.quoted && begin println() tab() keyword("end") end end println() tab() keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1166" = (var"##cache#1145").value var"##1166" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1166"[1] == :quote && (begin var"##1167" = var"##1166"[2] var"##1167" isa AbstractArray end && (length(var"##1167") === 1 && begin var"##1168" = var"##1167"[1] true end))) code = var"##1168" var"##return#1142" = begin is_root() || begin leading_tab() keyword("quote") println() end indent(size = if is_root() 0 else 4 end) do quoted() do tab() no_first_line_indent() do p(code) end end end is_root() || begin println() tab() keyword("end") end end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1169" = (var"##cache#1145").value var"##1169" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1169"[1] == :let && (begin var"##1170" = var"##1169"[2] var"##1170" isa AbstractArray end && (length(var"##1170") === 2 && (begin begin var"##cache#1172" = nothing end var"##1171" = var"##1170"[1] var"##1171" isa Expr end && (begin if var"##cache#1172" === nothing var"##cache#1172" = Some(((var"##1171").head, (var"##1171").args)) end var"##1173" = (var"##cache#1172").value var"##1173" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1173"[1] == :block && (begin var"##1174" = var"##1173"[2] var"##1174" isa AbstractArray end && ((ndims(var"##1174") === 1 && length(var"##1174") >= 0) && (begin var"##1175" = SubArray(var"##1174", (1:length(var"##1174"),)) begin var"##cache#1177" = nothing end var"##1176" = var"##1170"[2] var"##1176" isa Expr end && (begin if var"##cache#1177" === nothing var"##cache#1177" = Some(((var"##1176").head, (var"##1176").args)) end var"##1178" = (var"##cache#1177").value var"##1178" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1178"[1] == :block && (begin var"##1179" = var"##1178"[2] var"##1179" isa AbstractArray end && ((ndims(var"##1179") === 1 && length(var"##1179") >= 0) && begin var"##1180" = SubArray(var"##1179", (1:length(var"##1179"),)) true end))))))))))))) args = var"##1175" stmts = var"##1180" var"##return#1142" = begin leading_tab() keyword("let ") isempty(args) || inline(args...) println() indent() do print_stmts(stmts) end println() tab() keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1181" = (var"##cache#1145").value var"##1181" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1181"[1] == :if && (begin var"##1182" = var"##1181"[2] var"##1182" isa AbstractArray end && (length(var"##1182") === 2 && begin var"##1183" = var"##1182"[1] var"##1184" = var"##1182"[2] true end))) cond = var"##1183" body = var"##1184" var"##return#1142" = begin print_if(cond, body) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1185" = (var"##cache#1145").value var"##1185" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1185"[1] == :if && (begin var"##1186" = var"##1185"[2] var"##1186" isa AbstractArray end && (length(var"##1186") === 3 && begin var"##1187" = var"##1186"[1] var"##1188" = var"##1186"[2] var"##1189" = var"##1186"[3] true end))) cond = var"##1187" body = var"##1188" otherwise = var"##1189" var"##return#1142" = begin print_if(cond, body, otherwise) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1190" = (var"##cache#1145").value var"##1190" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1190"[1] == :elseif && (begin var"##1191" = var"##1190"[2] var"##1191" isa AbstractArray end && (length(var"##1191") === 2 && (begin begin var"##cache#1193" = nothing end var"##1192" = var"##1191"[1] var"##1192" isa Expr end && (begin if var"##cache#1193" === nothing var"##cache#1193" = Some(((var"##1192").head, (var"##1192").args)) end var"##1194" = (var"##cache#1193").value var"##1194" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1194"[1] == :block && (begin var"##1195" = var"##1194"[2] var"##1195" isa AbstractArray end && (length(var"##1195") === 2 && begin var"##1196" = var"##1195"[1] var"##1197" = var"##1195"[2] var"##1198" = var"##1191"[2] true end)))))))) line = var"##1196" cond = var"##1197" body = var"##1198" var"##return#1142" = begin print_elseif(cond, body, line) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1199" = (var"##cache#1145").value var"##1199" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1199"[1] == :elseif && (begin var"##1200" = var"##1199"[2] var"##1200" isa AbstractArray end && (length(var"##1200") === 2 && begin var"##1201" = var"##1200"[1] var"##1202" = var"##1200"[2] true end))) cond = var"##1201" body = var"##1202" var"##return#1142" = begin print_elseif(cond, body) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1203" = (var"##cache#1145").value var"##1203" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1203"[1] == :elseif && (begin var"##1204" = var"##1203"[2] var"##1204" isa AbstractArray end && (length(var"##1204") === 3 && (begin begin var"##cache#1206" = nothing end var"##1205" = var"##1204"[1] var"##1205" isa Expr end && (begin if var"##cache#1206" === nothing var"##cache#1206" = Some(((var"##1205").head, (var"##1205").args)) end var"##1207" = (var"##cache#1206").value var"##1207" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1207"[1] == :block && (begin var"##1208" = var"##1207"[2] var"##1208" isa AbstractArray end && (length(var"##1208") === 2 && begin var"##1209" = var"##1208"[1] var"##1210" = var"##1208"[2] var"##1211" = var"##1204"[2] var"##1212" = var"##1204"[3] true end)))))))) line = var"##1209" cond = var"##1210" body = var"##1211" otherwise = var"##1212" var"##return#1142" = begin print_elseif(cond, body, line, otherwise) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1213" = (var"##cache#1145").value var"##1213" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1213"[1] == :elseif && (begin var"##1214" = var"##1213"[2] var"##1214" isa AbstractArray end && (length(var"##1214") === 3 && begin var"##1215" = var"##1214"[1] var"##1216" = var"##1214"[2] var"##1217" = var"##1214"[3] true end))) cond = var"##1215" body = var"##1216" otherwise = var"##1217" var"##return#1142" = begin print_elseif(cond, body, nothing, otherwise) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1218" = (var"##cache#1145").value var"##1218" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1218"[1] == :for && (begin var"##1219" = var"##1218"[2] var"##1219" isa AbstractArray end && (length(var"##1219") === 2 && begin var"##1220" = var"##1219"[1] var"##1221" = var"##1219"[2] true end))) body = var"##1221" iteration = var"##1220" var"##return#1142" = begin leading_tab() inline.state.loop_iterator = true preced = inline.state.precedence inline.state.precedence = 0 keyword("for ") inline(split_body(iteration)...) println() inline.state.loop_iterator = false inline.state.precedence = preced stmts = split_body(body) indent() do print_stmts(stmts) end println() tab() keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1222" = (var"##cache#1145").value var"##1222" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1222"[1] == :while && (begin var"##1223" = var"##1222"[2] var"##1223" isa AbstractArray end && (length(var"##1223") === 2 && begin var"##1224" = var"##1223"[1] var"##1225" = var"##1223"[2] true end))) cond = var"##1224" body = var"##1225" var"##return#1142" = begin leading_tab() keyword("while ") inline(cond) println() stmts = split_body(body) indent() do print_stmts(stmts) end println() tab() keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1226" = (var"##cache#1145").value var"##1226" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1226"[1] == :(=) && (begin var"##1227" = var"##1226"[2] var"##1227" isa AbstractArray end && (length(var"##1227") === 2 && (begin var"##1228" = var"##1227"[1] begin var"##cache#1230" = nothing end var"##1229" = var"##1227"[2] var"##1229" isa Expr end && (begin if var"##cache#1230" === nothing var"##cache#1230" = Some(((var"##1229").head, (var"##1229").args)) end var"##1231" = (var"##cache#1230").value var"##1231" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1231"[1] == :block && (begin var"##1232" = var"##1231"[2] var"##1232" isa AbstractArray end && (length(var"##1232") === 2 && (begin var"##1233" = var"##1232"[1] begin var"##cache#1235" = nothing end var"##1234" = var"##1232"[2] var"##1234" isa Expr end && (begin if var"##cache#1235" === nothing var"##cache#1235" = Some(((var"##1234").head, (var"##1234").args)) end var"##1236" = (var"##cache#1235").value var"##1236" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1236"[1] == :if && (begin var"##1237" = var"##1236"[2] var"##1237" isa AbstractArray end && ((ndims(var"##1237") === 1 && length(var"##1237") >= 0) && let line = var"##1233", lhs = var"##1228" is_line_no(line) end))))))))))))) line = var"##1233" lhs = var"##1228" var"##return#1142" = begin leading_tab() inline(lhs) keyword(" = ") inline(line) p(ex.args[2]) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1238" = (var"##cache#1145").value var"##1238" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1238"[1] == :(=) && (begin var"##1239" = var"##1238"[2] var"##1239" isa AbstractArray end && (length(var"##1239") === 2 && (begin var"##1240" = var"##1239"[1] begin var"##cache#1242" = nothing end var"##1241" = var"##1239"[2] var"##1241" isa Expr end && (begin if var"##cache#1242" === nothing var"##cache#1242" = Some(((var"##1241").head, (var"##1241").args)) end var"##1243" = (var"##cache#1242").value var"##1243" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1243"[1] == :block && (begin var"##1244" = var"##1243"[2] var"##1244" isa AbstractArray end && (length(var"##1244") === 2 && begin var"##1245" = var"##1244"[1] var"##1246" = var"##1244"[2] let rhs = var"##1246", line = var"##1245", lhs = var"##1240" is_line_no(line) end end)))))))) rhs = var"##1246" line = var"##1245" lhs = var"##1240" var"##return#1142" = begin leading_tab() inline(ex) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1247" = (var"##cache#1145").value var"##1247" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1247"[1] == :(=) && (begin var"##1248" = var"##1247"[2] var"##1248" isa AbstractArray end && (length(var"##1248") === 2 && begin var"##1249" = var"##1248"[1] var"##1250" = var"##1248"[2] true end))) rhs = var"##1250" lhs = var"##1249" var"##return#1142" = begin leading_tab() inline(lhs) print(" = ") p(rhs) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1251" = (var"##cache#1145").value var"##1251" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1251"[1] == :function && (begin var"##1252" = var"##1251"[2] var"##1252" isa AbstractArray end && (length(var"##1252") === 2 && begin var"##1253" = var"##1252"[1] var"##1254" = var"##1252"[2] true end))) call = var"##1253" body = var"##1254" var"##return#1142" = begin print_function(:function, call, body) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1255" = (var"##cache#1145").value var"##1255" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1255"[1] == :-> && (begin var"##1256" = var"##1255"[2] var"##1256" isa AbstractArray end && (length(var"##1256") === 2 && begin var"##1257" = var"##1256"[1] var"##1258" = var"##1256"[2] true end))) call = var"##1257" body = var"##1258" var"##return#1142" = begin leading_tab() inline(call) keyword(" -> ") p(body) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1259" = (var"##cache#1145").value var"##1259" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1259"[1] == :do && (begin var"##1260" = var"##1259"[2] var"##1260" isa AbstractArray end && (length(var"##1260") === 2 && (begin var"##1261" = var"##1260"[1] begin var"##cache#1263" = nothing end var"##1262" = var"##1260"[2] var"##1262" isa Expr end && (begin if var"##cache#1263" === nothing var"##cache#1263" = Some(((var"##1262").head, (var"##1262").args)) end var"##1264" = (var"##cache#1263").value var"##1264" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1264"[1] == :-> && (begin var"##1265" = var"##1264"[2] var"##1265" isa AbstractArray end && (length(var"##1265") === 2 && (begin begin var"##cache#1267" = nothing end var"##1266" = var"##1265"[1] var"##1266" isa Expr end && (begin if var"##cache#1267" === nothing var"##cache#1267" = Some(((var"##1266").head, (var"##1266").args)) end var"##1268" = (var"##cache#1267").value var"##1268" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1268"[1] == :tuple && (begin var"##1269" = var"##1268"[2] var"##1269" isa AbstractArray end && ((ndims(var"##1269") === 1 && length(var"##1269") >= 0) && begin var"##1270" = SubArray(var"##1269", (1:length(var"##1269"),)) var"##1271" = var"##1265"[2] true end))))))))))))) call = var"##1261" args = var"##1270" body = var"##1271" var"##return#1142" = begin leading_tab() inline(call) keyword(" do ") isempty(args) || inline(args...) println() stmts = split_body(body) indent() do print_stmts(stmts) end println() tab() keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1272" = (var"##cache#1145").value var"##1272" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1272"[1] == :macro && (begin var"##1273" = var"##1272"[2] var"##1273" isa AbstractArray end && (length(var"##1273") === 2 && begin var"##1274" = var"##1273"[1] var"##1275" = var"##1273"[2] true end))) call = var"##1274" body = var"##1275" var"##return#1142" = begin print_function(:macro, call, body) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1276" = (var"##cache#1145").value var"##1276" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1276"[1] == :macrocall && (begin var"##1277" = var"##1276"[2] var"##1277" isa AbstractArray end && (length(var"##1277") === 4 && (begin var"##1278" = var"##1277"[1] var"##1278" == Symbol("@switch") end && (begin var"##1279" = var"##1277"[2] var"##1280" = var"##1277"[3] begin var"##cache#1282" = nothing end var"##1281" = var"##1277"[4] var"##1281" isa Expr end && (begin if var"##cache#1282" === nothing var"##cache#1282" = Some(((var"##1281").head, (var"##1281").args)) end var"##1283" = (var"##cache#1282").value var"##1283" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1283"[1] == :block && (begin var"##1284" = var"##1283"[2] var"##1284" isa AbstractArray end && ((ndims(var"##1284") === 1 && length(var"##1284") >= 0) && begin var"##1285" = SubArray(var"##1284", (1:length(var"##1284"),)) true end))))))))) item = var"##1280" line = var"##1279" stmts = var"##1285" var"##return#1142" = begin print_switch(item, line, stmts) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1286" = (var"##cache#1145").value var"##1286" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1286"[1] == :macrocall && (begin var"##1287" = var"##1286"[2] var"##1287" isa AbstractArray end && (length(var"##1287") === 4 && (begin var"##1288" = var"##1287"[1] var"##1288" == GlobalRef(Core, Symbol("@doc")) end && begin var"##1289" = var"##1287"[2] var"##1290" = var"##1287"[3] var"##1291" = var"##1287"[4] true end)))) line = var"##1289" code = var"##1291" doc = var"##1290" var"##return#1142" = begin leading_tab() p.line && begin inline(line) println() end no_first_line_indent() do p(doc) end println() tab() no_first_line_indent() do p(code) end end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1292" = (var"##cache#1145").value var"##1292" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1292"[1] == :macrocall && (begin var"##1293" = var"##1292"[2] var"##1293" isa AbstractArray end && ((ndims(var"##1293") === 1 && length(var"##1293") >= 2) && begin var"##1294" = var"##1293"[1] var"##1295" = var"##1293"[2] var"##1296" = SubArray(var"##1293", (3:length(var"##1293"),)) true end))) line = var"##1295" name = var"##1294" args = var"##1296" var"##return#1142" = begin print_macrocall(name, line, args) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1297" = (var"##cache#1145").value var"##1297" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1297"[1] == :struct && (begin var"##1298" = var"##1297"[2] var"##1298" isa AbstractArray end && (length(var"##1298") === 3 && begin var"##1299" = var"##1298"[1] var"##1300" = var"##1298"[2] var"##1301" = var"##1298"[3] true end))) ismutable = var"##1299" body = var"##1301" head = var"##1300" var"##return#1142" = begin stmts = split_body(body) leading_tab() keyword(if ismutable "mutable struct" else "struct" end) print(" ") inline(head) println() indent(level = 0) do print_stmts(stmts) end println() tab() keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1302" = (var"##cache#1145").value var"##1302" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1302"[1] == :try && (begin var"##1303" = var"##1302"[2] var"##1303" isa AbstractArray end && (length(var"##1303") === 3 && begin var"##1304" = var"##1303"[1] var"##1305" = var"##1303"[2] var"##1306" = var"##1303"[3] true end))) catch_vars = var"##1305" catch_body = var"##1306" try_body = var"##1304" var"##return#1142" = begin print_try(try_body) print_catch(catch_body, catch_vars) println() tab() keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1307" = (var"##cache#1145").value var"##1307" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1307"[1] == :try && (begin var"##1308" = var"##1307"[2] var"##1308" isa AbstractArray end && (length(var"##1308") === 4 && begin var"##1309" = var"##1308"[1] var"##1310" = var"##1308"[2] var"##1311" = var"##1308"[3] var"##1312" = var"##1308"[4] true end))) catch_vars = var"##1310" catch_body = var"##1311" try_body = var"##1309" finally_body = var"##1312" var"##return#1142" = begin print_try(try_body) print_catch(catch_body, catch_vars) print_finally(finally_body) println() tab() keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1313" = (var"##cache#1145").value var"##1313" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1313"[1] == :try && (begin var"##1314" = var"##1313"[2] var"##1314" isa AbstractArray end && (length(var"##1314") === 5 && begin var"##1315" = var"##1314"[1] var"##1316" = var"##1314"[2] var"##1317" = var"##1314"[3] var"##1318" = var"##1314"[4] var"##1319" = var"##1314"[5] true end))) catch_vars = var"##1316" catch_body = var"##1317" try_body = var"##1315" finally_body = var"##1318" else_body = var"##1319" var"##return#1142" = begin print_try(try_body) print_catch(catch_body, catch_vars) stmts = split_body(else_body) println() tab() keyword("else") println() indent() do print_stmts(stmts) end print_finally(finally_body) println() tab() keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1320" = (var"##cache#1145").value var"##1320" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1320"[1] == :module && (begin var"##1321" = var"##1320"[2] var"##1321" isa AbstractArray end && (length(var"##1321") === 3 && begin var"##1322" = var"##1321"[1] var"##1323" = var"##1321"[2] var"##1324" = var"##1321"[3] true end))) name = var"##1323" body = var"##1324" notbare = var"##1322" var"##return#1142" = begin leading_tab() keyword(if notbare "module " else "baremodule " end) inline(name) println() stmts = split_body(body) indent() do print_stmts(stmts) end println() tab() keyword("end") end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1325" = (var"##cache#1145").value var"##1325" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1325"[1] == :const && (begin var"##1326" = var"##1325"[2] var"##1326" isa AbstractArray end && (length(var"##1326") === 1 && begin var"##1327" = var"##1326"[1] true end))) code = var"##1327" var"##return#1142" = begin leading_tab() keyword("const ") p(code) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1328" = (var"##cache#1145").value var"##1328" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1328"[1] == :return && (begin var"##1329" = var"##1328"[2] var"##1329" isa AbstractArray end && (length(var"##1329") === 1 && (begin begin var"##cache#1331" = nothing end var"##1330" = var"##1329"[1] var"##1330" isa Expr end && (begin if var"##cache#1331" === nothing var"##cache#1331" = Some(((var"##1330").head, (var"##1330").args)) end var"##1332" = (var"##cache#1331").value var"##1332" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1332"[1] == :tuple && (begin var"##1333" = var"##1332"[2] var"##1333" isa AbstractArray end && ((ndims(var"##1333") === 1 && length(var"##1333") >= 1) && (begin begin var"##cache#1335" = nothing end var"##1334" = var"##1333"[1] var"##1334" isa Expr end && (begin if var"##cache#1335" === nothing var"##cache#1335" = Some(((var"##1334").head, (var"##1334").args)) end var"##1336" = (var"##cache#1335").value var"##1336" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1336"[1] == :parameters && (begin var"##1337" = var"##1336"[2] var"##1337" isa AbstractArray end && (ndims(var"##1337") === 1 && length(var"##1337") >= 0))))))))))))) var"##return#1142" = begin inline(ex) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1338" = (var"##cache#1145").value var"##1338" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1338"[1] == :return && (begin var"##1339" = var"##1338"[2] var"##1339" isa AbstractArray end && (length(var"##1339") === 1 && (begin begin var"##cache#1341" = nothing end var"##1340" = var"##1339"[1] var"##1340" isa Expr end && (begin if var"##cache#1341" === nothing var"##cache#1341" = Some(((var"##1340").head, (var"##1340").args)) end var"##1342" = (var"##cache#1341").value var"##1342" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1342"[1] == :tuple && (begin var"##1343" = var"##1342"[2] var"##1343" isa AbstractArray end && (ndims(var"##1343") === 1 && length(var"##1343") >= 0)))))))) var"##return#1142" = begin inline(ex) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1344" = (var"##cache#1145").value var"##1344" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1344"[1] == :return && (begin var"##1345" = var"##1344"[2] var"##1345" isa AbstractArray end && (length(var"##1345") === 1 && begin var"##1346" = var"##1345"[1] true end))) code = var"##1346" var"##return#1142" = begin leading_tab() keyword("return ") p(code) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end if begin var"##1347" = (var"##cache#1145").value var"##1347" isa (Tuple{Symbol, var2} where var2 <: AbstractArray) end && (var"##1347"[1] == :toplevel && (begin var"##1348" = var"##1347"[2] var"##1348" isa AbstractArray end && (length(var"##1348") === 1 && begin var"##1349" = var"##1348"[1] true end))) code = var"##1349" var"##return#1142" = begin leading_tab() printstyled("#= meta: toplevel =#", color = c.comment) println() p(code) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end end if var"##1144" isa String begin var"##return#1142" = begin leading_tab() occursin('\n', ex) || return inline(ex) printstyled("\"\"\"\n", color = c.string) tab() print_multi_lines(ex) printstyled("\"\"\"", color = c.string) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end end begin var"##return#1142" = begin inline(ex) end $(Expr(:symbolicgoto, Symbol("####final#1143#1350"))) end error("matching non-exhaustive, at #= none:246 =#") $(Expr(:symboliclabel, Symbol("####final#1143#1350"))) var"##return#1142" end return nothing end #= none:468 =# Core.@doc " print_expr([io::IO], ex; kw...)\n\nPrint a given expression. `ex` can be a `Expr` or a syntax type `JLExpr`.\n" print_expr(io::IO, ex; kw...) = begin (Printer(io; kw...))(ex) end print_expr(ex; kw...) = begin print_expr(stdout, ex; kw...) end \