]> git.xonotic.org Git - xonotic/xonotic.wiki.git/blobdiff - NewQC.md
Restructure
[xonotic/xonotic.wiki.git] / NewQC.md
diff --git a/NewQC.md b/NewQC.md
deleted file mode 100644 (file)
index b2fd90d..0000000
--- a/NewQC.md
+++ /dev/null
@@ -1,102 +0,0 @@
-New QC Syntax
-=============
-
-It is possible that at some point we decide to switch QC-compiler which requires some changes to the code.
-
-~~For more information see http://dev.xonotic.org/projects/bocc~~
-
-(Update: Blub's bocc compiler didn't make it, but someone else came along, both devs [joined forces](https://github.com/graphitemaster/gmqcc/graphs/contributors) and brought us [GMQCC](https://graphitemaster.github.io/gmqcc/doc.html).
- This is now the QuakeC compiler used by the Xonotic project.)
-
-Clean syntax:
--------------
-
-In fteqcc there are some ambiguities regarding fieldpointers, function pointers, and field-return-types etc.
-A clean syntax is needed, the current implementation uses the following:
-
-|definition|meaning|
-|----------|-------|
-|`float foo`|global variable|
-|`float .foo`|entity field|
-|`.float foo`|fieldpointer|
-|`.float .foo`|entity field of type fieldpointer|
-|`float foo(void)`|function|
-|`float foo*(void)`|function pointer|
-|`.float foo(void)`|function returning a fieldpointer .float|
-|`.float foo*(void)`|function pointer, returning a fieldpointer .float|
-|`float .foo(void)`|entity field of type function returning float|
-|`.float .foo(void)`|entity field of type function returning fieldpointer|
-
-Function definitions:
----------------------
-
-The old-style QC way of defining functions will not be supported, so
-
-    void(float x) something = { ... }
-
-becomes
-
-    void something(float x) { ... }
-
-which is the most common way to define functions in the xonotic code already anyway.
-
-Constants:
-----------
-
-From now on, the code
-
-    float x = 3
-
-does what the first instinct tells you: it creates a global with the initial value 3. Contrary to old QC, where it created a constant.
-To create a constant use:
-
-    const float x = 3
-
-Extendable functions:
----------------------
-
-Since menuQC has some funny macro: ACCUMULATE\_FUNCTIONS, it seemed like a nice syntactical sugar to allow the following:
-
-    float myfunc() extendable
-    {
-        float mylocal = 3;
-    }
-
-    /* other code */
-
-    float myfunc()
-    {
-        mylocal += 5;
-        if (mylocal > 20)
-            return mylocal;
-    }
-
-    /* optionally: */
-    float myfunc() final
-    {
-        return 3;
-    }
-
-Variadic parameters (do not use yet)
-------------------------------------
-
-(This might get changed to be more flexible so do not rely on this syntax…)
-
-Another “enhancement” is the possibility to have functions with variadic parameter lists. However, the only way to sanely access them (until pointers are allowed) is via a recursive way.
-Here’s an example that assumes float parameters and prints them one after the other:
-
-    void printfloats(float count, float first, ...)
-    {
-        if (count <= 0) // if there are no parameters, return
-            return;
-        if (count == 1) { // If there's one parameter, print it, plus a new-line
-            print(strcat(ftos(first), "\n"));
-            return;
-        }
-        // Otherwise we have multiple parameters left, so print the float, and add a comma
-        print(strcat(ftos(first), ", "));
-        myprint(count-1, ...);
-    }
-
-So `myprint(4, 1, 2, 3, 4)` would print "1, 2, 3, 4\\n"
-