X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=ast.h;h=94f388e596a36ee395788a29585799d83a49546d;hp=37bbf0266aab0d332e79b6302f2fd9d397eb34a7;hb=36c5722273f1ea87603621c6ee20b7178a7a641b;hpb=6df3c625b0f8501b2ed2ecc61e29d104f28f84b8 diff --git a/ast.h b/ast.h index 37bbf02..94f388e 100644 --- a/ast.h +++ b/ast.h @@ -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 @@ -146,6 +150,7 @@ typedef struct #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 @@ -162,6 +167,8 @@ struct ast_value_s const char *name; const char *desc; + const char *argcounter; + /* int vtype; ast_value *next; @@ -569,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); @@ -637,6 +645,10 @@ struct ast_function_s char labelbuf[64]; ast_block* *blocks; + + ast_value *varargs; + ast_value *argc; + ast_value *fixedparams; }; ast_function* ast_function_new(lex_ctx ctx, const char *name, ast_value *vtype); /* This will NOT delete the underlying ast_value */