X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=ast.h;h=f348e4b0309bac100b0b15d92444390324f3c802;hp=e5b331b73712176667c1418afe03c2c835173874;hb=1826971301dae48a9920ea4e331205371c48cc6b;hpb=2e037832d36a30d6b4062232c52670f676011912 diff --git a/ast.h b/ast.h index e5b331b..f348e4b 100644 --- a/ast.h +++ b/ast.h @@ -93,7 +93,7 @@ enum { TYPE_ast_state /* 22 */ }; -#define ast_istype(x, t) ( ((ast_node*)x)->nodetype == (TYPE_##t) ) +#define ast_istype(x, t) ( ((ast_node*)x)->node_type == (TYPE_##t) ) #define ast_ctx(node) (((ast_node*)(node))->context) #define ast_side_effects(node) (((ast_node*)(node))->side_effects) @@ -106,20 +106,20 @@ struct ast_node lex_ctx_t context; /* I don't feel comfortable using keywords like 'delete' as names... */ ast_node_delete *destroy; - int nodetype; - /* keep: if a node contains this node, 'keep' + int node_type; + /* keep_node: if a node contains this node, 'keep_node' * prevents its dtor from destroying this node as well. */ - bool keep; + bool keep_node; bool side_effects; }; #define ast_delete(x) (*( ((ast_node*)(x))->destroy ))((ast_node*)(x)) -#define ast_unref(x) do \ -{ \ - if (! (((ast_node*)(x))->keep) ) { \ - ast_delete(x); \ - } \ +#define ast_unref(x) do \ +{ \ + if (! (((ast_node*)(x))->keep_node) ) { \ + ast_delete(x); \ + } \ } while(0) /* Expression interface @@ -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,16 +639,16 @@ 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]; + char labelbuf[64]; std::vector blocks; ast_value *varargs; ast_value *argc;