]> git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
ast_block_set_type
authorWolfgang Bumiller <wolfgang.linux@bumiller.com>
Fri, 27 Jul 2012 11:39:58 +0000 (13:39 +0200)
committerWolfgang Bumiller <wolfgang.linux@bumiller.com>
Fri, 27 Jul 2012 11:39:58 +0000 (13:39 +0200)
ast.c
ast.h

diff --git a/ast.c b/ast.c
index f6e96c4f116b0df0f47adad4edaaa63a02f73dfe..16a030aed2c92124a9f15fd124c46b8a1e841a8b 100644 (file)
--- 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 4f901e894a243eefebb524ca0ba91f7771d04426..9ed7d262febf9ad681cf020010a190157451ea9d 100644 (file)
--- 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);