]> de.git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
This should actually cover all nil cases
authorWolfgang Bumiller <blub@speed.at>
Mon, 31 Dec 2012 10:34:29 +0000 (11:34 +0100)
committerWolfgang Bumiller <blub@speed.at>
Mon, 31 Dec 2012 10:34:29 +0000 (11:34 +0100)
ast.c
parser.c

diff --git a/ast.c b/ast.c
index f18499b257bd0cb9cf2fc5b98b6a39d07701f73e..41a4fa4f0b68f52f95f595887a4cc3ac128aef35 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -204,6 +204,9 @@ ast_expression* ast_type_copy(lex_ctx ctx, const ast_expression *ex)
 
 bool ast_compare_type(ast_expression *a, ast_expression *b)
 {
+    if (a->expression.vtype == TYPE_NIL ||
+        b->expression.vtype == TYPE_NIL)
+        return true;
     if (a->expression.vtype != b->expression.vtype)
         return false;
     if (!a->expression.next != !b->expression.next)
@@ -909,8 +912,7 @@ bool ast_call_check_types(ast_call *self)
         count = vec_size(func->expression.params);
 
     for (i = 0; i < count; ++i) {
-        if (self->params[i]->expression.vtype != TYPE_NIL &&
-            !ast_compare_type(self->params[i], (ast_expression*)(func->expression.params[i])))
+        if (!ast_compare_type(self->params[i], (ast_expression*)(func->expression.params[i])))
         {
             char texp[1024];
             char tgot[1024];
index 0dddd78d67437b799bce43174129e0417da88dc8..edf4f2a5306273591aa41fe68603679b39b608fe 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -1041,8 +1041,7 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy)
                 }
                 else
                     assignop = type_storep_instr[exprs[0]->expression.vtype];
-                if (assignop == AINSTR_END ||
-                    (exprs[1]->expression.vtype != TYPE_NIL && !ast_compare_type(field->expression.next, exprs[1])))
+                if (assignop == AINSTR_END || !ast_compare_type(field->expression.next, exprs[1]))
                 {
                     ast_type_to_string(field->expression.next, ty1, sizeof(ty1));
                     ast_type_to_string(exprs[1], ty2, sizeof(ty2));
@@ -1074,8 +1073,7 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy)
                     ast_type_to_string(exprs[1], ty2, sizeof(ty2));
                     parseerror(parser, "invalid types in assignment: cannot assign %s to %s", ty2, ty1);
                 }
-                else if (exprs[1]->expression.vtype != TYPE_NIL &&
-                         !ast_compare_type(exprs[0], exprs[1]))
+                else if (!ast_compare_type(exprs[0], exprs[1]))
                 {
                     ast_type_to_string(exprs[0], ty1, sizeof(ty1));
                     ast_type_to_string(exprs[1], ty2, sizeof(ty2));