43 lines
1.3 KiB
C
43 lines
1.3 KiB
C
|
/*
|
||
|
Copyright (c) 2013 Microsoft Corporation. All rights reserved.
|
||
|
Released under Apache 2.0 license as described in the file LICENSE.
|
||
|
|
||
|
Author: Leonardo de Moura
|
||
|
*/
|
||
|
#pragma once
|
||
|
|
||
|
#ifndef __has_builtin
|
||
|
#define __has_builtin(x) 0
|
||
|
#endif
|
||
|
|
||
|
#ifdef LEAN_DEBUG
|
||
|
#define DEBUG_CODE(CODE) CODE
|
||
|
#else
|
||
|
#define DEBUG_CODE(CODE)
|
||
|
#endif
|
||
|
|
||
|
#define lean_assert(COND) DEBUG_CODE({if (!(COND)) { lean::notify_assertion_violation(__FILE__, __LINE__, #COND); lean::invoke_debugger(); }})
|
||
|
#define lean_cond_assert(TAG, COND) DEBUG_CODE({if (lean::is_debug_enabled(TAG) && !(COND)) { lean::notify_assertion_violation(__FILE__, __LINE__, #COND); lean::invoke_debugger(); }})
|
||
|
|
||
|
#if __has_builtin(__builtin_unreachable)
|
||
|
#define lean_unreachable() __builtin_unreachable()
|
||
|
#else
|
||
|
#define lean_unreachable() DEBUG_CODE({lean::notify_assertion_violation(__FILE__, __LINE__, "UNREACHABLE CODE WAS REACHED."); lean::invoke_debugger();})
|
||
|
#endif
|
||
|
|
||
|
#ifdef LEAN_DEBUG
|
||
|
#define lean_verify(COND) if (!(COND)) { lean::notify_assertion_violation(__FILE__, __LINE__, #COND); lean::invoke_debugger(); }
|
||
|
#else
|
||
|
#define lean_verify(COND) (COND)
|
||
|
#endif
|
||
|
|
||
|
namespace lean {
|
||
|
|
||
|
void notify_assertion_violation(char const * file_name, int line, char const * condition);
|
||
|
void enable_debug(char const * tag);
|
||
|
void disable_debug(char const * tag);
|
||
|
bool is_debug_enabled(char const * tag);
|
||
|
void invoke_debugger();
|
||
|
|
||
|
}
|