1//
2// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// debug.h: Debugging utilities.
8
9#ifndef COMPILER_DEBUG_H_
10#define COMPILER_DEBUG_H_
11
12#include <assert.h>
13
14#ifdef _DEBUG
15#define TRACE_ENABLED  // define to enable debug message tracing
16#endif  // _DEBUG
17
18// Outputs text to the debug log
19#ifdef TRACE_ENABLED
20
21#ifdef  __cplusplus
22extern "C" {
23#endif  // __cplusplus
24void Trace(const char* format, ...);
25#ifdef  __cplusplus
26}
27#endif  // __cplusplus
28
29#else   // TRACE_ENABLED
30
31#define Trace(...) ((void)0)
32
33#endif  // TRACE_ENABLED
34
35// A macro asserting a condition and outputting failures to the debug log
36#define ASSERT(expression) do { \
37    if(!(expression)) \
38        Trace("Assert failed: %s(%d): "#expression"\n", __FUNCTION__, __LINE__); \
39    assert(expression); \
40} while(0)
41
42#define UNIMPLEMENTED() do { \
43    Trace("Unimplemented invoked: %s(%d)\n", __FUNCTION__, __LINE__); \
44    assert(false); \
45} while(0)
46
47#define UNREACHABLE() do { \
48    Trace("Unreachable reached: %s(%d)\n", __FUNCTION__, __LINE__); \
49    assert(false); \
50} while(0)
51
52#endif   // COMPILER_DEBUG_H_
53
54