Index: runtime/lib/identical.cc |
=================================================================== |
--- runtime/lib/identical.cc (revision 37016) |
+++ runtime/lib/identical.cc (working copy) |
@@ -38,8 +38,30 @@ |
GET_NATIVE_ARGUMENT(Instance, b, arguments->NativeArgAt(1)); |
const bool is_identical = a.IsIdenticalTo(b); |
if (FLAG_warn_on_javascript_compatibility) { |
- if (!is_identical && a.IsString() && String::Cast(a).Equals(b)) { |
- JSWarning("strings that are equal are also identical"); |
+ if (!is_identical) { |
+ if (a.IsString()) { |
+ if (String::Cast(a).Equals(b)) { |
+ JSWarning("strings that are equal are also identical"); |
+ } |
+ } else if (a.IsInteger()) { |
+ if (b.IsDouble()) { |
+ const int64_t a_value = Integer::Cast(a).AsInt64Value(); |
+ const double b_value = Double::Cast(b).value(); |
+ if (a_value == floor(b_value)) { |
+ JSWarning("integer value and integral double value that are equal " |
+ "are also identical"); |
+ } |
+ } |
+ } else if (a.IsDouble()) { |
+ if (b.IsInteger()) { |
+ const double a_value = Double::Cast(a).value(); |
+ const int64_t b_value = Integer::Cast(b).AsInt64Value(); |
+ if (floor(a_value) == b_value) { |
+ JSWarning("integral double value and integer value that are equal " |
+ "are also identical"); |
+ } |
+ } |
+ } |
} |
} |
return Bool::Get(is_identical).raw(); |