|
1 | | -macro warnpcfail(ex::Expr) |
2 | | - modl = __module__ |
3 | | - file = __source__.file === nothing ? "?" : String(__source__.file) |
4 | | - line = __source__.line |
5 | | - quote |
6 | | - $(esc(ex)) || @warn """precompile directive |
7 | | - $($(Expr(:quote, ex))) |
8 | | - failed. Please report an issue in $($modl) (after checking for duplicates) or remove this directive.""" _file=$file _line=$line |
9 | | - end |
| 1 | +module __RInternal__ |
| 2 | +ftmp() = 1 |
10 | 3 | end |
11 | 4 |
|
12 | 5 | function _precompile_() |
13 | 6 | ccall(:jl_generating_output, Cint, ()) == 1 || return nothing |
| 7 | + # These are blocking so don't actually call them |
| 8 | + precompile(Tuple{TaskThunk}) |
| 9 | + precompile(Tuple{typeof(wait_changed), String}) |
| 10 | + precompile(Tuple{typeof(revise_dir_queued), String}) |
| 11 | + precompile(Tuple{typeof(revise_file_queued), PkgData, String}) |
| 12 | + precompile(Tuple{typeof(watch_manifest), String}) |
| 13 | + # This excludes Revise itself |
| 14 | + precompile(Tuple{typeof(watch_package_callback), PkgId}) |
| 15 | + # Too complicated to bother |
| 16 | + precompile(Tuple{typeof(includet), String}) |
| 17 | + precompile(Tuple{typeof(track), Module, String}) |
| 18 | + precompile(Tuple{typeof(get_def), Method}) |
| 19 | + precompile(Tuple{typeof(entr), Any, Vector{String}}) |
14 | 20 |
|
15 | | - @warnpcfail precompile(Tuple{TaskThunk}) |
16 | | - @warnpcfail precompile(Tuple{typeof(wait_changed), String}) |
17 | | - @warnpcfail precompile(Tuple{typeof(watch_package), PkgId}) |
18 | | - @warnpcfail precompile(Tuple{typeof(watch_includes), Module, String}) |
19 | | - @warnpcfail precompile(Tuple{typeof(watch_manifest), String}) |
20 | | - @warnpcfail precompile(Tuple{typeof(revise_dir_queued), String}) |
21 | | - @warnpcfail precompile(Tuple{typeof(revise_file_queued), PkgData, String}) |
22 | | - @warnpcfail precompile(Tuple{typeof(init_watching), PkgData, Vector{String}}) |
23 | | - @warnpcfail precompile(Tuple{typeof(add_revise_deps)}) |
24 | | - @warnpcfail precompile(Tuple{typeof(watch_package_callback), PkgId}) |
25 | | - |
26 | | - @warnpcfail precompile(Tuple{typeof(revise)}) |
27 | | - @warnpcfail precompile(Tuple{typeof(revise_first), Expr}) |
28 | | - @warnpcfail precompile(Tuple{typeof(includet), String}) |
29 | | - @warnpcfail precompile(Tuple{typeof(track), Module, String}) |
30 | | - # setindex! doesn't fully precompile, but it's still beneficial to do it |
31 | | - # (it shaves off a bit of the time) |
32 | | - # See https://github.com/JuliaLang/julia/pull/31466 |
33 | | - @warnpcfail precompile(Tuple{typeof(setindex!), ExprsSigs, Nothing, RelocatableExpr}) |
34 | | - @warnpcfail precompile(Tuple{typeof(setindex!), ExprsSigs, Vector{Any}, RelocatableExpr}) |
35 | | - @warnpcfail precompile(Tuple{typeof(setindex!), ModuleExprsSigs, ExprsSigs, Module}) |
36 | | - @warnpcfail precompile(Tuple{typeof(setindex!), Dict{PkgId,PkgData}, PkgData, PkgId}) |
37 | | - @warnpcfail precompile(Tuple{Type{WatchList}}) |
38 | | - @warnpcfail precompile(Tuple{typeof(setindex!), Dict{String,WatchList}, WatchList, String}) |
39 | | - |
40 | | - MI = CodeTrackingMethodInfo |
41 | | - @warnpcfail precompile(Tuple{typeof(minimal_evaluation!), MI, Core.CodeInfo, Symbol}) |
42 | | - @warnpcfail precompile(Tuple{typeof(minimal_evaluation!), Any, MI, Core.CodeInfo, Symbol}) |
43 | | - @warnpcfail precompile(Tuple{typeof(methods_by_execution!), Any, MI, DocExprs, Module, Expr}) |
44 | | - @warnpcfail precompile(Tuple{typeof(methods_by_execution!), Any, MI, DocExprs, JuliaInterpreter.Frame, Vector{Bool}}) |
45 | | - @warnpcfail precompile(Tuple{typeof(Core.kwfunc(methods_by_execution!)), |
46 | | - NamedTuple{(:mode,),Tuple{Symbol}}, |
47 | | - typeof(methods_by_execution!), Function, MI, DocExprs, Module, Expr}) |
48 | | - @warnpcfail precompile(Tuple{typeof(Core.kwfunc(methods_by_execution!)), |
49 | | - NamedTuple{(:skip_include,),Tuple{Bool}}, |
50 | | - typeof(methods_by_execution!), Function, MI, DocExprs, Module, Expr}) |
51 | | - @warnpcfail precompile(Tuple{typeof(Core.kwfunc(methods_by_execution!)), |
52 | | - NamedTuple{(:mode, :skip_include),Tuple{Symbol,Bool}}, |
53 | | - typeof(methods_by_execution!), Function, MI, DocExprs, Module, Expr}) |
54 | | - @warnpcfail precompile(Tuple{typeof(Core.kwfunc(methods_by_execution!)), |
55 | | - NamedTuple{(:mode,),Tuple{Symbol}}, |
56 | | - typeof(methods_by_execution!), Function, MI, DocExprs, Frame, Vector{Bool}}) |
57 | | - @warnpcfail precompile(Tuple{typeof(Core.kwfunc(methods_by_execution!)), |
58 | | - NamedTuple{(:mode, :skip_include),Tuple{Symbol,Bool}}, |
59 | | - typeof(methods_by_execution!), Function, MI, DocExprs, Frame, Vector{Bool}}) |
60 | | - |
61 | | - mex = which(methods_by_execution!, (Function, MI, DocExprs, Module, Expr)) |
62 | | - mbody = bodymethod(mex) |
63 | | - # use `typeof(pairs(NamedTuple()))` here since it actually differs between Julia versions |
64 | | - @warnpcfail precompile(Tuple{mbody.sig.parameters[1], Symbol, Bool, Bool, typeof(pairs(NamedTuple())), typeof(methods_by_execution!), Any, MI, DocExprs, Module, Expr}) |
65 | | - @warnpcfail precompile(Tuple{mbody.sig.parameters[1], Symbol, Bool, Bool, Iterators.Pairs{Symbol,Bool,Tuple{Symbol},NamedTuple{(:skip_include,),Tuple{Bool}}}, typeof(methods_by_execution!), Any, MI, DocExprs, Module, Expr}) |
66 | | - mfr = which(methods_by_execution!, (Function, MI, DocExprs, Frame, Vector{Bool})) |
67 | | - mbody = bodymethod(mfr) |
68 | | - @warnpcfail precompile(Tuple{mbody.sig.parameters[1], Symbol, Bool, typeof(methods_by_execution!), Any, MI, DocExprs, Frame, Vector{Bool}}) |
69 | | - |
70 | | - @warnpcfail precompile(Tuple{typeof(hastrackedexpr), Expr}) |
71 | | - @warnpcfail precompile(Tuple{typeof(get_def), Method}) |
72 | | - @warnpcfail precompile(Tuple{typeof(parse_pkg_files), PkgId}) |
73 | | - if isdefined(Revise, :filter_valid_cachefiles) |
74 | | - @warnpcfail precompile(Tuple{typeof(filter_valid_cachefiles), String, Vector{String}}) |
75 | | - end |
76 | | - @warnpcfail precompile(Tuple{typeof(pkg_fileinfo), PkgId}) |
77 | | - @warnpcfail precompile(Tuple{typeof(push!), WatchList, Pair{String,PkgId}}) |
78 | | - @warnpcfail precompile(Tuple{typeof(pushex!), ExprsSigs, Expr}) |
79 | | - @warnpcfail precompile(Tuple{Type{ModuleExprsSigs}, Module}) |
80 | | - @warnpcfail precompile(Tuple{Type{FileInfo}, Module, String}) |
81 | | - @warnpcfail precompile(Tuple{Type{PkgData}, PkgId}) |
82 | | - @warnpcfail precompile(Tuple{typeof(Base._deleteat!), Vector{Tuple{Module,String,Float64}}, Vector{Int}}) |
83 | | - @warnpcfail precompile(Tuple{typeof(add_require), String, Module, String, String, Expr}) |
84 | | - @warnpcfail precompile(Tuple{Core.kwftype(typeof(maybe_add_includes_to_pkgdata!)),NamedTuple{(:eval_now,), Tuple{Bool}},typeof(maybe_add_includes_to_pkgdata!),PkgData,String,Vector{Pair{Module, String}}}) |
85 | | - |
86 | | - for TT in (Tuple{Module,Expr}, Tuple{DataType,MethodSummary}) |
87 | | - @warnpcfail precompile(Tuple{Core.kwftype(typeof(Base.CoreLogging.handle_message)),NamedTuple{(:time, :deltainfo), Tuple{Float64, TT}},typeof(Base.CoreLogging.handle_message),ReviseLogger,LogLevel,String,Module,String,Symbol,String,Int}) |
88 | | - end |
| 21 | + watch_package(REVISE_ID) |
| 22 | + watch_includes(Revise, "src/Revise.jl") |
| 23 | + add_revise_deps(true) |
| 24 | + revise() |
| 25 | + revise_first(:(1+1)) |
| 26 | + eval_with_signatures(__RInternal__, :(f() = 1)) |
| 27 | + eval_with_signatures(__RInternal__, :(f2() = 1); skip_include=true) |
| 28 | + add_require(pathof(LoweredCodeUtils), LoweredCodeUtils, "295af30f-e4ad-537b-8983-00126c2a3abe", "Revise", :(include("somefile.jl"))) |
| 29 | + add_require(pathof(JuliaInterpreter), JuliaInterpreter, "295af30f-e4ad-537b-8983-00126c2a3abe", "Revise", :(f(x) = 7)) |
| 30 | + pkgdata = pkgdatas[PkgId(LoweredCodeUtils)] |
| 31 | + eval_require_now(pkgdata, length(pkgdata.info.files), last(pkgdata.info.files)*"__@require__", joinpath(basedir(pkgdata), last(pkgdata.info.files)), Revise, :(__RInternal__.ftmp(::Int) = 0)) |
| 32 | + # Now empty the stores to prevent them from being serialized |
| 33 | + empty!(watched_files) |
| 34 | + empty!(watched_manifests) |
| 35 | + empty!(pkgdatas) |
| 36 | + empty!(included_files) |
89 | 37 | return nothing |
90 | 38 | end |
0 commit comments