]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/util-post.qh
Combine `SELFCALL` and `SELFCALL_DONE` with `WITH`
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / util-post.qh
index 6b43f34bf2aefedfdc40aa65012a09d2f8befe54..dd20cf8f5da131de57e761e7d8f04129ebc90684 100644 (file)
@@ -1,6 +1,43 @@
 #ifndef UTIL_POST_H
 #define UTIL_POST_H
 
+[[alias("self")]] entity __self;
+
+#define WITH(type, name, value, block) do { \
+    type __with_save = (name); \
+    name = (value); \
+    LAMBDA(block) \
+    name = __with_save; \
+} while (0)
+
+// Step 1: auto oldself
+#if 1
+#define SELFPARAM() noref entity this = __self
+#define setself(s) (__self = s)
+#define self __self
+#endif
+
+// Step 2: check SELFPARAM() is present for functions that use self
+#if 0
+#define SELFPARAM() [[alias("__self")]] noref entity this = __self
+#define setself(s) (__self = s)
+#define self this
+#endif
+
+// Step 3: const self
+#if 0
+#define SELFPARAM() noref const entity this = __self
+entity setself(entity e) { return self = e; }
+entity getself() { return self; }
+#define self getself()
+#endif
+
+// Step 4: enable when possible
+#if 0
+#define SELFPARAM() noref const entity this = __self
+#define self this
+#endif
+
 #define spawn() new(entity)
 
 #endif