From ab11808208646a26e3541f0c48837f428e669553 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Fri, 27 Jul 2012 13:39:58 +0200 Subject: [PATCH] ast_block_set_type --- ast.c | 13 +++++++++++++ ast.h | 1 + 2 files changed, 14 insertions(+) diff --git a/ast.c b/ast.c index f6e96c4..16a030a 100644 --- a/ast.c +++ b/ast.c @@ -420,6 +420,19 @@ void ast_block_delete(ast_block *self) mem_d(self); } +bool ast_block_set_type(ast_block *self, ast_expression *from) +{ + if (self->expression.next) + ast_delete(self->expression.next); + self->expression.vtype = from->expression.vtype; + if (from->expression.next) { + self->expression.next = ast_type_copy(self->expression.node.context, from->expression.next); + if (!self->expression.next) + return false; + } + return true; +} + ast_function* ast_function_new(lex_ctx ctx, const char *name, ast_value *vtype) { ast_instantiate(ast_function, ctx, ast_function_delete); diff --git a/ast.h b/ast.h index 4f901e8..9ed7d26 100644 --- a/ast.h +++ b/ast.h @@ -359,6 +359,7 @@ struct ast_block_s }; ast_block* ast_block_new(lex_ctx ctx); void ast_block_delete(ast_block*); +bool ast_block_set_type(ast_block*, ast_expression *from); MEM_VECTOR_PROTO(ast_block, ast_value*, locals); MEM_VECTOR_PROTO(ast_block, ast_expression*, exprs); -- 2.39.2