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 11namespace cppgc { 12namespace internal { 13 14void V8_EXPORT DCheckImpl(const char*, 15 const SourceLocation& = SourceLocation::Current()); 16[[noreturn]] void V8_EXPORT 17FatalImpl(const char*, const SourceLocation& = SourceLocation::Current()); 18 19// Used to ignore -Wunused-variable. 20template <typename> 21struct 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