QSEqualsResult QSStringClass::isEqual( const QSObject &a, const QSObject &b ) const { Q_ASSERT( a.isA( this ) ); if ( b.isString() ) return (QSEqualsResult) (a.sVal() == b.sVal() || (a.sVal().isEmpty() && b.sVal().isEmpty())); else if ( b.isNumber() ) return ( QSEqualsResult ) ( a.sVal() == b.toString() ); else if ( !b.isPrimitive() ) return isEqual( a, b.toPrimitive() ); else return EqualsUndefined; }
QSEqualsResult QSNumberClass::isEqual( const QSObject &a, const QSObject &b ) const { Q_ASSERT( a.isA( this ) ); if ( b.isNumber() ) { double n1 = a.dVal(); double n2 = b.dVal(); if ( isNaN( n1 ) || isNaN( n2 ) ) return EqualsNotEqual; else return ( QSEqualsResult ) ( n1 == n2 ); // ### compare -0 agains +0 } else if ( b.isString() ) { return ( QSEqualsResult ) ( a.dVal() == b.toNumber() ); } else if ( !b.isPrimitive() ) { return isEqual( a, b.toPrimitive() ); } else { return EqualsUndefined; } }