From 2e037832d36a30d6b4062232c52670f676011912 Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Thu, 15 Jan 2015 14:15:44 -0500 Subject: [PATCH] Use std::vector for ast blocks --- ast.cpp | 16 ++++++---------- ast.h | 2 +- ftepp.cpp | 1 - intrin.cpp | 50 ++++++++++++++++++++------------------------------ parser.cpp | 4 ++-- 5 files changed, 29 insertions(+), 44 deletions(-) diff --git a/ast.cpp b/ast.cpp index 6db9bef..2a6657d 100644 --- a/ast.cpp +++ b/ast.cpp @@ -1177,7 +1177,6 @@ ast_function* ast_function_new(lex_ctx_t ctx, const char *name, ast_value *vtype self->vtype = vtype; self->name = name ? util_strdup(name) : NULL; - self->blocks = NULL; self->labelcount = 0; self->builtin = 0; @@ -1223,9 +1222,8 @@ void ast_function_delete(ast_function *self) for (i = 0; i < vec_size(self->static_names); ++i) mem_d(self->static_names[i]); vec_free(self->static_names); - for (i = 0; i < vec_size(self->blocks); ++i) - ast_delete(self->blocks[i]); - vec_free(self->blocks); + for (auto &it : self->blocks) + ast_delete(it); vec_free(self->breakblocks); vec_free(self->continueblocks); if (self->varargs) @@ -1785,8 +1783,6 @@ bool ast_function_codegen(ast_function *self, ir_builder *ir) ast_expression *ec; ast_expression_codegen *cgen; - size_t i; - (void)ir; irf = self->ir_func; @@ -1825,7 +1821,7 @@ bool ast_function_codegen(ast_function *self, ir_builder *ir) return false; } - if (!vec_size(self->blocks)) { + if (self->blocks.empty()) { compile_error(ast_ctx(self), "function `%s` has no body", self->name); return false; } @@ -1860,9 +1856,9 @@ bool ast_function_codegen(ast_function *self, ir_builder *ir) } } - for (i = 0; i < vec_size(self->blocks); ++i) { - cgen = self->blocks[i]->expression.codegen; - if (!(*cgen)((ast_expression*)self->blocks[i], self, false, &dummy)) + for (auto &it : self->blocks) { + cgen = it->expression.codegen; + if (!(*cgen)((ast_expression*)it, self, false, &dummy)) return false; } diff --git a/ast.h b/ast.h index 3938f2a..e5b331b 100644 --- a/ast.h +++ b/ast.h @@ -649,7 +649,7 @@ struct ast_function * here to use in ast_function_label. */ char labelbuf[64]; - ast_block* *blocks; + std::vector blocks; ast_value *varargs; ast_value *argc; ast_value *fixedparams; diff --git a/ftepp.cpp b/ftepp.cpp index 0f292d0..649a553 100644 --- a/ftepp.cpp +++ b/ftepp.cpp @@ -1926,7 +1926,6 @@ void ftepp_add_define(ftepp_t *ftepp, const char *source, const char *name) lex_ctx_t ctx = { "__builtin__", 0, 0 }; ctx.file = source; macro = ppmacro_new(ctx, name); - /*vec_push(ftepp->macros, macro);*/ util_htset(ftepp->macros, name, macro); } diff --git a/intrin.cpp b/intrin.cpp index 13c382a..643301e 100644 --- a/intrin.cpp +++ b/intrin.cpp @@ -85,7 +85,7 @@ static ast_expression *intrin_isfinite(intrin_t *intrin) { ) ); - vec_push(func->blocks, block); + func->blocks.push_back(block); intrin_reg(intrin, value, func); return (ast_expression*)value;; @@ -130,7 +130,7 @@ static ast_expression *intrin_isinf(intrin_t *intrin) { ); value->expression.params.push_back(x); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); @@ -175,7 +175,7 @@ static ast_expression *intrin_isnan(intrin_t *intrin) { ); value->expression.params.push_back(arg1); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); @@ -205,7 +205,7 @@ static ast_expression *intrin_isnormal(intrin_t *intrin) { ) ); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); return (ast_expression*)value; } @@ -241,7 +241,7 @@ static ast_expression *intrin_signbit(intrin_t *intrin) { ) ); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); return (ast_expression*)value; } @@ -294,7 +294,7 @@ static ast_expression *intrin_acosh(intrin_t *intrin) { ) ); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); return (ast_expression*)value; } @@ -347,7 +347,7 @@ static ast_expression *intrin_asinh(intrin_t *intrin) { ) ); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); return (ast_expression*)value; } @@ -396,7 +396,7 @@ static ast_expression *intrin_atanh(intrin_t *intrin) { ) ); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); return (ast_expression*)value; } @@ -509,8 +509,7 @@ static ast_expression *intrin_exp(intrin_t *intrin) { ) ); - vec_push(func->blocks, body); - + func->blocks.push_back(body); intrin_reg(intrin, value, func); return (ast_expression*)value; } @@ -540,8 +539,7 @@ static ast_expression *intrin_exp2(intrin_t *intrin) { ) ); - vec_push(func->blocks, body); - + func->blocks.push_back(body); intrin_reg(intrin, value, func); return (ast_expression*)value; } @@ -576,7 +574,7 @@ static ast_expression *intrin_expm1(intrin_t *intrin) { ) ); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); return (ast_expression*)value; } @@ -1021,8 +1019,7 @@ static ast_expression *intrin_pow(intrin_t *intrin) { ); /* } */ - vec_push(func->blocks, body); - + func->blocks.push_back(body); intrin_reg(intrin, value, func); return (ast_expression*)value; } @@ -1118,9 +1115,8 @@ static ast_expression *intrin_mod(intrin_t *intrin) { ) ); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); - return (ast_expression*)value; } @@ -1158,10 +1154,8 @@ static ast_expression *intrin_fabs(intrin_t *intrin) { value->expression.params.push_back(arg1); - vec_push(func->blocks, body); - + func->blocks.push_back(body); intrin_reg(intrin, value, func); - return (ast_expression*)value; } @@ -1232,9 +1226,8 @@ static ast_expression *intrin_epsilon(intrin_t *intrin) { ) ); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); - return (ast_expression*)value; } @@ -1273,9 +1266,8 @@ static ast_expression *intrin_nan(intrin_t *intrin) { ) ); - vec_push(func->blocks, block); + func->blocks.push_back(block); intrin_reg(intrin, value, func); - return (ast_expression*)value; } @@ -1321,9 +1313,8 @@ static ast_expression *intrin_inf(intrin_t *intrin) { ) ); - vec_push(func->blocks, block); + func->blocks.push_back(block); intrin_reg(intrin, value, func); - return (ast_expression*)value; } @@ -1866,9 +1857,8 @@ static ast_expression *intrin_ln(intrin_t *intrin) { ) ); - vec_push(func->blocks, block); + func->blocks.push_back(block); intrin_reg(intrin, value, func); - return (ast_expression*)value; } @@ -1891,7 +1881,7 @@ static ast_expression *intrin_log_variant(intrin_t *intrin, const char *name, fl ) ); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); return (ast_expression*)value; } @@ -1948,7 +1938,7 @@ static ast_expression *intrin_shift_variant(intrin_t *intrin, const char *name, ) ); - vec_push(func->blocks, body); + func->blocks.push_back(body); intrin_reg(intrin, value, func); return (ast_expression*)value; } diff --git a/parser.cpp b/parser.cpp index c2d3eb3..b2d423e 100644 --- a/parser.cpp +++ b/parser.cpp @@ -4096,7 +4096,7 @@ static bool parse_function_body(parser_t *parser, ast_value *var) goto enderrfn; } - vec_push(func->blocks, block); + func->blocks.push_back(block); parser->function = old; if (!parser_leaveblock(parser)) @@ -4356,7 +4356,7 @@ static bool parser_create_array_accessor(parser_t *parser, ast_value *array, con return false; } - vec_push(func->blocks, body); + func->blocks.push_back(body); *out = fval; parser->accessors.push_back(fval);