]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ast.h
Cleanups
[xonotic/gmqcc.git] / ast.h
diff --git a/ast.h b/ast.h
index 25243c069c0f4ba3d6d65464fae87782581b4385..a7d131c1ae3c558807e48b28bff93d5766f031cb 100644 (file)
--- a/ast.h
+++ b/ast.h
@@ -131,7 +131,7 @@ typedef struct
     /* arrays get a member-count */
     size_t                  count;
     ast_value*             *params;
-    bool                    variadic;
+    uint32_t                flags;
     /* The codegen functions should store their output values
      * so we can call it multiple times without re-evaluating.
      * Store lvalue and rvalue seperately though. So that
@@ -140,6 +140,8 @@ typedef struct
     ir_value               *outl;
     ir_value               *outr;
 } ast_expression_common;
+#define AST_FLAG_VARIADIC     (1<<0)
+#define AST_FLAG_NORETURN     (1<<1)
 
 /* Value
  *
@@ -447,11 +449,19 @@ struct ast_loop_s
     ast_expression *postcond;
     ast_expression *increment;
     ast_expression *body;
+    /* For now we allow a seperate flag on whether or not the condition
+     * is supposed to be true or false.
+     * That way, the parser can generate a 'while not(!x)' for `while(x)`
+     * if desired, which is useful for the new -f{true,false}-empty-strings
+     * flag.
+     */
+    bool pre_not;
+    bool post_not;
 };
 ast_loop* ast_loop_new(lex_ctx ctx,
                        ast_expression *initexpr,
-                       ast_expression *precond,
-                       ast_expression *postcond,
+                       ast_expression *precond, bool pre_not,
+                       ast_expression *postcond, bool post_not,
                        ast_expression *increment,
                        ast_expression *body);
 void ast_loop_delete(ast_loop*);