Merge V8 5.3.332.45. DO NOT MERGE
Test: Manual
FPIIM-449
Change-Id: Id3254828b068abdea3cb10442e0172a8c9a98e03
(cherry picked from commit 13e2dadd00298019ed862f2b2fc5068bba730bcf)
diff --git a/src/runtime/runtime-forin.cc b/src/runtime/runtime-forin.cc
index 4b558d1..e57016a 100644
--- a/src/runtime/runtime-forin.cc
+++ b/src/runtime/runtime-forin.cc
@@ -22,14 +22,18 @@
// deletions during a for-in.
MaybeHandle<HeapObject> Enumerate(Handle<JSReceiver> receiver) {
Isolate* const isolate = receiver->GetIsolate();
- FastKeyAccumulator accumulator(isolate, receiver, INCLUDE_PROTOS,
+ JSObject::MakePrototypesFast(receiver, kStartAtReceiver, isolate);
+ FastKeyAccumulator accumulator(isolate, receiver,
+ KeyCollectionMode::kIncludePrototypes,
ENUMERABLE_STRINGS);
accumulator.set_filter_proxy_keys(false);
+ accumulator.set_is_for_in(true);
// Test if we have an enum cache for {receiver}.
if (!accumulator.is_receiver_simple_enum()) {
Handle<FixedArray> keys;
- ASSIGN_RETURN_ON_EXCEPTION(isolate, keys, accumulator.GetKeys(KEEP_NUMBERS),
- HeapObject);
+ ASSIGN_RETURN_ON_EXCEPTION(
+ isolate, keys, accumulator.GetKeys(GetKeysConversion::kKeepNumbers),
+ HeapObject);
// Test again, since cache may have been built by GetKeys() calls above.
if (!accumulator.is_receiver_simple_enum()) return keys;
}
@@ -61,7 +65,7 @@
Handle<Object> prototype;
ASSIGN_RETURN_ON_EXCEPTION(isolate, prototype,
JSProxy::GetPrototype(proxy), Object);
- if (prototype->IsNull()) break;
+ if (prototype->IsNull(isolate)) break;
// We already have a stack-check in JSProxy::GetPrototype.
return HasEnumerableProperty(
isolate, Handle<JSReceiver>::cast(prototype), key);
@@ -107,9 +111,7 @@
HandleScope scope(isolate);
DCHECK_EQ(1, args.length());
CONVERT_ARG_HANDLE_CHECKED(JSReceiver, receiver, 0);
- Handle<HeapObject> result;
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, Enumerate(receiver));
- return *result;
+ RETURN_RESULT_OR_FAILURE(isolate, Enumerate(receiver));
}
@@ -159,9 +161,7 @@
DCHECK_EQ(2, args.length());
CONVERT_ARG_HANDLE_CHECKED(JSReceiver, receiver, 0);
CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
- Handle<Object> result;
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, Filter(receiver, key));
- return *result;
+ RETURN_RESULT_OR_FAILURE(isolate, Filter(receiver, key));
}
@@ -177,9 +177,7 @@
if (receiver->map() == *cache_type) {
return *key;
}
- Handle<Object> result;
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, Filter(receiver, key));
- return *result;
+ RETURN_RESULT_OR_FAILURE(isolate, Filter(receiver, key));
}