/
utils.jl
44 lines (37 loc) · 1.15 KB
/
utils.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import Preferences
const DEBUG = Preferences.@load_preference("use_debug", false)
"""
Ferrite.debug_mode(; enable=true)
Helper to turn on (`enable=true`) or off (`enable=false`) debug expressions in Ferrite.
Debug mode influences `Ferrite.@debug expr`: when debug mode is enabled, `expr` is
evaluated, and when debug mode is disabled `expr` is ignored.
"""
function debug_mode(; enable = true)
if DEBUG == enable == true
@info "Debug mode already enabled."
elseif DEBUG == enable == false
@info "Debug mode already disabled."
else
Preferences.@set_preferences!("use_debug" => enable)
@info "Debug mode $(enable ? "en" : "dis")abled. Restart the Julia session for this change to take effect!"
end
end
@static if DEBUG
@eval begin
macro debug(ex)
return :($(esc(ex)))
end
end
else
@eval begin
macro debug(ex)
return nothing
end
end
end
mutable struct ScalarWrapper{T}
x::T
end
@inline Base.getindex(s::ScalarWrapper) = s.x
@inline Base.setindex!(s::ScalarWrapper, v) = s.x = v
Base.copy(s::ScalarWrapper{T}) where {T} = ScalarWrapper{T}(copy(s.x))