]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - fold.c
The problem was so subtle
[xonotic/gmqcc.git] / fold.c
diff --git a/fold.c b/fold.c
index 5352b78f531b801fd5c9f97b6853388d6067a07a..884e039969f569e983f87a37ba3387b5893f8155 100644 (file)
--- a/fold.c
+++ b/fold.c
@@ -383,13 +383,17 @@ static GMQCC_INLINE ast_expression *fold_op_sub(fold_t *fold, ast_value *a, ast_
 
 static GMQCC_INLINE ast_expression *fold_op_mul(fold_t *fold, ast_value *a, ast_value *b) {
     if (isfloat(a)) {
-        if (isfloat(b) && fold_can_2(a, b))
-            return fold_constgen_vector(fold, vec3_mulvf(fold_immvalue_vector(b), fold_immvalue_float(a)));
-        else if (fold_can_2(a, b))
-            return fold_constgen_float(fold, fold_immvalue_float(a) * fold_immvalue_float(b));
+        if (isvector(b)) {
+            if (fold_can_2(a, b))
+                return fold_constgen_vector(fold, vec3_mulvf(fold_immvalue_vector(b), fold_immvalue_float(a)));
+        } else {
+            if (fold_can_2(a, b))
+                return fold_constgen_float(fold, fold_immvalue_float(a) * fold_immvalue_float(b));
+        }
     } else if (isvector(a)) {
-        if (isfloat(b) && fold_can_2(a, b)) {
-            return fold_constgen_vector(fold, vec3_mulvf(fold_immvalue_vector(a), fold_immvalue_float(b)));
+        if (isfloat(b)) {
+            if (fold_can_2(a, b))
+                return fold_constgen_vector(fold, vec3_mulvf(fold_immvalue_vector(a), fold_immvalue_float(b)));
         } else {
             if (fold_can_2(a, b)) {
                 return fold_constgen_float(fold, vec3_mulvv(fold_immvalue_vector(a), fold_immvalue_vector(b)));
@@ -581,5 +585,6 @@ ast_expression *fold_op(fold_t *fold, const oper_info *info, ast_expression **op
         case opid2('=','='):     return fold_op_cmp    (fold, a, b, false);
         case opid2('~','P'):     return fold_op_bnot   (fold, a);
     }
+    compile_error(fold_ctx(fold), "internal error: attempted to constant for unsupported operator");
     return NULL;
 }