From: Dale Weiler Date: Thu, 15 Jan 2015 20:15:35 +0000 (-0500) Subject: Use std::vector for static_names X-Git-Tag: xonotic-v0.8.2~35 X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=commitdiff_plain;h=6e68526680ac6da49163c7ee3e251bea0cdaa132 Use std::vector for static_names --- diff --git a/ast.cpp b/ast.cpp index 55e4440..85244f4 100644 --- a/ast.cpp +++ b/ast.cpp @@ -1188,8 +1188,6 @@ ast_function* ast_function_new(lex_ctx_t ctx, const char *name, ast_value *vtype self->argc = NULL; self->fixedparams = NULL; self->return_value = NULL; - - self->static_names = NULL; self->static_count = 0; return self; @@ -1201,7 +1199,6 @@ cleanup: void ast_function_delete(ast_function *self) { - size_t i; if (self->name) mem_d((void*)self->name); if (self->vtype) { @@ -1213,9 +1210,8 @@ void ast_function_delete(ast_function *self) */ ast_unref(self->vtype); } - for (i = 0; i < vec_size(self->static_names); ++i) - mem_d(self->static_names[i]); - vec_free(self->static_names); + for (auto &it : self->static_names) + mem_d(it); for (auto &it : self->blocks) ast_delete(it); if (self->varargs) @@ -3339,9 +3335,8 @@ bool ast_state_codegen(ast_state *self, ast_function *func, bool lvalue, ir_valu bool ast_call_codegen(ast_call *self, ast_function *func, bool lvalue, ir_value **out) { ast_expression_codegen *cgen; - ir_value **params; - ir_instr *callinstr; - size_t i; + std::vector params; + ir_instr *callinstr; ir_value *funval = NULL; @@ -3362,17 +3357,15 @@ bool ast_call_codegen(ast_call *self, ast_function *func, bool lvalue, ir_value if (!funval) return false; - params = NULL; - /* parameters */ for (auto &it : self->params) { ir_value *param; cgen = it->codegen; if (!(*cgen)(it, func, false, ¶m)) - goto error; + return false; if (!param) - goto error; - vec_push(params, param); + return false; + params.push_back(param); } /* varargs counter */ @@ -3393,20 +3386,15 @@ bool ast_call_codegen(ast_call *self, ast_function *func, bool lvalue, ir_value ast_function_label(func, "call"), funval, !!(self->func->flags & AST_FLAG_NORETURN)); if (!callinstr) - goto error; + return false; - for (i = 0; i < vec_size(params); ++i) { - ir_call_param(callinstr, params[i]); - } + for (auto &it : params) + ir_call_param(callinstr, it); *out = ir_call_value(callinstr); self->expression.outr = *out; codegen_output_type(self, *out); - vec_free(params); return true; -error: - vec_free(params); - return false; } diff --git a/ast.h b/ast.h index 647fd1b..1627047 100644 --- a/ast.h +++ b/ast.h @@ -631,7 +631,7 @@ struct ast_function 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 diff --git a/parser.cpp b/parser.cpp index ac14a4d..fd7bad9 100644 --- a/parser.cpp +++ b/parser.cpp @@ -5435,7 +5435,7 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield * counter value. * The counter is incremented either way. */ - sn_size = vec_size(parser->function->static_names); + sn_size = parser->function->static_names.size(); for (sn = 0; sn != sn_size; ++sn) { if (strcmp(parser->function->static_names[sn], var->name) == 0) break; @@ -5447,7 +5447,7 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield mem_d(num); } else - vec_push(parser->function->static_names, util_strdup(var->name)); + parser->function->static_names.push_back(util_strdup(var->name)); parser->function->static_count++; ast_value_set_name(var, defname);