X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=ast.h;h=658842291c15a158884c4d7fd2f67ecf4fb06e39;hp=bf7f6aa3c5cb1abd81811504332456ffe880461b;hb=973122ed9bc0679d4f9bb0fde90f90d57c17c3d7;hpb=755ee5462fb3d59b181da79d7c7f7eeba32bda2c diff --git a/ast.h b/ast.h index bf7f6aa..6588422 100644 --- 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 @@ -132,6 +132,10 @@ typedef struct size_t count; ast_value* *params; uint32_t flags; + /* void foo(string...) gets varparam set as a restriction + * for variadic parameters + */ + ast_expression *varparam; /* 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 @@ -144,6 +148,9 @@ typedef struct #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_INCLUDE_DEF (1<<5) +#define AST_FLAG_IS_VARARG (1<<6) #define AST_FLAG_TYPE_MASK (AST_FLAG_VARIADIC | AST_FLAG_NORETURN) /* Value @@ -158,6 +165,9 @@ struct ast_value_s ast_expression_common expression; const char *name; + const char *desc; + + const char *argcounter; /* int vtype; @@ -523,9 +533,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*); @@ -564,6 +576,7 @@ struct ast_call_s ast_expression_common expression; ast_expression *func; ast_expression* *params; + ast_expression *va_count; }; ast_call* ast_call_new(lex_ctx ctx, ast_expression *funcexpr); @@ -632,6 +645,8 @@ struct ast_function_s char labelbuf[64]; ast_block* *blocks; + + ast_value *varargs; }; ast_function* ast_function_new(lex_ctx ctx, const char *name, ast_value *vtype); /* This will NOT delete the underlying ast_value */