Skip to content

Commit

Permalink
Fix precompiles and enforce their validity (#208)
Browse files Browse the repository at this point in the history
`precompile` doesn't error when the specified signature doesn't exist,
it just returns `false`. This enforces a match and fixes the few cases
where we were specifying a nonexistent method.
  • Loading branch information
timholy authored Mar 23, 2019
1 parent 303075b commit c3854f5
Showing 1 changed file with 37 additions and 36 deletions.
73 changes: 37 additions & 36 deletions src/precompile.jl
Original file line number Diff line number Diff line change
@@ -1,44 +1,45 @@
function _precompile_()
ccall(:jl_generating_output, Cint, ()) == 1 || return nothing
precompile(Tuple{typeof(maybe_evaluate_builtin), Frame, Expr, Bool})
precompile(Tuple{typeof(getargs), Vector{Any}, Frame})
precompile(Tuple{typeof(get_call_framecode), Vector{Any}, FrameCode, Int})
for f in (evaluate_call!,
evaluate_structtype,
@assert precompile(Tuple{typeof(maybe_evaluate_builtin), Frame, Expr, Bool})
@assert precompile(Tuple{typeof(getargs), Vector{Any}, Frame})
@assert precompile(Tuple{typeof(get_call_framecode), Vector{Any}, FrameCode, Int})
@assert precompile(evaluate_call_recurse!, (Function, Frame, Expr))
@assert precompile(evaluate_call_compiled!, (Compiled, Frame, Expr))
for f in (evaluate_structtype,
evaluate_abstracttype,
evaluate_primitivetype)
precompile(Tuple{typeof(f), Any, Frame, Expr})
@assert precompile(Tuple{typeof(f), Any, Frame, Expr})
end
precompile(Tuple{typeof(evaluate_foreigncall), Frame, Expr})
precompile(Tuple{typeof(evaluate_methoddef), Frame, Expr})
precompile(Tuple{typeof(lookup_global_refs!), Expr})
precompile(Tuple{typeof(lookup_or_eval), Any, Frame, Any})
precompile(Tuple{typeof(eval_rhs), Any, Frame, Expr})
precompile(Tuple{typeof(step_expr!), Any, Frame, Any, Bool})
@assert precompile(Tuple{typeof(evaluate_foreigncall), Frame, Expr})
@assert precompile(Tuple{typeof(evaluate_methoddef), Frame, Expr})
@assert precompile(Tuple{typeof(lookup_global_refs!), Expr})
@assert precompile(Tuple{typeof(lookup_or_eval), Any, Frame, Any})
@assert precompile(Tuple{typeof(eval_rhs), Any, Frame, Expr})
@assert precompile(Tuple{typeof(step_expr!), Any, Frame, Any, Bool})
for f in (finish!, finish_and_return!, finish_stack!, next_call!, maybe_next_call!, next_line!)
precompile(Tuple{typeof(f), Any, Frame, Bool})
@assert precompile(Tuple{typeof(f), Any, Frame, Bool})
end
precompile(Tuple{typeof(through_methoddef_or_done!), Any, Frame})
precompile(Tuple{typeof(split_expressions), Module, Expr})
precompile(Tuple{typeof(split_expressions!), Vector{Tuple{Module,Expr}}, Dict{Module,Vector{Expr}}, Expr, Module, Expr})
precompile(Tuple{typeof(prepare_thunk), Module, Expr})
precompile(Tuple{typeof(prepare_thunk), Module, Expr, Bool})
precompile(Tuple{typeof(prepare_framedata), FrameCode, Vector{Any}})
precompile(Tuple{typeof(prepare_args), Any, Vector{Any}, Vector{Any}})
precompile(Tuple{typeof(prepare_call), Any, Vector{Any}})
precompile(Tuple{typeof(Core.kwfunc(prepare_call)), NamedTuple{(:enter_generated,),Tuple{Bool}}, typeof(prepare_call), Function, Vector{Any}})
precompile(Tuple{typeof(Core.kwfunc(prepare_framecode)), NamedTuple{(:enter_generated,),Tuple{Bool}}, typeof(prepare_framecode), Method, Type})
precompile(Tuple{typeof(prepare_frame), FrameCode, Vector{Any}, Core.SimpleVector})
precompile(Tuple{typeof(extract_args), Module, Expr})
precompile(Tuple{typeof(enter_call), Int, Int})
precompile(Tuple{typeof(enter_call_expr), Expr})
precompile(Tuple{typeof(copy_codeinfo), Core.CodeInfo})
precompile(Tuple{typeof(optimize!), Core.CodeInfo, Module})
precompile(Tuple{typeof(set_structtype_const), Module, Symbol})
precompile(Tuple{typeof(namedtuple), Vector{Any}})
precompile(Tuple{typeof(resolvefc), Any})
precompile(Tuple{typeof(check_isdefined), Frame, Any})
precompile(Tuple{typeof(find_used), Core.CodeInfo})
precompile(Tuple{typeof(do_assignment!), Frame, Any, Any})
precompile(Tuple{typeof(pc_expr), Frame})
@assert precompile(Tuple{typeof(through_methoddef_or_done!), Any, Frame})
@assert precompile(Tuple{typeof(split_expressions), Module, Expr})
@assert precompile(Tuple{typeof(split_expressions!), Vector{Tuple{Module,Expr}}, Dict{Module,Vector{Expr}}, Expr, Module, Expr})
@assert precompile(Tuple{typeof(prepare_thunk), Module, Expr})
@assert precompile(Tuple{typeof(prepare_thunk), Module, Expr, Bool})
@assert precompile(Tuple{typeof(prepare_framedata), FrameCode, Vector{Any}})
@assert precompile(Tuple{typeof(prepare_args), Any, Vector{Any}, Vector{Any}})
@assert precompile(Tuple{typeof(prepare_call), Any, Vector{Any}})
@assert precompile(Tuple{typeof(Core.kwfunc(prepare_call)), NamedTuple{(:enter_generated,),Tuple{Bool}}, typeof(prepare_call), Function, Vector{Any}})
@assert precompile(Tuple{typeof(Core.kwfunc(prepare_framecode)), NamedTuple{(:enter_generated,),Tuple{Bool}}, typeof(prepare_framecode), Method, Tuple{Int}})
@assert precompile(Tuple{typeof(prepare_frame), FrameCode, Vector{Any}, Core.SimpleVector})
@assert precompile(Tuple{typeof(extract_args), Module, Expr})
@assert precompile(Tuple{typeof(enter_call), Int, Int})
@assert precompile(Tuple{typeof(enter_call_expr), Expr})
@assert precompile(Tuple{typeof(copy_codeinfo), Core.CodeInfo})
@assert precompile(Tuple{typeof(optimize!), Core.CodeInfo, Module})
@assert precompile(Tuple{typeof(set_structtype_const), Module, Symbol})
@assert precompile(Tuple{typeof(namedtuple), Vector{Any}})
@assert precompile(Tuple{typeof(resolvefc), Frame, Any})
@assert precompile(Tuple{typeof(check_isdefined), Frame, Any})
@assert precompile(Tuple{typeof(find_used), Core.CodeInfo})
@assert precompile(Tuple{typeof(do_assignment!), Frame, Any, Any})
@assert precompile(Tuple{typeof(pc_expr), Frame})
end

0 comments on commit c3854f5

Please sign in to comment.