]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ast.h
Merge branch 'master' into cooking
[xonotic/gmqcc.git] / ast.h
diff --git a/ast.h b/ast.h
index 18f02a8e259f34da73ca4ecebbf94bdd4b1dcb00..98ad79228fee073da2a66cf4dbc581f4f4728b53 100644 (file)
--- a/ast.h
+++ b/ast.h
@@ -151,6 +151,7 @@ typedef struct
 #define AST_FLAG_DEPRECATED   (1<<4)
 #define AST_FLAG_INCLUDE_DEF  (1<<5)
 #define AST_FLAG_IS_VARARG    (1<<6)
+#define AST_FLAG_ALIAS        (1<<7)
 #define AST_FLAG_TYPE_MASK (AST_FLAG_VARIADIC | AST_FLAG_NORETURN)
 
 /* Value
@@ -160,6 +161,15 @@ typedef struct
  * typedef float foo;
  * is like creating a 'float foo', foo serving as the type's name.
  */
+typedef union {
+    double        vfloat;
+    int           vint;
+    vector        vvec;
+    const char   *vstring;
+    int           ventity;
+    ast_function *vfunc;
+    ast_value    *vfield;
+} basic_value_t;
 struct ast_value_s
 {
     ast_expression_common expression;
@@ -176,16 +186,14 @@ struct ast_value_s
 
     int  cvq;     /* const/var qualifier */
     bool isfield; /* this declares a field */
+    bool isimm;   /* an immediate, not just const */
     bool hasvalue;
-    union {
-        double        vfloat;
-        int           vint;
-        vector        vvec;
-        const char   *vstring;
-        int           ventity;
-        ast_function *vfunc;
-        ast_value    *vfield;
-    } constval;
+    basic_value_t constval;
+    /* for TYPE_ARRAY we have an optional vector
+     * of constants when an initializer list
+     * was provided.
+     */
+    basic_value_t *initlist;
 
     /* usecount for the parser */
     size_t uses;
@@ -218,6 +226,13 @@ ast_expression* ast_type_copy(lex_ctx ctx, const ast_expression *ex);
 void ast_type_adopt_impl(ast_expression *self, const ast_expression *other);
 void ast_type_to_string(ast_expression *e, char *buf, size_t bufsize);
 
+typedef enum ast_binary_ref_s {
+    AST_REF_LEFT  = 1 << 1,
+    AST_REF_RIGHT = 1 << 2,
+    AST_REF_ALL   = (AST_REF_LEFT | AST_REF_RIGHT)
+} ast_binary_ref;
+
+
 /* Binary
  *
  * A value-returning binary expression.
@@ -229,6 +244,8 @@ struct ast_binary_s
     int             op;
     ast_expression *left;
     ast_expression *right;
+    ast_binary_ref  refs;
+
 };
 ast_binary* ast_binary_new(lex_ctx    ctx,
                            int        op,