X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=ast.h;h=5f553798980ad9c1ea216dd31ea658b9228a192f;hp=39cd950a158ba8a74b5a1a850eaa18dfd2c86383;hb=0920cb6ec4e1a00af744d1c33a4f0b44de33a3fa;hpb=ebb7cb2ae39dad8eb59310b16ad4958a69c385c3 diff --git a/ast.h b/ast.h index 39cd950..5f55379 100644 --- a/ast.h +++ b/ast.h @@ -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*); @@ -608,8 +614,8 @@ struct ast_function_s ir_function *ir_func; ir_block *curblock; - ir_block *breakblock; - ir_block *continueblock; + ir_block **breakblocks; + ir_block **continueblocks; #if 0 /* In order for early-out logic not to go over