Skip to content

Commit fef1537

Browse files
committed
implement on its own instead of on top of preferences
1 parent d2c1c32 commit fef1537

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

base/loading.jl

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,6 +1231,7 @@ function compilecache_path(pkg::PkgId, cache::TOMLCache)::String
12311231
crc = _crc32c(unsafe_string(JLOptions().image_file), crc)
12321232
crc = _crc32c(unsafe_string(JLOptions().julia_bin), crc)
12331233
crc = _crc32c(get_preferences_hash(pkg.uuid, cache), crc)
1234+
crc = _crc32c(isdebug(), crc)
12341235
project_precompile_slug = slug(crc, 5)
12351236
abspath(cachepath, string(entryfile, "_", project_precompile_slug, ".ji"))
12361237
end
@@ -1358,6 +1359,8 @@ function parse_cache_header(f::IO)
13581359
end
13591360
totbytes -= 4 + 4 + n2 + 8
13601361
end
1362+
julia_debug = Bool(read(f, UInt8))
1363+
totbytes -= 1
13611364
prefs_hash = read(f, UInt64)
13621365
totbytes -= 8
13631366
@assert totbytes == 12 "header of cache file appears to be corrupt"
@@ -1372,7 +1375,7 @@ function parse_cache_header(f::IO)
13721375
build_id = read(f, UInt64) # build id
13731376
push!(required_modules, PkgId(uuid, sym) => build_id)
13741377
end
1375-
return modules, (includes, requires), required_modules, srctextpos, prefs_hash
1378+
return modules, (includes, requires), required_modules, srctextpos, prefs_hash, julia_debug
13761379
end
13771380

13781381
function parse_cache_header(cachefile::String; srcfiles_only::Bool=false)
@@ -1381,21 +1384,21 @@ function parse_cache_header(cachefile::String; srcfiles_only::Bool=false)
13811384
!isvalid_cache_header(io) && throw(ArgumentError("Invalid header in cache file $cachefile."))
13821385
ret = parse_cache_header(io)
13831386
srcfiles_only || return ret
1384-
modules, (includes, requires), required_modules, srctextpos, prefs_hash = ret
1387+
modules, (includes, requires), required_modules, srctextpos, prefs_hash, julia_debug = ret
13851388
srcfiles = srctext_files(io, srctextpos)
13861389
delidx = Int[]
13871390
for (i, chi) in enumerate(includes)
13881391
chi.filename srcfiles || push!(delidx, i)
13891392
end
13901393
deleteat!(includes, delidx)
1391-
return modules, (includes, requires), required_modules, srctextpos, prefs_hash
1394+
return modules, (includes, requires), required_modules, srctextpos, prefs_hash, julia_debug
13921395
finally
13931396
close(io)
13941397
end
13951398
end
13961399

13971400
function cache_dependencies(f::IO)
1398-
defs, (includes, requires), modules, srctextpos, prefs_hash = parse_cache_header(f)
1401+
defs, (includes, requires), modules, srctextpos, prefs_hash, julia_debug = parse_cache_header(f)
13991402
return modules, map(chi -> (chi.filename, chi.mtime), includes) # return just filename and mtime
14001403
end
14011404

@@ -1410,7 +1413,7 @@ function cache_dependencies(cachefile::String)
14101413
end
14111414

14121415
function read_dependency_src(io::IO, filename::AbstractString)
1413-
modules, (includes, requires), required_modules, srctextpos, prefs_hash = parse_cache_header(io)
1416+
modules, (includes, requires), required_modules, srctextpos, prefs_hash, julia_debug = parse_cache_header(io)
14141417
srctextpos == 0 && error("no source-text stored in cache file")
14151418
seek(io, srctextpos)
14161419
return _read_dependency_src(io, filename)
@@ -1481,9 +1484,9 @@ function get_preferences(uuid::UUID, cache::TOMLCache = TOMLCache();
14811484
# Fall back to default value of "no preferences".
14821485
return Dict{String,Any}()
14831486
end
1484-
get_preferences_hash(uuid::UUID, cache::TOMLCache = TOMLCache()) = UInt64(hash(julia_debug, hash(get_preferences(uuid, cache))))
1487+
get_preferences_hash(uuid::UUID, cache::TOMLCache = TOMLCache()) = UInt64(hash(get_preferences(uuid, cache)))
14851488
get_preferences_hash(m::Module, cache::TOMLCache = TOMLCache()) = get_preferences_hash(PkgId(m).uuid, cache)
1486-
get_preferences_hash(::Nothing, cache::TOMLCache = TOMLCache()) = UInt64(hash(julia_debug, hash(Dict{String,Any}())))
1489+
get_preferences_hash(::Nothing, cache::TOMLCache = TOMLCache()) = UInt64(hash(Dict{String,Any}()))
14871490

14881491

14891492
# returns true if it "cachefile.ji" is stale relative to "modpath.jl"
@@ -1496,7 +1499,7 @@ function stale_cachefile(modpath::String, cachefile::String, cache::TOMLCache)
14961499
@debug "Rejecting cache file $cachefile due to it containing an invalid cache header"
14971500
return true # invalid cache file
14981501
end
1499-
modules, (includes, requires), required_modules, srctextpos, prefs_hash = parse_cache_header(io)
1502+
modules, (includes, requires), required_modules, srctextpos, prefs_hash, julia_debug = parse_cache_header(io)
15001503
id = isempty(modules) ? nothing : first(modules).first
15011504
modules = Dict{PkgId, UInt64}(modules)
15021505

@@ -1572,6 +1575,11 @@ function stale_cachefile(modpath::String, cachefile::String, cache::TOMLCache)
15721575
end
15731576

15741577
if isa(id, PkgId)
1578+
curr_debug = isdebug()
1579+
if julia_debug != curr_debug
1580+
@debug "Rejecting cache file $cachefile because julia debug mode does not match"
1581+
return true
1582+
end
15751583
curr_prefs_hash = get_preferences_hash(id.uuid, cache)
15761584
if prefs_hash != curr_prefs_hash
15771585
@debug "Rejecting cache file $cachefile because preferences hash does not match 0x$(string(prefs_hash, base=16)) != 0x$(string(curr_prefs_hash, base=16))"

src/dump.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,6 +1124,14 @@ static int64_t write_dependency_list(ios_t *s, jl_array_t **udepsp, jl_array_t *
11241124
}
11251125
write_int32(s, 0); // terminator, for ease of reading
11261126

1127+
// Julia debug mode
1128+
jl_value_t *julia_debug = (jl_value_t*)jl_get_global(jl_base_module, jl_symbol("julia_debug"));
1129+
if (julia_debug) {
1130+
write_int8(s, jl_unbox_bool(julia_debug));
1131+
} else {
1132+
write_int8(s, 0);
1133+
}
1134+
11271135
// Calculate Preferences hash for current package.
11281136
jl_value_t *prefs_hash = NULL;
11291137
if (jl_base_module) {

0 commit comments

Comments
 (0)