On Thursday, July 24, 2014 12:09:59 PM Magnus Lie Hetland wrote:
> I saw a mention of a @debug macro somewhere on this list,
> which I assume doesn't exist either?
@debug is alive and well in Toivo's amazing Debug.jl package. But since
debugging will change radically once Keno's work lands, I wouldn't worry
building a common infrastructure for both @assert and @debug.
julia> const debug = false
false
julia> f() = if debug 42 else 41 end
f (generic function with 1 method)
julia> code_llvm(f, ())
define i64 @"julia_f;18972"() {
top:
ret i64 41, !dbg !772
}
julia> function f()
if debug
print("Debug!")
end
41
end
f (generic function with 1 method)
julia> code_llvm(f, ())
define i64 @"julia_f;18980"() {
top:
%0 = alloca [4 x %jl_value_t*], align 8
%.sub = getelementptr inbounds [4 x %jl_value_t*]* %0, i64 0, i64 0
store %jl_value_t* inttoptr (i64 4 to %jl_value_t*), %jl_value_t** %.sub, align 8
%1 = load %jl_value_t*** @jl_pgcstack, align 8, !dbg !796
%2 = getelementptr [4 x %jl_value_t*]* %0, i64 0, i64 1, !dbg !796
%.c = bitcast %jl_value_t** %1 to %jl_value_t*, !dbg !796
store %jl_value_t* %.c, %jl_value_t** %2, align 8, !dbg !796
store %jl_value_t** %.sub, %jl_value_t*** @jl_pgcstack, align 8, !dbg !796
%3 = getelementptr [4 x %jl_value_t*]* %0, i64 0, i64 2
store %jl_value_t* null, %jl_value_t** %3, align 8
%4 = getelementptr [4 x %jl_value_t*]* %0, i64 0, i64 3
store %jl_value_t* null, %jl_value_t** %4, align 8
%5 = load %jl_value_t** %2, align 8, !dbg !797
%6 = getelementptr inbounds %jl_value_t* %5, i64 0, i32 0, !dbg !797
store %jl_value_t** %6, %jl_value_t*** @jl_pgcstack, align 8, !dbg !797
ret i64 41, !dbg !797
}
assert(x) = useassertions() ? enforce(x) : nothing
macro assert(ex,msgs...)
if useassertions()
:(@enforce(($ex),($msgs)...))
else
:nothing
end
end