From 2e037832d36a30d6b4062232c52670f676011912 Mon Sep 17 00:00:00 2001
From: Dale Weiler <weilercdale@gmail.com>
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<ast_block*> 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);
-- 
2.39.5