source: trunk/src/stl/assert.cc @ 521

Last change on this file since 521 was 487, checked in by epyon, 9 years ago
File size: 2.0 KB
Line 
1// Copyright (C) 2015 ChaosForge Ltd
2// http://chaosforge.org/
3//
4// This file is part of Nova libraries.
5// For conditions of distribution and use, see copying.txt file in root folder.
6
7#include "nv/base/common.hh"
8#include "nv/core/logging.hh"
9
10extern "C" {
11#if NV_COMPILER == NV_MSVC
12        NV_NORETURN void __cdecl exit( int _Code );
13#else
14        void exit( int status_code ) NV_NORETURN;
15#endif
16}
17
18#if NV_DEBUG
19#       if NV_COMPILER == NV_MSVC
20extern "C" {
21        void __cdecl _wassert( const wchar_t * _Message, const wchar_t *_File, unsigned _Line );
22}
23
24void nv::detail::assert_fail( const wchar_t * message, const wchar_t* file, unsigned line )
25{
26        _wassert( message, file, line );
27}
28#       else // NV_COMPILER
29#       if NV_COMPILER == NV_CLANG
30// extern "C" {
31//      extern void __assert(const char *, const char *, unsigned int, const char *) NV_NORETURN;
32// }
33
34int error_here;
35static void __assert( const char *, const char *, unsigned int, const char * ) NV_NORETURN
36{
37        //no-op
38}
39
40#define NV_ASSERT_IMPL __assert
41#       else
42extern "C" {
43        extern void __assert_fail(const char *, const char *, unsigned int, const char *) NV_NORETURN;
44}
45#define NV_ASSERT_IMPL __assert_fail
46#       endif
47NV_NORETURN void nv::detail::assert_fail( const char * assertion, const char * file, unsigned int line, const char * function )
48{
49        NV_ASSERT_IMPL (assertion, file, line, function );
50}
51#       endif
52
53#endif // NV_DEBUG
54
55NV_NORETURN void nv::detail::abort( const char * msg, const char * file, unsigned int line, const char * function )
56{
57        NV_LOG_CRITICAL( "Abort called : ", msg );
58        NV_LOG_CRITICAL( "  in ", file, ":", line, " (", function, ")" );
59        NV_LOG_CRITICAL( "Aborting..." );
60        exit( 1 );
61}
62
63NV_NORETURN void nv::detail::assert_abort( const char * msg, const char * file, unsigned int line, const char * function )
64{
65        NV_LOG_CRITICAL( "Assertion failed: (", msg, ")" );
66        NV_LOG_CRITICAL( "  in ", file, ":", line, " (", function, ")" );
67        NV_LOG_CRITICAL( "Aborting..." );
68        exit( 1 );
69}
70
71
72NV_NORETURN void nv::exit( int ret_val )
73{
74        ::exit( ret_val );
75}
Note: See TracBrowser for help on using the repository browser.