• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2020 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef INCLUDE_CPPGC_INTERNAL_LOGGING_H_
6 #define INCLUDE_CPPGC_INTERNAL_LOGGING_H_
7 
8 #include "cppgc/source-location.h"
9 #include "v8config.h"  // NOLINT(build/include_directory)
10 
11 namespace cppgc {
12 namespace internal {
13 
14 void V8_EXPORT DCheckImpl(const char*,
15                           const SourceLocation& = SourceLocation::Current());
16 [[noreturn]] void V8_EXPORT
17 FatalImpl(const char*, const SourceLocation& = SourceLocation::Current());
18 
19 // Used to ignore -Wunused-variable.
20 template <typename>
21 struct EatParams {};
22 
23 #if defined(DEBUG)
24 #define CPPGC_DCHECK_MSG(condition, message)  \
25   do {                                        \
26     if (V8_UNLIKELY(!(condition))) {          \
27       ::cppgc::internal::DCheckImpl(message); \
28     }                                         \
29   } while (false)
30 #else  // !defined(DEBUG)
31 #define CPPGC_DCHECK_MSG(condition, message)                \
32   (static_cast<void>(::cppgc::internal::EatParams<decltype( \
33                          static_cast<void>(condition), message)>{}))
34 #endif  // !defined(DEBUG)
35 
36 #define CPPGC_DCHECK(condition) CPPGC_DCHECK_MSG(condition, #condition)
37 
38 #define CPPGC_CHECK_MSG(condition, message)  \
39   do {                                       \
40     if (V8_UNLIKELY(!(condition))) {         \
41       ::cppgc::internal::FatalImpl(message); \
42     }                                        \
43   } while (false)
44 
45 #define CPPGC_CHECK(condition) CPPGC_CHECK_MSG(condition, #condition)
46 
47 }  // namespace internal
48 }  // namespace cppgc
49 
50 #endif  // INCLUDE_CPPGC_INTERNAL_LOGGING_H_
51