]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/util-post.qh
Port blaster
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / util-post.qh
index 2789e12358bf57a7997632ea36680e5f1701ef89..f796b6ebda6109c169700f78dae37989464819d6 100644 (file)
@@ -3,13 +3,21 @@
 
 [[alias("self")]] entity __self;
 
+// Can't wrap with do-while as block may contain continue or break
+#define WITH(type, name, value, block) { \
+    type __with_save = (name); \
+    name = (value); \
+    LAMBDA(block) \
+    name = __with_save; \
+} do { } while (0)
+
+// Transition from global 'self' to local 'this'
+
 // Step 1: auto oldself
 #if 1
 #define SELFPARAM() noref entity this = __self
 #define setself(s) (__self = s)
 #define self __self
-#define SELFCALL(s, f) (__self = s, f)
-#define SELFCALL_DONE() (__self = this)
 #endif
 
 // Step 2: check SELFPARAM() is present for functions that use self
@@ -17,8 +25,6 @@
 #define SELFPARAM() [[alias("__self")]] noref entity this = __self
 #define setself(s) (__self = s)
 #define self this
-#define SELFCALL(s, f) (this = s, f)
-#define SELFCALL_DONE() (this = this)
 #endif
 
 // Step 3: const self
 entity setself(entity e) { return self = e; }
 entity getself() { return self; }
 #define self getself()
-#define SELFCALL(s, f) (__self = s, f)
-#define SELFCALL_DONE() (__self = this)
 #endif
 
 // Step 4: enable when possible
+// TODO: Remove SELFPARAM in favor of a parameter
 #if 0
 #define SELFPARAM() noref const entity this = __self
 #define self this
-#define SELFCALL(s, f) (__self = s, f)
-#define SELFCALL_DONE() (__self = this)
 #endif
 
 #define spawn() new(entity)