diff options
author | Juan Linietsky <reduzio@gmail.com> | 2017-02-14 17:05:51 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-14 17:05:51 -0300 |
commit | 9cdd364fc0edee407a65fbef674dcc3bcea378a9 (patch) | |
tree | 8beec0bfd954a7068566855aa970120283763b06 | |
parent | 78336990f4f6c36db2000d6097826bbe573eb016 (diff) | |
parent | 04a6d2789e65c41b616380fcb89d66c183918eaa (diff) |
Merge pull request #7811 from godotengine/revert-7807-fix-7354
Revert "Make nan==nan true for GDScript"
-rw-r--r-- | core/math/math_2d.cpp | 7 | ||||
-rw-r--r-- | core/math/math_2d.h | 3 | ||||
-rw-r--r-- | core/math/plane.cpp | 5 | ||||
-rw-r--r-- | core/math/plane.h | 1 | ||||
-rw-r--r-- | core/math/quat.cpp | 19 | ||||
-rw-r--r-- | core/math/quat.h | 2 | ||||
-rw-r--r-- | core/math/vector3.cpp | 11 | ||||
-rw-r--r-- | core/math/vector3.h | 1 | ||||
-rw-r--r-- | core/variant_op.cpp | 76 |
9 files changed, 26 insertions, 99 deletions
diff --git a/core/math/math_2d.cpp b/core/math/math_2d.cpp index 995cb0834a..76eeece688 100644 --- a/core/math/math_2d.cpp +++ b/core/math/math_2d.cpp @@ -157,13 +157,6 @@ bool Vector2::operator!=(const Vector2& p_vec2) const { return x!=p_vec2.x || y!=p_vec2.y; } -bool Vector2::nan_equals(const Vector2& p_vec2) const { - - return (x==p_vec2.x && y==p_vec2.y) || - (x==p_vec2.x && isnan(y) && isnan(p_vec2.y)) || - (isnan(x) && isnan(p_vec2.x) && y == p_vec2.y); -} - Vector2 Vector2::floor() const { return Vector2( Math::floor(x), Math::floor(y) ); diff --git a/core/math/math_2d.h b/core/math/math_2d.h index 6dd8799ba2..a24c4266ee 100644 --- a/core/math/math_2d.h +++ b/core/math/math_2d.h @@ -133,7 +133,6 @@ struct Vector2 { bool operator<(const Vector2& p_vec2) const { return (x==p_vec2.x)?(y<p_vec2.y):(x<p_vec2.x); } bool operator<=(const Vector2& p_vec2) const { return (x==p_vec2.x)?(y<=p_vec2.y):(x<=p_vec2.x); } - bool nan_equals(const Vector2& p_vec2) const; real_t angle() const; void set_rotation(real_t p_radians) { @@ -320,8 +319,6 @@ struct Rect2 { bool operator==(const Rect2& p_rect) const { return pos==p_rect.pos && size==p_rect.size; } bool operator!=(const Rect2& p_rect) const { return pos!=p_rect.pos || size!=p_rect.size; } - bool nan_equals(const Rect2& p_rect) const { return pos.nan_equals(p_rect.pos) && size == p_rect.size; } - inline Rect2 grow(real_t p_by) const { Rect2 g=*this; diff --git a/core/math/plane.cpp b/core/math/plane.cpp index 0d446059c4..2a97932049 100644 --- a/core/math/plane.cpp +++ b/core/math/plane.cpp @@ -164,8 +164,3 @@ Plane::operator String() const { return normal.operator String() + ", " + rtos(d); } - -bool Plane::nan_equals(const Plane& p_plane) const { - - return normal.nan_equals(p_plane.normal) && d == p_plane.d; -} diff --git a/core/math/plane.h b/core/math/plane.h index 13cfc265bc..8235c59135 100644 --- a/core/math/plane.h +++ b/core/math/plane.h @@ -73,7 +73,6 @@ public: _FORCE_INLINE_ bool operator==(const Plane& p_plane) const; _FORCE_INLINE_ bool operator!=(const Plane& p_plane) const; - bool nan_equals(const Plane& p_plane) const; operator String() const; _FORCE_INLINE_ Plane() { d=0; } diff --git a/core/math/quat.cpp b/core/math/quat.cpp index 5ba5a7706b..4085f9b84a 100644 --- a/core/math/quat.cpp +++ b/core/math/quat.cpp @@ -284,22 +284,3 @@ Quat::Quat(const Vector3& axis, const real_t& angle) { cos_angle); } } - -bool Quat::nan_equals(const Quat& q2) const { - return (x == q2.x && y == q2.y && z == q2.z && w == q2.w) || - (x == q2.x && y == q2.y && z == q2.z && isnan(w) && isnan(q2.w)) || - (x == q2.x && y == q2.y && isnan(z) && isnan(q2.z) && w == q2.w) || - (x == q2.x && y == q2.y && isnan(z) && isnan(q2.z) && isnan(w) && isnan(q2.w)) || - (x == q2.x && isnan(y) && isnan(q2.y) && z == q2.z && w == q2.w) || - (x == q2.x && isnan(y) && isnan(q2.y) && z == q2.z && isnan(w) && isnan(q2.w)) || - (x == q2.x && isnan(y) && isnan(q2.y) && isnan(z) && isnan(q2.z) && w == q2.w) || - (x == q2.x && isnan(y) && isnan(q2.y) && isnan(z) && isnan(q2.z) && isnan(w) && isnan(q2.w)) || - (isnan(x) && isnan(q2.x) && y == q2.y && z == q2.z && w == q2.w) || - (isnan(x) && isnan(q2.x) && y == q2.y && z == q2.z && isnan(w) && isnan(q2.w)) || - (isnan(x) && isnan(q2.x) && y == q2.y && isnan(z) && isnan(q2.z) && w == q2.w) || - (isnan(x) && isnan(q2.x) && y == q2.y && isnan(z) && isnan(q2.z) && isnan(w) && isnan(q2.w)) || - (isnan(x) && isnan(q2.x) && isnan(y) && isnan(q2.y) && z == q2.z && w == q2.w) || - (isnan(x) && isnan(q2.x) && isnan(y) && isnan(q2.y) && z == q2.z && isnan(w) && isnan(q2.w)) || - (isnan(x) && isnan(q2.x) && isnan(y) && isnan(q2.y) && isnan(z) && isnan(q2.z) && w == q2.w) || - (isnan(x) && isnan(q2.x) && isnan(y) && isnan(q2.y) && isnan(z) && isnan(q2.z) && isnan(w) && isnan(q2.w)); -} diff --git a/core/math/quat.h b/core/math/quat.h index 5d91bb1d36..d3a50343a3 100644 --- a/core/math/quat.h +++ b/core/math/quat.h @@ -93,7 +93,6 @@ public: _FORCE_INLINE_ Quat operator*(const real_t& s) const; _FORCE_INLINE_ Quat operator/(const real_t& s) const; - bool nan_equals(const Quat& q2) const; _FORCE_INLINE_ bool operator==(const Quat& p_quat) const; _FORCE_INLINE_ bool operator!=(const Quat& p_quat) const; @@ -194,4 +193,5 @@ bool Quat::operator!=(const Quat& p_quat) const { return x!=p_quat.x || y!=p_quat.y || z!=p_quat.z || w!=p_quat.w; } + #endif diff --git a/core/math/vector3.cpp b/core/math/vector3.cpp index 7fdb54bb69..2ab5fa0465 100644 --- a/core/math/vector3.cpp +++ b/core/math/vector3.cpp @@ -176,17 +176,6 @@ Vector3 Vector3::cubic_interpolate(const Vector3& p_b,const Vector3& p_pre_a, co return out; } # endif -bool Vector3::nan_equals(const Vector3& p_v) const { - return (x == p_v.x && y == p_v.y && z == p_v.z) || - (x == p_v.x && y == p_v.y && isnan(z) && isnan(p_v.z)) || - (x == p_v.x && isnan(y) && isnan(p_v.y) && z == p_v.z) || - (isnan(x) && isnan(p_v.x) && y == p_v.y && z == p_v.z) || - (x == p_v.x && isnan(y) && isnan(p_v.y) && isnan(z) && isnan(p_v.z)) || - (isnan(x) && isnan(p_v.x) && y == p_v.y && isnan(z) && isnan(p_v.z)) || - (isnan(x) && isnan(p_v.x) && isnan(y) && isnan(p_v.y) && z == p_v.z) || - (isnan(x) && isnan(p_v.x) && isnan(y) && isnan(p_v.y) && isnan(z) && isnan(p_v.z)); -} - Vector3::operator String() const { return (rtos(x)+", "+rtos(y)+", "+rtos(z)); diff --git a/core/math/vector3.h b/core/math/vector3.h index 938b1b16cb..a289f9bf4c 100644 --- a/core/math/vector3.h +++ b/core/math/vector3.h @@ -134,7 +134,6 @@ struct Vector3 { _FORCE_INLINE_ bool operator<(const Vector3& p_v) const; _FORCE_INLINE_ bool operator<=(const Vector3& p_v) const; - bool nan_equals(const Vector3& p_v) const; operator String() const; _FORCE_INLINE_ Vector3() { x=y=z=0; } diff --git a/core/variant_op.cpp b/core/variant_op.cpp index 465de1faed..6ed8a3dd85 100644 --- a/core/variant_op.cpp +++ b/core/variant_op.cpp @@ -93,18 +93,6 @@ case m_name: {\ return;\ }; -#define DEFAULT_OP_NUM_NAN(m_op,m_name,m_type)\ -case m_name: {\ - switch(p_b.type) {\ - case BOOL: _RETURN((p_a._data.m_type m_op p_b._data._bool) || (isnan(p_a._data.m_type) && isnan(p_a._data._bool)));\ - case INT: _RETURN((p_a._data.m_type m_op p_b._data._int) || (isnan(p_a._data.m_type) && isnan(p_a._data._int)));\ - case REAL: _RETURN((p_a._data.m_type m_op p_b._data._real) || (isnan(p_a._data.m_type) && isnan(p_a._data._real)));\ - default: {}\ - }\ - r_valid=false;\ - return;\ -}; - #define DEFAULT_OP_NUM_NEG(m_name,m_type)\ case m_name: {\ \ @@ -144,12 +132,13 @@ case m_name: {\ #define DEFAULT_OP_LOCALMEM(m_op,m_name,m_type)\ case m_name: {switch(p_b.type) {\ - case m_name: _RETURN( (*reinterpret_cast<const m_type*>(p_a._data._mem))m_op(*reinterpret_cast<const m_type*>(p_b._data._mem)));\ + case m_name: _RETURN( *reinterpret_cast<const m_type*>(p_a._data._mem) m_op *reinterpret_cast<const m_type*>(p_b._data._mem));\ default: {}\ }\ r_valid=false;\ return;} + #define DEFAULT_OP_LOCALMEM_NEG(m_name,m_type)\ case m_name: {\ _RETURN( -*reinterpret_cast<const m_type*>(p_a._data._mem));\ @@ -188,28 +177,13 @@ r_valid=false;\ return;} #define DEFAULT_OP_ARRAY_EQ(m_name,m_type)\ -DEFAULT_OP_ARRAY_OP(m_name,m_type,!=,!=,true,false,false,true) - -#define DEFAULT_OP_ARRAY_EQ_NAN(m_name,m_type)\ - DEFAULT_ARRAY_OP_HEAD(m_name,m_type,!=,false,false)\ - if ((ra[i] != rb[i]) && (isnan(ra[i]) != isnan(rb[i])))\ - _RETURN(false);\ - DEFAULT_ARRAY_OP_FOOT(true) - -#define DEFAULT_OP_ARRAY_EQ_NAN_V(m_name,m_type)\ -DEFAULT_OP_ARRAY_OP(m_name,m_type,!=,.nan_equals,true,false,false,false) +DEFAULT_OP_ARRAY_OP(m_name,m_type,!=,!=,true,false,false) #define DEFAULT_OP_ARRAY_LT(m_name,m_type)\ -DEFAULT_OP_ARRAY_OP(m_name,m_type,<,!=,false,a_len<array_b.size(),true,true) +DEFAULT_OP_ARRAY_OP(m_name,m_type,<,!=,false,a_len<array_b.size(),true) -#define DEFAULT_OP_ARRAY_OP(m_name,m_type,m_opa,m_opb,m_ret_def,m_ret_s,m_ret_f,m_neg)\ - DEFAULT_ARRAY_OP_HEAD(m_name,m_type,m_opa,m_ret_s,m_ret_f)\ - if ((((ra[i])m_opb(rb[i]))==m_neg))\ - _RETURN(m_ret_f);\ - DEFAULT_ARRAY_OP_FOOT(m_ret_def) - -#define DEFAULT_ARRAY_OP_HEAD(m_name,m_type,m_opa,m_ret_s,m_ret_f)\ - case m_name: { \ +#define DEFAULT_OP_ARRAY_OP(m_name,m_type,m_opa,m_opb,m_ret_def,m_ret_s,m_ret_f)\ +case m_name: { \ if (p_a.type!=p_b.type) {\ r_valid=false;\ return;\ @@ -220,17 +194,17 @@ DEFAULT_OP_ARRAY_OP(m_name,m_type,<,!=,false,a_len<array_b.size(),true,true) int a_len = array_a.size();\ if (a_len m_opa array_b.size()){\ _RETURN( m_ret_s);\ - } else {\ + }else {\ \ PoolVector<m_type>::Read ra = array_a.read();\ PoolVector<m_type>::Read rb = array_b.read();\ \ for(int i=0;i<a_len;i++) {\ - -#define DEFAULT_ARRAY_OP_FOOT(m_ret_def)\ + if (ra[i] m_opb rb[i])\ + _RETURN( m_ret_f);\ }\ \ - _RETURN(m_ret_def);\ + _RETURN( m_ret_def);\ }\ } @@ -284,16 +258,16 @@ void Variant::evaluate(const Operator& p_op, const Variant& p_a, const Variant& _RETURN(p_b.type==NIL || (p_b.type==Variant::OBJECT && !p_b._get_obj().obj)); } break; - DEFAULT_OP_NUM_NAN(==,BOOL,_bool); - DEFAULT_OP_NUM_NAN(==,INT,_int); - DEFAULT_OP_NUM_NAN(==,REAL,_real); + DEFAULT_OP_NUM(==,BOOL,_bool); + DEFAULT_OP_NUM(==,INT,_int); + DEFAULT_OP_NUM(==,REAL,_real); DEFAULT_OP_STR(==,STRING,String); - DEFAULT_OP_LOCALMEM(.nan_equals,VECTOR2,Vector2); - DEFAULT_OP_LOCALMEM(.nan_equals,RECT2,Rect2); + DEFAULT_OP_LOCALMEM(==,VECTOR2,Vector2); + DEFAULT_OP_LOCALMEM(==,RECT2,Rect2); DEFAULT_OP_PTRREF(==,TRANSFORM2D,_transform2d); - DEFAULT_OP_LOCALMEM(.nan_equals,VECTOR3,Vector3); - DEFAULT_OP_LOCALMEM(.nan_equals,PLANE,Plane); - DEFAULT_OP_LOCALMEM(.nan_equals,QUAT,Quat); + DEFAULT_OP_LOCALMEM(==,VECTOR3,Vector3); + DEFAULT_OP_LOCALMEM(==,PLANE,Plane); + DEFAULT_OP_LOCALMEM(==,QUAT,Quat); DEFAULT_OP_PTRREF(==,RECT3,_rect3); DEFAULT_OP_PTRREF(==,BASIS,_basis); DEFAULT_OP_PTRREF(==,TRANSFORM,_transform); @@ -345,11 +319,11 @@ void Variant::evaluate(const Operator& p_op, const Variant& p_a, const Variant& DEFAULT_OP_ARRAY_EQ(POOL_BYTE_ARRAY,uint8_t); - DEFAULT_OP_ARRAY_EQ_NAN(POOL_INT_ARRAY,int); - DEFAULT_OP_ARRAY_EQ_NAN(POOL_REAL_ARRAY,real_t); + DEFAULT_OP_ARRAY_EQ(POOL_INT_ARRAY,int); + DEFAULT_OP_ARRAY_EQ(POOL_REAL_ARRAY,real_t); DEFAULT_OP_ARRAY_EQ(POOL_STRING_ARRAY,String); - DEFAULT_OP_ARRAY_EQ_NAN_V(POOL_VECTOR2_ARRAY,Vector3); - DEFAULT_OP_ARRAY_EQ_NAN_V(POOL_VECTOR3_ARRAY,Vector3); + DEFAULT_OP_ARRAY_EQ(POOL_VECTOR2_ARRAY,Vector3); + DEFAULT_OP_ARRAY_EQ(POOL_VECTOR3_ARRAY,Vector3); DEFAULT_OP_ARRAY_EQ(POOL_COLOR_ARRAY,Color); case VARIANT_MAX: { @@ -442,9 +416,9 @@ void Variant::evaluate(const Operator& p_op, const Variant& p_a, const Variant& switch(p_a.type) { DEFAULT_OP_FAIL(NIL); - DEFAULT_OP_NUM_NAN(<=,BOOL,_bool); - DEFAULT_OP_NUM_NAN(<=,INT,_int); - DEFAULT_OP_NUM_NAN(<=,REAL,_real); + DEFAULT_OP_NUM(<=,BOOL,_bool); + DEFAULT_OP_NUM(<=,INT,_int); + DEFAULT_OP_NUM(<=,REAL,_real); DEFAULT_OP_STR(<=,STRING,String); DEFAULT_OP_LOCALMEM(<=,VECTOR2,Vector2); DEFAULT_OP_FAIL(RECT2); |