]> git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
Check types on + and - operations
authorWolfgang (Blub) Bumiller <blub@speed.at>
Mon, 13 Aug 2012 13:09:27 +0000 (15:09 +0200)
committerWolfgang (Blub) Bumiller <blub@speed.at>
Mon, 13 Aug 2012 13:09:27 +0000 (15:09 +0200)
parser.c

index 973ab4bc3c7ca0a0cb9cb4dce699e71eca315115..4a46b56cb0c18e38651d37152c2ae4fc6a5ca815 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -410,6 +410,12 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy)
                            type_name[exprs[1]->expression.vtype]);
                 return false;
             }
+            if (exprs[0]->expression.vteyp != TYPE_VECTOR && exprs[0]->expression.vtype != TYPE_FLOAT) {
+                parseerror(parser, "type error: %s - %s not defined",
+                           type_name[exprs[0]->expression.vtype],
+                           type_name[exprs[1]->expression.vtype]);
+                return false;
+            }
             switch (exprs[0]->expression.vtype) {
                 case TYPE_FLOAT:
                     out = (ast_expression*)ast_binary_new(ctx, INSTR_ADD_F, exprs[0], exprs[1]);
@@ -431,6 +437,12 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy)
                            type_name[exprs[0]->expression.vtype]);
                 return false;
             }
+            if (exprs[0]->expression.vteyp != TYPE_VECTOR && exprs[0]->expression.vtype != TYPE_FLOAT) {
+                parseerror(parser, "type error: %s - %s not defined",
+                           type_name[exprs[0]->expression.vtype],
+                           type_name[exprs[1]->expression.vtype]);
+                return false;
+            }
             switch (exprs[0]->expression.vtype) {
                 case TYPE_FLOAT:
                     out = (ast_expression*)ast_binary_new(ctx, INSTR_SUB_F, exprs[0], exprs[1]);