]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - fold.cpp
Merge branch 'cleanup' of github.com:graphitemaster/gmqcc into cleanup
[xonotic/gmqcc.git] / fold.cpp
index 306e5cae628256ae18a1c6a5ce29dd7f40ab5c72..0f861171cbc7ec4f5c7d7f820425b989f3dec234 100644 (file)
--- a/fold.cpp
+++ b/fold.cpp
@@ -1335,11 +1335,15 @@ ast_expression *fold::op_cmp(ast_value *a, ast_value *b, bool ne) {
             float la = immvalue_float(a);
             float lb = immvalue_float(b);
             check_inexact_float(a, b);
             float la = immvalue_float(a);
             float lb = immvalue_float(b);
             check_inexact_float(a, b);
-            return (ast_expression*)m_imm_float[!(ne ? la == lb : la != lb)];
-        } if (isvector(a) && isvector(b)) {
+            return (ast_expression*)m_imm_float[ne ? la != lb : la == lb];
+        } else if (isvector(a) && isvector(b)) {
             vec3_t la = immvalue_vector(a);
             vec3_t lb = immvalue_vector(b);
             vec3_t la = immvalue_vector(a);
             vec3_t lb = immvalue_vector(b);
-            return (ast_expression*)m_imm_float[!(ne ? vec3_cmp(la, lb) : !vec3_cmp(la, lb))];
+            bool compare = vec3_cmp(la, lb);
+            return (ast_expression*)m_imm_float[ne ? !compare : compare];
+        } else if (isstring(a) && isstring(b)) {
+            bool compare = !strcmp(immvalue_string(a), immvalue_string(b));
+            return (ast_expression*)m_imm_float[ne ? !compare : compare];
         }
     }
     return nullptr;
         }
     }
     return nullptr;