Skip to content

Commit 1cead2b

Browse files
authored
trimming: Avoid using indirectly-loaded packages (#57589)
Although a package is loaded, we may not have top-level `using` rights. Instead, we need to pull the Module straight out of the loaded modules array in order to do these hacks.
1 parent 5b06efc commit 1cead2b

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

contrib/juliac-buildscript.jl

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -205,10 +205,15 @@ let mod = Base.include(Base.__toplevel__, inputfile)
205205
end
206206

207207
# Additional method patches depending on whether user code loads certain stdlibs
208+
let loaded = Base.loaded_modules_array()
209+
function find_loaded_module(name)
210+
idx = findfirst((m) -> Symbol(m) === name, loaded)
211+
idx === nothing && return nothing
212+
return loaded[idx]
213+
end
208214

209-
let loaded = Symbol.(Base.loaded_modules_array()) # TODO better way to do this
210-
if :SparseArrays in loaded
211-
using SparseArrays
215+
SparseArrays = find_loaded_module(:SparseArrays)
216+
if SparseArrays !== nothing
212217
@eval SparseArrays.CHOLMOD begin
213218
function __init__()
214219
ccall((:SuiteSparse_config_malloc_func_set, :libsuitesparseconfig),
@@ -222,8 +227,9 @@ let loaded = Symbol.(Base.loaded_modules_array()) # TODO better way to do this
222227
end
223228
end
224229
end
225-
if :Artifacts in loaded
226-
using Artifacts
230+
231+
Artifacts = find_loaded_module(:Artifacts)
232+
if Artifacts !== nothing
227233
@eval Artifacts begin
228234
function _artifact_str(__module__, artifacts_toml, name, path_tail, artifact_dict, hash, platform, _::Val{lazyartifacts}) where lazyartifacts
229235
# If the artifact exists, we're in the happy path and we can immediately
@@ -238,26 +244,30 @@ let loaded = Symbol.(Base.loaded_modules_array()) # TODO better way to do this
238244
end
239245
end
240246
end
241-
if :Pkg in loaded
242-
using Pkg
247+
248+
Pkg = find_loaded_module(:Pkg)
249+
if Pkg !== nothing
243250
@eval Pkg begin
244251
__init__() = rand() #TODO, methods that do nothing don't get codegened
245252
end
246253
end
247-
if :StyledStrings in loaded
248-
using StyledStrings
254+
255+
StyledStrings = find_loaded_module(:StyledStrings)
256+
if StyledStrings !== nothing
249257
@eval StyledStrings begin
250258
__init__() = rand()
251259
end
252260
end
253-
if :Markdown in loaded
254-
using Markdown
261+
262+
Markdown = find_loaded_module(:Markdown)
263+
if Markdown !== nothing
255264
@eval Markdown begin
256265
__init__() = rand()
257266
end
258267
end
259-
if :JuliaSyntaxHighlighting in loaded
260-
using JuliaSyntaxHighlighting
268+
269+
JuliaSyntaxHighlighting = find_loaded_module(:JuliaSyntaxHighlighting)
270+
if JuliaSyntaxHighlighting !== nothing
261271
@eval JuliaSyntaxHighlighting begin
262272
__init__() = rand()
263273
end

0 commit comments

Comments
 (0)