X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=ast.h;h=09f901a30542d539a5e2a2f2c375bb7db7103921;hp=3486d650ce7bc9c1c81b683482533aee418446c9;hb=76278e8b97578f210b34784a55925b043098def9;hpb=4de08db0e7b73a832d638acc03c6936395fd2095 diff --git a/ast.h b/ast.h index 3486d65..09f901a 100644 --- a/ast.h +++ b/ast.h @@ -174,13 +174,13 @@ struct ast_expression { * is like creating a 'float foo', foo serving as the type's name. */ union basic_value_t { - qcfloat_t vfloat; - int vint; - vec3_t vvec; - const char *vstring; - int ventity; + qcfloat_t vfloat; + int vint; + vec3_t vvec; + const char *vstring; + int ventity; ast_function *vfunc; - ast_value *vfield; + ast_value *vfield; }; struct ast_value @@ -202,7 +202,7 @@ struct ast_value * of constants when an initializer list * was provided. */ - basic_value_t *initlist; + std::vector initlist; /* usecount for the parser */ size_t uses; @@ -404,12 +404,12 @@ ast_store* ast_store_new(lex_ctx_t ctx, int op, /* If * - * A general 'if then else' statement, either side can be NULL and will - * thus be omitted. It is an error for *both* cases to be NULL at once. + * A general 'if then else' statement, either side can be nullptr and will + * thus be omitted. It is an error for *both* cases to be nullptr at once. * * During its 'codegen' it'll be changing the ast_function's block. * - * An if is also an "expression". Its codegen will put NULL into the + * An if is also an "expression". Its codegen will put nullptr into the * output field though. For ternary expressions an ast_ternary will be * added. */ @@ -431,7 +431,7 @@ ast_ifthen* ast_ifthen_new(lex_ctx_t ctx, ast_expression *cond, ast_expression * * a PHI node. * * The other difference is that in an ast_ternary, NEITHER side - * must be NULL, there's ALWAYS an else branch. + * must be nullptr, there's ALWAYS an else branch. * * This is the only ast_node beside ast_value which contains * an ir_value. Theoretically we don't need to remember it though. @@ -522,7 +522,7 @@ struct ast_switch { ast_expression expression; ast_expression *operand; - ast_switch_case *cases; + std::vector cases; }; ast_switch* ast_switch_new(lex_ctx_t ctx, ast_expression *op); @@ -623,15 +623,15 @@ bool GMQCC_WARN ast_block_add_expr(ast_block*, ast_expression*); */ struct ast_function { - ast_node node; + ast_node node; - ast_value *vtype; + ast_value *vtype; const char *name; int builtin; /* list of used-up names for statics without the count suffix */ - char **static_names; + std::vector static_names; /* number of static variables, by convention this includes the * ones without the count-suffix - remember this when dealing * with savegames. uint instead of size_t as %zu in printf is @@ -639,17 +639,17 @@ struct ast_function unsigned int static_count; ir_function *ir_func; - ir_block *curblock; - ir_block **breakblocks; - ir_block **continueblocks; + ir_block *curblock; + std::vector breakblocks; + std::vector continueblocks; - size_t labelcount; + size_t labelcount; /* in order for thread safety - for the optional * channel abesed multithreading... keeping a buffer * here to use in ast_function_label. */ - char labelbuf[64]; - ast_block* *blocks; + char labelbuf[64]; + std::vector blocks; ast_value *varargs; ast_value *argc; ast_value *fixedparams;