35#ifndef _UTILS_MACROS_H_
36#define _UTILS_MACROS_H_
55#if defined(__EMSCRIPTEN__)
56#if defined(EXPECT_DEATH)
59#define EXPECT_DEATH(x...)
71#if defined(__FreeRTOS__)
73#ifdef RECORD_DEATH_FILE
74#define RECORD_DEATH() do { g_death_file = __FILE__ ; g_death_lineno = __LINE__; } while(0)
76#define RECORD_DEATH() do { g_death_lineno = __LINE__; } while(0)
87#define HASSERT(x) do { if (!(x)) { RECORD_DEATH(); abort(); } } while(0)
89#define DIE(MSG) abort()
91#elif defined(ESP32) || defined(ESP_PLATFORM)
97#if defined(CONFIG_IDF_TARGET_ESP32)
98#include <esp32/rom/ets_sys.h>
99#elif defined(CONFIG_IDF_TARGET_ESP32S2)
100#include <esp32s2/rom/ets_sys.h>
101#elif defined(CONFIG_IDF_TARGET_ESP32S3)
102#include <esp32s3/rom/ets_sys.h>
103#elif defined(CONFIG_IDF_TARGET_ESP32C3)
104#include <esp32c3/rom/ets_sys.h>
106#error Unknown/Unsupported ESP32 variant.
114#define HASSERT(x) do { if (!(x)) { ets_printf("Assertion failed in file " __FILE__ " line %d: assert(%s)\n", __LINE__, #x); g_death_file = __FILE__; g_death_lineno = __LINE__; assert(0); abort();} } while(0)
116#define DIE(MSG) do { ets_printf("Crashed in file " __FILE__ " line %d: " MSG "\n", __LINE__); assert(0); abort(); } while(0)
118#elif defined(ESP_NONOS) || defined(ARDUINO)
123#define HASSERT(x) do { if (!(x)) { printf("Assertion failed in file " __FILE__ " line %d: assert(%s)\n", __LINE__, #x); g_death_file = __FILE__; g_death_lineno = __LINE__; assert(0); abort();} } while(0)
125#define DIE(MSG) do { printf("Crashed in file " __FILE__ " line %d: " MSG "\n", __LINE__); assert(0); abort(); } while(0)
133#define HASSERT(x) do { if (!(x)) { fprintf(stderr, "Assertion failed in file " __FILE__ " line %d: assert(" #x ")\n", __LINE__); g_death_file = __FILE__; g_death_lineno = __LINE__; abort();} } while(0)
138#define HASSERT(x) do { assert(x); } while(0)
143#define DIE(MSG) do { fprintf(stderr, "Crashed in file " __FILE__ " line %d: " MSG "\n", __LINE__); g_death_file = __FILE__; g_death_lineno = __LINE__; abort(); } while(0)
159#define DASSERT(x) HASSERT(x)
171#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
173 TypeName(const TypeName &); \
175 void operator=(const TypeName &)
180#define OVERRIDE override
185#define ARRAYSIZE(a) (sizeof(a) / sizeof(a[0]))
193#define INHERIT_CONSTRUCTOR(CURRENT_CLASS, BASE_CLASS) \
194 template <typename... Args> \
195 explicit CURRENT_CLASS(Args... args) \
196 : BASE_CLASS(args...) \
205#define INHERIT_CONSTEXPR_CONSTRUCTOR(CURRENT_CLASS, BASE_CLASS) \
206 template <typename... Args> \
207 explicit constexpr CURRENT_CLASS(Args... args) \
208 : BASE_CLASS(args...) \
214#define C_STATIC_ASSERT(expr, name) \
215 typedef unsigned char __attribute__((unused)) __static_assert_##name[expr ? 0 : -1]
217#if defined(ARDUINO_ARCH_ESP32)
218#include <esp8266-compat.h>
219#elif !defined(ESP_NONOS)
222#define ICACHE_FLASH_ATTR
225#define ICACHE_RAM_ATTR
239#define GET_PARENT_PTR(ParentClass, variable) \
240 reinterpret_cast<ParentClass *>( \
241 reinterpret_cast<char *>(this) - offsetof(ParentClass, variable));
245#define FAKELLP(x) static_cast<unsigned>((x) >> 32), static_cast<unsigned>((x) & 0xffffffffu)
248#define MUST_USE_RESULT __attribute__((__warn_unused_result__))
254#define __bswap64(x) __bswap_64(x)
int g_death_lineno
Captures point of death (line).
const char * g_death_file
Captures point of death (file).