/** * @file include/exproriented.h * @brief Define macros for expression oriented programming */ #pragma once #include "errcode.h" constexpr size_t exproriented_unit = 0; #define $break $(break) #define $continue $(continue) #define $return(...) $(return __VA_ARGS__) #define $panic(...) $(panic(__VA_ARGS__)) // use in pointer calculation #define p$break p$(break) #define p$continue p$(continue) #define p$return(...) p$(return __VA_ARGS__) #define p$panic(...) p$(panic(__VA_ARGS__)) #define $if(cond) (cond) ? #define $else : #define $(statements) \ ({ \ statements; \ exproriented_unit; \ }) #define p$(statements) \ ({ \ statements; \ (void *)exproriented_unit; \ })