|
|
@@ -98,4 +98,39 @@
|
|
|
#define CPPMAGIC_IFELSE(cond_) \
|
|
|
_CPPMAGIC_IFELSE(CPPMAGIC_NONZERO(cond_))
|
|
|
|
|
|
+/**
|
|
|
+ * CPPMAGIC_EVAL - force multiple expansion passes
|
|
|
+ *
|
|
|
+ * Forces macros in the arguments to be expanded repeatedly (up to
|
|
|
+ * 1024 times) even when CPP would usually stop expanding.
|
|
|
+ */
|
|
|
+#define CPPMAGIC_EVAL1(...) __VA_ARGS__
|
|
|
+#define CPPMAGIC_EVAL2(...) \
|
|
|
+ CPPMAGIC_EVAL1(CPPMAGIC_EVAL1(__VA_ARGS__))
|
|
|
+#define CPPMAGIC_EVAL4(...) \
|
|
|
+ CPPMAGIC_EVAL2(CPPMAGIC_EVAL2(__VA_ARGS__))
|
|
|
+#define CPPMAGIC_EVAL8(...) \
|
|
|
+ CPPMAGIC_EVAL4(CPPMAGIC_EVAL4(__VA_ARGS__))
|
|
|
+#define CPPMAGIC_EVAL16(...) \
|
|
|
+ CPPMAGIC_EVAL8(CPPMAGIC_EVAL8(__VA_ARGS__))
|
|
|
+#define CPPMAGIC_EVAL32(...) \
|
|
|
+ CPPMAGIC_EVAL16(CPPMAGIC_EVAL16(__VA_ARGS__))
|
|
|
+#define CPPMAGIC_EVAL64(...) \
|
|
|
+ CPPMAGIC_EVAL32(CPPMAGIC_EVAL32(__VA_ARGS__))
|
|
|
+#define CPPMAGIC_EVAL128(...) \
|
|
|
+ CPPMAGIC_EVAL64(CPPMAGIC_EVAL64(__VA_ARGS__))
|
|
|
+#define CPPMAGIC_EVAL256(...) \
|
|
|
+ CPPMAGIC_EVAL128(CPPMAGIC_EVAL128(__VA_ARGS__))
|
|
|
+#define CPPMAGIC_EVAL512(...) \
|
|
|
+ CPPMAGIC_EVAL256(CPPMAGIC_EVAL256(__VA_ARGS__))
|
|
|
+#define CPPMAGIC_EVAL1024(...) \
|
|
|
+ CPPMAGIC_EVAL512(CPPMAGIC_EVAL512(__VA_ARGS__))
|
|
|
+#define CPPMAGIC_EVAL(...) CPPMAGIC_EVAL1024(__VA_ARGS__)
|
|
|
+
|
|
|
+/**
|
|
|
+ * CPPMAGIC_DEFER1, CPPMAGIC_DEFER2 - defer expansion
|
|
|
+ */
|
|
|
+#define CPPMAGIC_DEFER1(a_) a_ CPPMAGIC_NOTHING()
|
|
|
+#define CPPMAGIC_DEFER2(a_) a_ CPPMAGIC_NOTHING CPPMAGIC_NOTHING()()
|
|
|
+
|
|
|
#endif /* CCAN_CPPMAGIC_H */
|