#ifndef COMPILER_H #define COMPILER_H #define __unused __attribute__((unused)) #define COUNT_OF(arr) (sizeof(arr) / sizeof((arr)[0])) #define STATIC_ARRAY_FOREACH(arr, ptr) \ for ((ptr) = (arr); (ptr) < (arr) + COUNT_OF(arr); (ptr)++) #define STRX(x) #x #define STR(x) STRX(x) #define HAS_FLAG(flags, flag) ((flags) & (flag)) #define SET_FLAG(flags, flag) ((flags) |= (flag)) #define CLEAR_FLAG(flags, flag) ((flags) &= ~(flag)) #define TOGGLE_FLAG(flags, flag) ((flags) ^= (flag)) #define FOREACH_SECTION(item, type, section) \ for (type *item = __start_##section; item < __stop_##section; ++item) #endif