Skip to content

Commit

Permalink
Add new assertion macros
Browse files Browse the repository at this point in the history
  • Loading branch information
albin-johansson committed Aug 8, 2023
1 parent 03cae8b commit 51f5248
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 0 deletions.
47 changes: 47 additions & 0 deletions src/private/core/foundation/assert.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* MIT License
*
* Copyright (c) 2023 Albin Johansson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

#include "glow/core/foundation/assert.hpp"

#include <exception> // terminate
#include <iostream> // cerr
#include <ostream> // flush

#include <boost/stacktrace/stacktrace.hpp>

namespace glow {

void on_assertion_failed(const char* expr,
const char* msg,
const char* file,
const int64 line)
{
std::cerr << file << ':' << line //
<< " expression '" << expr << "' evaluated to false: " << msg << '\n'
<< boost::stacktrace::stacktrace {} << '\n'
<< std::flush;
std::terminate();
}

} // namespace glow
53 changes: 53 additions & 0 deletions src/public/glow/core/foundation/assert.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* MIT License
*
* Copyright (c) 2023 Albin Johansson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

#pragma once

#include "glow/core/prelude.hpp"

#ifndef GLOW_ENABLE_ASSERTIONS
#ifdef NDEBUG
#define GLOW_ENABLE_ASSERTIONS 0
#else
#define GLOW_ENABLE_ASSERTIONS 1
#endif // NDEBUG
#endif // GLOW_ENABLE_ASSERTIONS

#if GLOW_ENABLE_ASSERTIONS
#define GLOW_ASSERT_MSG(Expr, Msg) \
(!!(Expr) ? ((void) 0) : glow::on_assertion_failed(#Expr, (Msg), __FILE__, __LINE__))
#define GLOW_ASSERT(Expr) GLOW_ASSERT_MSG(Expr, "?")
#else
#define GLOW_ASSERT(Expr)
#define GLOW_ASSERT_MSG(Expr, Msg)
#endif // GLOW_ENABLE_ASSERTIONS

namespace glow {

GLOW_CORE_API void on_assertion_failed(const char* expr,
const char* msg,
const char* file,
int64 line);

} // namespace glow

0 comments on commit 51f5248

Please sign in to comment.