Loading [MathJax]/extensions/tex2jax.js
Hermes
All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
debug.h
Go to the documentation of this file.
1
31
32#ifndef HERMES_LOG_DEBUG_H
33#define HERMES_LOG_DEBUG_H
34
35#include <hermes/common/defs.h>
37#include <cmath>
38#include <iostream>
39#include <sstream>
40
41#ifndef HERMES_DEBUG
42#define HERMES_DEBUG
43#endif
44
45#ifndef CHECKS_ENABLED
46#define CHECKS_ENABLED
47#endif
48
49#ifndef ASSERTIONS_ENABLED
50#define ASSERTIONS_ENABLED
51#endif
52
53// *********************************************************************************************************************
54// UTILS
55// *********************************************************************************************************************
56// *********************************************************************************************************************
57// COMPILATION WARNINGS
58// *********************************************************************************************************************
59#ifndef HERMES_UNUSED_VARIABLE
62#define HERMES_UNUSED_VARIABLE(x) ((void)x);
63#endif
64
65#ifndef HERMES_NOT_IMPLEMENTED
67#define HERMES_NOT_IMPLEMENTED \
68 printf("[%s][%d][%s] calling not implemented function.", __FILE__, __LINE__, __FUNCTION__);
69#endif
70// *********************************************************************************************************************
71// DEBUG MODE
72// *********************************************************************************************************************
73#ifdef HERMES_DEBUG
74#define HERMES_DEBUG_CODE(CODE_CONTENT) {CODE_CONTENT}
75#else
76#define HERMES_DEBUG_CODE(CODE_CONTENT)
77#endif
78
79// *********************************************************************************************************************
80// CHECKS
81// *********************************************************************************************************************
82#ifdef CHECKS_ENABLED
83
87#define HERMES_CHECK_EQUAL(A, B) \
88 if(A == B) {} \
89 else { \
90 hermes::Log::warn("[{}][{}][CHECK_EQUAL FAIL {} == {}] {} != {}", __FILE__, __LINE__, (#A), (#B), A, B); \
91 }
92
95#define HERMES_CHECK_EXP(expr) \
96 if(expr) {} \
97 else { \
98 hermes::Log::warn("[{}][{}][CHECK_EXP FAIL {}]", __FILE__, __LINE__, (#expr)); \
99 }
100
104#define HERMES_CHECK_EXP_WITH_LOG(expr, M) \
105 if(expr) {} \
106 else { \
107 hermes::Log::warn("[{}][{}][CHECK_EXP FAIL {}]: {}", __FILE__, __LINE__, (#expr), M); \
108 }
109#else
110
111#define HERMES_CHECK_EXP(expr)
112#define HERMES_CHECK_EXP_WITH_LOG(expr, M)
113
114#endif // CHECKS_ENABLED
115// *********************************************************************************************************************
116// ASSERTION
117// *********************************************************************************************************************
118#ifdef ASSERTIONS_ENABLED
119
120//#define debugBreak() asm ("int 3")
121#define debugBreak() exit(-1)
122
125#define HERMES_ASSERT(expr) \
126 if(expr) {} \
127 else { \
128 hermes::Log::error("[{}][{}][ASSERT FAIL {}]", __FILE__, __LINE__, #expr); \
129 debugBreak(); \
130 }
134#define HERMES_ASSERT_WITH_LOG(expr, M) \
135 if(expr) {} \
136 else { \
137 hermes::Log::error("[{}][{}][ASSERT FAIL {}]: {}", __FILE__, __LINE__, #expr, M); \
138 debugBreak(); \
139 }
140#else
141
142#define HERMES_ASSERT(expr)
143#define HERMES_ASSERT_WITH_LOG(expr, M)
144
145#endif // ASSERTIONS_ENABLED
146// *********************************************************************************************************************
147// CODE FLOW
148// *********************************************************************************************************************
151#define HERMES_RETURN_IF(A) \
152 if (A) { \
153 return; \
154 }
157#define HERMES_RETURN_IF_NOT(A) \
158 if (!(A)) { \
159 return; \
160 }
164#define HERMES_RETURN_VALUE_IF(A, R) \
165 if (A) { \
166 return R; \
167 }
171#define HERMES_RETURN_VALUE_IF_NOT(A, R) \
172 if (!(A)) { \
173 return R; \
174 }
179#define HERMES_LOG_AND_RETURN_VALUE_IF_NOT(A, R, M) \
180 if (!(A)) { \
181 HERMES_LOG(M); \
182 return R; \
183 }
187#define HERMES_LOG_AND_RETURN_IF_NOT(A, M) \
188 if (!(A)) { \
189 HERMES_LOG(M); \
190 return; \
191 }
192
193#endif
194
Data type definitions.
Logging functions.