]> de.git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ast.h
moving -Olocal-temps to -O4 until the issues are solved
[xonotic/gmqcc.git] / ast.h
diff --git a/ast.h b/ast.h
index 93c105faec64412c3664b2b45aded5bf7f70f5ef..ce69810e152fbc7ea8e338ed0fe0e00bc89b3cf0 100644 (file)
--- a/ast.h
+++ b/ast.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012
+ * Copyright (C) 2012, 2013
  *     Wolfgang Bumiller
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy of
@@ -95,7 +95,7 @@ typedef struct
     bool             side_effects;
 } ast_node_common;
 
-#define ast_delete(x) ( ( (ast_node*)(x) ) -> node.destroy )((ast_node*)(x))
+#define ast_delete(x) (*( ((ast_node*)(x))->node.destroy ))((ast_node*)(x))
 #define ast_unref(x) do                     \
 {                                           \
     if (! (((ast_node*)(x))->node.keep) ) { \
@@ -142,6 +142,10 @@ typedef struct
 } ast_expression_common;
 #define AST_FLAG_VARIADIC     (1<<0)
 #define AST_FLAG_NORETURN     (1<<1)
+#define AST_FLAG_INLINE       (1<<2)
+#define AST_FLAG_INITIALIZED  (1<<3)
+#define AST_FLAG_DEPRECATED   (1<<4)
+#define AST_FLAG_TYPE_MASK (AST_FLAG_VARIADIC | AST_FLAG_NORETURN)
 
 /* Value
  *
@@ -155,6 +159,7 @@ struct ast_value_s
     ast_expression_common expression;
 
     const char *name;
+    const char *desc;
 
     /*
     int         vtype;
@@ -323,6 +328,7 @@ struct ast_member_s
     ast_expression *owner;
     unsigned int    field;
     const char     *name;
+    bool            rvalue;
 };
 ast_member* ast_member_new(lex_ctx ctx, ast_expression *owner, unsigned int field, const char *name);
 void ast_member_delete(ast_member*);
@@ -519,9 +525,11 @@ struct ast_label_s
     const char *name;
     ir_block   *irblock;
     ast_goto  **gotos;
+    /* means it has not yet been defined */
+    bool        undefined;
 };
 
-ast_label* ast_label_new(lex_ctx ctx, const char *name);
+ast_label* ast_label_new(lex_ctx ctx, const char *name, bool undefined);
 void ast_label_delete(ast_label*);
 void ast_label_register_goto(ast_label*, ast_goto*);