c581990f67
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
45 lines
1.4 KiB
C++
45 lines
1.4 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();
|
|
// support for testing
|
|
void continue_on_violation(bool flag);
|
|
bool has_violations();
|
|
|
|
}
|