5 #define DEFER(id) id EMPTY()
7 #define EVAL(...) EVAL1(EVAL1(EVAL1(__VA_ARGS__)))
8 #define EVAL1(...) EVAL2(EVAL2(EVAL2(__VA_ARGS__)))
9 #define EVAL2(...) EVAL3(EVAL3(EVAL3(__VA_ARGS__)))
10 #define EVAL3(...) EVAL4(EVAL4(EVAL4(__VA_ARGS__)))
11 #define EVAL4(...) EVAL5(EVAL5(EVAL5(__VA_ARGS__)))
12 #define EVAL5(...) __VA_ARGS__
14 #define OVERLOAD___(F, _16, _15, _14, _13, _12, _11, _10, _9, _8, _7, _6, _5, _4, _3, _2, _1, n, ...) F##_##n
15 #define OVERLOAD__(F, ...) OVERLOAD___(F,##__VA_ARGS__, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
16 #define OVERLOAD_(...) DEFER(OVERLOAD__(__VA_ARGS__))
17 #define OVERLOAD(F, ...) OVERLOAD_(F,##__VA_ARGS__)(__VA_ARGS__)
19 #define EVAL(...) __VA_ARGS__
21 #define OVERLOAD_(F, ...) F##_##__VA_COUNT__(__VA_ARGS__)
22 #define OVERLOAD(F, ...) F##_##__VA_COUNT__(__VA_ARGS__)
26 #define etof(e) num_for_edict(e)
27 #define ftoe(i) entitybyindex(i)
29 #define etof(e) num_for_edict(e)
30 #define ftoe(i) edict_num(i)
35 #define GET(name) name##get
36 #define GETTER(type, name) type GET(name)() { return name; }
37 #define PROPERTY(type, name) type name; GETTER(type, name)
38 #define LAMBDA(...) { __VA_ARGS__; }
40 // With block may not contain continue or break
41 #define WITH(type, name, value, block) \
44 type __with_save = (name); \