blob: 4dc8bac1368613234197b85d2306acc2a72e738c [file] [log] [blame]
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#include "vm/bootstrap_natives.h"
#include "vm/object.h"
namespace dart {
DEFINE_NATIVE_ENTRY(Identical_comparison, 2) {
GET_NATIVE_ARGUMENT(Instance, a, arguments->NativeArgAt(0));
GET_NATIVE_ARGUMENT(Instance, b, arguments->NativeArgAt(1));
if (a.raw() == b.raw()) return Bool::True().raw();
if (a.IsInteger() && b.IsInteger()) {
return Bool::Get(a.Equals(b));
}
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