Index: runtime/lib/identical.cc |
=================================================================== |
--- runtime/lib/identical.cc (revision 27544) |
+++ runtime/lib/identical.cc (working copy) |
@@ -11,7 +11,21 @@ |
DEFINE_NATIVE_ENTRY(Identical_comparison, 2) { |
GET_NATIVE_ARGUMENT(Instance, a, arguments->NativeArgAt(0)); |
GET_NATIVE_ARGUMENT(Instance, b, arguments->NativeArgAt(1)); |
- return Bool::Get(a.IsIdenticalTo(b)).raw(); |
+ if (a.raw() == b.raw()) return Bool::True().raw(); |
+ if (a.IsInteger() && b.IsInteger()) { |
+ return Bool::Get(a.Equals(b)).raw(); |
+ } |
+ if (a.IsDouble() && b.IsDouble()) { |
+ if (a.Equals(b)) return Bool::True().raw(); |
+ // Check for NaN. |
+ const Double& a_double = Double::Cast(a); |
+ const Double& b_double = Double::Cast(b); |
+ if (isnan(a_double.value()) && isnan(b_double.value())) { |
+ return Bool::True().raw(); |
+ } |
+ } |
+ return Bool::False().raw(); |
} |
+ |
} // namespace dart |