]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
move deglob stuff to it's own file
authorMartin Taibr <taibr.martin@gmail.com>
Sun, 11 Nov 2018 20:01:02 +0000 (21:01 +0100)
committerMartin Taibr <taibr.martin@gmail.com>
Sun, 11 Nov 2018 20:01:02 +0000 (21:01 +0100)
qcsrc/dpdefs/csprogsdefs.qh
qcsrc/dpdefs/post.qh
qcsrc/lib/_all.inc
qcsrc/lib/deglobalization.qh [new file with mode: 0644]

index 267737c2cd41ab7e68135aed7bc3809a3649df3b..0909ede7aa9498cf83f52cb81454e6769fc7a84e 100644 (file)
@@ -44,5 +44,5 @@
 .void(entity this, entity actor, entity trigger) use;
 #define touch move_touch
 
-void(vector dir) vectorvectors_broken = #432;
-#define vectorvectors DO_NOT_USE_GLOBALS
+void(vector dir) _vectorvectors_hidden = #432;
+#define vectorvectors DO_NOT_USE_GLOBALS_PREFER_VECTOR_VECTORS_MACRO_INSTEAD
index c33695e73b7a2559b87da66befe2da0c6fc25294..70e5f378422af7850a91ec65cf8857d6c61ae0d8 100644 (file)
 #else
        #define NULL (RVALUE, world)
 #endif
-
-#include "lib/accumulate.qh"
-#include "lib/misc.qh"
-#include "lib/static.qh"
-#include "lib/vector.qh"
-
-//void(vector) _vectorvectors;
-
-#ifdef GAMEQC
-STATIC_INIT(globals) {
-       //_vectorvectors = vectorvectors;
-
-       // set to NaN to more easily detect uninitialized use
-       v_forward = VEC_NAN;
-       v_right = VEC_NAN;
-       v_up = VEC_NAN;
-}
-
-/// Same as the `makevectors` builtin but uses the provided locals instead of the `v_*` globals.
-/// Always use this instead of raw `makevectors` to make the data flow clear.
-/// It's 2018, they even teach that globals are bad at my uni... though for some reason they never explained why. Sigh.
-#define MAKEVECTORS(angles, forward, right, up) MACRO_BEGIN { \
-       makevectors(angles); \
-       forward = v_forward; \
-       right = v_right; \
-       up = v_up; \
-       v_forward = VEC_NAN; \
-       v_right = VEC_NAN; \
-       v_up = VEC_NAN; \
-} MACRO_END
-
-// Same as `MAKEVECTORS` but also creates the locals for convenience.
-#define MAKEVECTORS_NEW(angles, forward, right, up) \
-       vector forward = '0 0 0'; \
-       vector right = '0 0 0'; \
-       vector up = '0 0 0'; \
-       MAKEVECTORS(angles, forward, right, up);
-
-#define VECTOR_VECTORS(forward_in, forward, right, up) MACRO_BEGIN { \
-       vectorvectors_broken(forward_in); \
-       forward = v_forward; \
-       right = v_right; \
-       up = v_up; \
-       v_forward = VEC_NAN; \
-       v_right = VEC_NAN; \
-       v_up = VEC_NAN; \
-} MACRO_END
-
-#define VECTOR_VECTORS_NEW(forward_in, forward, right, up) \
-       vector forward = '0 0 0'; \
-       vector right = '0 0 0'; \
-       vector up = '0 0 0'; \
-       VECTOR_VECTORS(forward_in, forward, right, up);
-
-#define vectorvectors DO_NOT_USE_GLOBALS
-
-// FIXME find a good place for this
-// FIXME MAKE_VECTORS because current naming sucks
-// FIXME ban vectorvectors
-
-// TODO when raw makevectors and similar functions are not used anywhere else anymore,
-// assert that the global vectors are NaN before calling makevectors in MAKEVECTORS
-// to make sure nobody (even builtins) is accidentally using them - NaN is the most liekly value to expose values clearly
-// also uncomment these:
-//#define makevectors DO_NOT_USE_GLOBALS
-//#define v_forward DO_NOT_USE_GLOBALS
-//#define v_right DO_NOT_USE_GLOBALS
-//#define v_up DO_NOT_USE_GLOBALS
-// FIXME ^ won't work
-#endif
index 0bed40bbf081fcd3c784719cc463c0db1be14dcb..cd35c3436b26b3e905d1b5a09c315661f908f722 100644 (file)
 #include "counting.qh"
 #include "cvar.qh"
 #include "defer.qh"
+#include "deglobalization.qh"
 #include "draw.qh"
 #include "enumclass.qh"
 #include "file.qh"
diff --git a/qcsrc/lib/deglobalization.qh b/qcsrc/lib/deglobalization.qh
new file mode 100644 (file)
index 0000000..ac37f7c
--- /dev/null
@@ -0,0 +1,56 @@
+#include "lib/misc.qh"
+#include "lib/static.qh"
+#include "lib/vector.qh"
+
+// These macros wrap functions which use globals so mutation only occurs inside them and is not visible from outside.
+// Functions for which all usages are replaced with these macros can be hidden inside our `*defs.qh` files
+// to prevent anyone from using them accidentally.
+
+// FIXME MAKE_VECTORS because current naming sucks
+
+#ifdef GAMEQC
+STATIC_INIT(globals) {
+       // set to NaN to more easily detect uninitialized use
+    // TODO when all functions are wrapped and the raw functions are not used anymore,
+    // assert that the global vectors are NaN before calling the raw functions
+    // to make sure nobody (even builtins) is accidentally using them - NaN is the most likely value to expose remaining usages
+       v_forward = VEC_NAN;
+       v_right = VEC_NAN;
+       v_up = VEC_NAN;
+}
+#endif
+
+/// Same as the `makevectors` builtin but uses the provided locals instead of the `v_*` globals.
+/// Always use this instead of raw `makevectors` to make the data flow clear.
+#define MAKEVECTORS(angles, forward, right, up) MACRO_BEGIN { \
+       makevectors(angles); \
+       forward = v_forward; \
+       right = v_right; \
+       up = v_up; \
+       v_forward = VEC_NAN; \
+       v_right = VEC_NAN; \
+       v_up = VEC_NAN; \
+} MACRO_END
+
+/// Same as `MAKEVECTORS` but also creates the locals for convenience.
+#define MAKEVECTORS_NEW(angles, forward, right, up) \
+       vector forward = '0 0 0'; \
+       vector right = '0 0 0'; \
+       vector up = '0 0 0'; \
+       MAKEVECTORS(angles, forward, right, up);
+
+#define VECTOR_VECTORS(forward_in, forward, right, up) MACRO_BEGIN { \
+       _vectorvectors_hidden(forward_in); \
+       forward = v_forward; \
+       right = v_right; \
+       up = v_up; \
+       v_forward = VEC_NAN; \
+       v_right = VEC_NAN; \
+       v_up = VEC_NAN; \
+} MACRO_END
+
+#define VECTOR_VECTORS_NEW(forward_in, forward, right, up) \
+       vector forward = '0 0 0'; \
+       vector right = '0 0 0'; \
+       vector up = '0 0 0'; \
+       VECTOR_VECTORS(forward_in, forward, right, up);