#ifndef DEBUG_H #define DEBUG_H #include typedef enum { SV_DEBUG_DUMP_BYTECODE = 1u << 0, SV_DEBUG_DUMP_JIT = 1u << 1, SV_DEBUG_JIT_WARN = 1u << 2, SV_DEBUG_PARSE = 1u << 3, SV_DEBUG_COMPILE = 1u << 4, } sv_debug_flag_t; bool sv_debug_enabled(sv_debug_flag_t flag); void sv_debug_enable(sv_debug_flag_t flag); void sv_debug_disable(sv_debug_flag_t flag); void sv_debug_set(sv_debug_flag_t flag, bool enabled); #define sv_debug_unlikely(flag) __builtin_expect(sv_debug_enabled((flag)), 0) #define sv_dump_bytecode_unlikely sv_debug_unlikely(SV_DEBUG_DUMP_BYTECODE) #define sv_dump_jit_unlikely sv_debug_unlikely(SV_DEBUG_DUMP_JIT) #define sv_jit_warn_unlikely sv_debug_unlikely(SV_DEBUG_JIT_WARN) #define sv_parse_trace_unlikely sv_debug_unlikely(SV_DEBUG_PARSE) #define sv_compile_trace_unlikely sv_debug_unlikely(SV_DEBUG_COMPILE) #endif