From: Wolfgang Bumiller Date: Fri, 27 Jul 2012 11:39:58 +0000 (+0200) Subject: ast_block_set_type X-Git-Tag: 0.1-rc1~384^2 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=ab11808208646a26e3541f0c48837f428e669553;p=xonotic%2Fgmqcc.git ast_block_set_type --- 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);