Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(152)

Unified Diff: src/objects.cc

Issue 1421413002: Update to ES2015 == semantics for Symbol/SIMD wrappers (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: make ordering closer to other clauses Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | test/cctest/test-api.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index a75dfc1e8413ba6ed079ecf7b51cfe187bcb811f..86964bb694c30c37a940be93d1839e610cc7f564 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -291,8 +291,9 @@ Maybe<bool> Object::Equals(Handle<Object> x, Handle<Object> y) {
} else if (y->IsString()) {
return Just(NumberEquals(x, String::ToNumber(Handle<String>::cast(y))));
} else if (y->IsJSReceiver() && !y->IsUndetectableObject()) {
- if (!JSReceiver::ToPrimitive(Handle<JSReceiver>::cast(y))
- .ToHandle(&y)) {
+ if (JSReceiver::ToPrimitive(Handle<JSReceiver>::cast(y)).ToHandle(&y)) {
+ continue;
+ } else {
return Nothing<bool>();
}
} else {
@@ -309,8 +310,9 @@ Maybe<bool> Object::Equals(Handle<Object> x, Handle<Object> y) {
x = String::ToNumber(Handle<String>::cast(x));
return Just(NumberEquals(*x, Handle<Oddball>::cast(y)->to_number()));
} else if (y->IsJSReceiver() && !y->IsUndetectableObject()) {
- if (!JSReceiver::ToPrimitive(Handle<JSReceiver>::cast(y))
- .ToHandle(&y)) {
+ if (JSReceiver::ToPrimitive(Handle<JSReceiver>::cast(y)).ToHandle(&y)) {
+ continue;
+ } else {
return Nothing<bool>();
}
} else {
@@ -330,25 +332,47 @@ Maybe<bool> Object::Equals(Handle<Object> x, Handle<Object> y) {
return Nothing<bool>();
}
x = Oddball::ToNumber(Handle<Oddball>::cast(x));
+ continue;
} else {
return Just(false);
}
} else if (x->IsSymbol()) {
- return Just(x.is_identical_to(y));
+ if (y->IsSymbol()) {
+ return Just(x.is_identical_to(y));
+ } else if (y->IsJSReceiver() && !y->IsUndetectableObject()) {
+ if (JSReceiver::ToPrimitive(Handle<JSReceiver>::cast(y)).ToHandle(&y)) {
+ continue;
+ } else {
+ return Nothing<bool>();
+ }
+ } else {
+ return Just(false);
+ }
} else if (x->IsSimd128Value()) {
- if (!y->IsSimd128Value()) return Just(false);
- return Just(Simd128Value::Equals(Handle<Simd128Value>::cast(x),
- Handle<Simd128Value>::cast(y)));
+ if (y->IsSimd128Value()) {
+ return Just(Simd128Value::Equals(Handle<Simd128Value>::cast(x),
+ Handle<Simd128Value>::cast(y)));
+ } else if (y->IsJSReceiver() && !y->IsUndetectableObject()) {
+ if (JSReceiver::ToPrimitive(Handle<JSReceiver>::cast(y)).ToHandle(&y)) {
+ continue;
+ } else {
+ return Nothing<bool>();
+ }
+ } else {
+ return Just(false);
+ }
} else if (x->IsJSReceiver() && !x->IsUndetectableObject()) {
if (y->IsJSReceiver()) {
return Just(x.is_identical_to(y));
- } else if (y->IsNull() || y->IsSimd128Value() || y->IsSymbol() ||
- y->IsUndefined()) {
+ } else if (y->IsNull() || y->IsUndefined()) {
return Just(false);
} else if (y->IsBoolean()) {
y = Oddball::ToNumber(Handle<Oddball>::cast(y));
- }
- if (!JSReceiver::ToPrimitive(Handle<JSReceiver>::cast(x)).ToHandle(&x)) {
+ continue;
+ } else if (JSReceiver::ToPrimitive(Handle<JSReceiver>::cast(x))
+ .ToHandle(&x)) {
+ continue;
+ } else {
return Nothing<bool>();
}
} else {
@@ -356,6 +380,7 @@ Maybe<bool> Object::Equals(Handle<Object> x, Handle<Object> y) {
(x->IsNull() || x->IsUndefined() || x->IsUndetectableObject()) &&
(y->IsNull() || y->IsUndefined() || y->IsUndetectableObject()));
}
+ UNREACHABLE();
}
}
« no previous file with comments | « no previous file | test/cctest/test-api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698