Browse Source

Merge pull request #11473 from hpvb/fix-11466

Implement operator != on Pool*Array types
Rémi Verschelde 7 years ago
parent
commit
ebaf2d89e9
1 changed files with 14 additions and 8 deletions
  1. 14 8
      core/variant_op.cpp

+ 14 - 8
core/variant_op.cpp

@@ -334,6 +334,13 @@ bool Variant::booleanize() const {
 		DEFAULT_OP_ARRAY_OP_BODY(m_prefix, m_op_name, m_name, m_type, !=, !=, true, false, false) \
 	}
 
+#define DEFAULT_OP_ARRAY_NEQ(m_prefix, m_op_name, m_name, m_type)                                \
+	CASE_TYPE(m_prefix, m_op_name, m_name) {                                                     \
+		if (p_b.type == NIL)                                                                     \
+			_RETURN(true)                                                                        \
+		DEFAULT_OP_ARRAY_OP_BODY(m_prefix, m_op_name, m_name, m_type, !=, ==, true, true, false) \
+	}
+
 #define DEFAULT_OP_ARRAY_LT(m_prefix, m_op_name, m_name, m_type) \
 	DEFAULT_OP_ARRAY_OP(m_prefix, m_op_name, m_name, m_type, <, !=, false, a_len < array_b.size(), true)
 
@@ -555,14 +562,13 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a,
 			DEFAULT_OP_STR_NULL(math, OP_NOT_EQUAL, NODE_PATH, !=, NodePath);
 			DEFAULT_OP_LOCALMEM_NULL(math, OP_NOT_EQUAL, _RID, !=, RID);
 
-			CASE_TYPE(math, OP_NOT_EQUAL, POOL_BYTE_ARRAY);
-			CASE_TYPE(math, OP_NOT_EQUAL, POOL_INT_ARRAY);
-			CASE_TYPE(math, OP_NOT_EQUAL, POOL_REAL_ARRAY);
-			CASE_TYPE(math, OP_NOT_EQUAL, POOL_STRING_ARRAY);
-			CASE_TYPE(math, OP_NOT_EQUAL, POOL_VECTOR2_ARRAY);
-			CASE_TYPE(math, OP_NOT_EQUAL, POOL_VECTOR3_ARRAY);
-			CASE_TYPE(math, OP_NOT_EQUAL, POOL_COLOR_ARRAY);
-			_RETURN_FAIL;
+			DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_BYTE_ARRAY, uint8_t);
+			DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_INT_ARRAY, int);
+			DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_REAL_ARRAY, real_t);
+			DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_STRING_ARRAY, String);
+			DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_VECTOR2_ARRAY, Vector2);
+			DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_VECTOR3_ARRAY, Vector3);
+			DEFAULT_OP_ARRAY_NEQ(math, OP_NOT_EQUAL, POOL_COLOR_ARRAY, Color);
 		}
 
 		SWITCH_OP(math, OP_LESS, p_a.type) {