Defensive programming & assert

Here’s a way this can be done for modules without breaking precompilation.

module DebugAsserts

export debug_asserts, @dassert

function debug_asserts(m::Module, dodebug::Bool)
    m.eval(:(_debug_enabled() = $dodebug))
    nothing
end

# Like @assert, but only active in debug mode
macro dassert(exs...)
    if !isdefined(__module__, :_debug_enabled)
        eval(__module__, :(_debug_enabled() = false))
    end
    quote
        if $__module__._debug_enabled()
            @assert $(map(esc,exs)...)
        end
    end
end

end
4 Likes