| 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();
|
|
|