]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - parser.c
Remove pointless thinking comment, fix builds for clang.
[xonotic/gmqcc.git] / parser.c
index 839e089ec871820f2f6fcb8e4ea4db2d5ba7d5ae..b5f6fe4d3415c3489f9aee37d12c83e8932b934c 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -466,22 +466,13 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy)
             break;
         case opid2('-','P'):
             if (!(out = fold_op(parser->fold, op, exprs))) {
-                switch (exprs[0]->vtype) {
-                    case TYPE_FLOAT:
-                        out = (ast_expression*)ast_binary_new(ctx, INSTR_SUB_F,
-                                                                  (ast_expression*)parser->fold->imm_float[0],
-                                                                  exprs[0]);
-                        break;
-                    case TYPE_VECTOR:
-                        out = (ast_expression*)ast_binary_new(ctx, INSTR_SUB_V,
-                                                                  (ast_expression*)parser->fold->imm_vector[0],
-                                                                  exprs[0]);
-                        break;
-                    default:
-                    compile_error(ctx, "invalid types used in expression: cannot negate type %s",
-                                  type_name[exprs[0]->vtype]);
+                if (exprs[0]->vtype != TYPE_FLOAT &&
+                    exprs[0]->vtype != TYPE_VECTOR) {
+                        compile_error(ctx, "invalid types used in unary expression: cannot negate type %s",
+                                      type_name[exprs[0]->vtype]);
                     return false;
                 }
+                out = (ast_expression*)ast_unary_new(ctx, (VINSTR_NEG_F-TYPE_FLOAT) + exprs[0]->vtype, exprs[0]);
             }
             break;
 
@@ -5308,7 +5299,7 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield
                             return false;
                         }
 
-                        if (var->expression.vtype != find->vtype) {
+                        if (!ast_compare_type((ast_expression*)var, find)) {
                             char ty1[1024];
                             char ty2[1024];