Commit 3757c6cc authored by Luis Fernando Pardo Sixtos's avatar Luis Fernando Pardo Sixtos Committed by V8 LUCI CQ

Plumb isolate through PrependElementIndices*

Currently the Isolate is gotten off of the object that the operation is
being performed on. Shared objects return the shared Isolate, which is
incorrect as it shouldn't be used to run JS, nor does it have
HandleScopes open. Plumb the executing Isolate through.

Bug: v8:12547
Change-Id: Ib7542c8cf63563d29f23fb03f86974c319ed88c4
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3697456Reviewed-by: 's avatarShu-yu Guo <syg@chromium.org>
Commit-Queue: Luis Fernando Pardo Sixtos <lpardosixtos@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#81014}
parent c8edf5a1
......@@ -22,11 +22,11 @@ ElementsAccessor::CollectElementIndices(Handle<JSObject> object,
}
inline MaybeHandle<FixedArray> ElementsAccessor::PrependElementIndices(
Handle<JSObject> object, Handle<FixedArray> keys, GetKeysConversion convert,
PropertyFilter filter) {
return PrependElementIndices(object,
handle(object->elements(), object->GetIsolate()),
keys, convert, filter);
Isolate* isolate, Handle<JSObject> object, Handle<FixedArray> keys,
GetKeysConversion convert, PropertyFilter filter) {
return PrependElementIndices(isolate, object,
handle(object->elements(), isolate), keys,
convert, filter);
}
inline bool ElementsAccessor::HasElement(JSObject holder, uint32_t index,
......
......@@ -1180,18 +1180,17 @@ class ElementsAccessorBase : public InternalElementsAccessor {
}
MaybeHandle<FixedArray> PrependElementIndices(
Handle<JSObject> object, Handle<FixedArrayBase> backing_store,
Handle<FixedArray> keys, GetKeysConversion convert,
PropertyFilter filter) final {
return Subclass::PrependElementIndicesImpl(object, backing_store, keys,
convert, filter);
Isolate* isolate, Handle<JSObject> object,
Handle<FixedArrayBase> backing_store, Handle<FixedArray> keys,
GetKeysConversion convert, PropertyFilter filter) final {
return Subclass::PrependElementIndicesImpl(isolate, object, backing_store,
keys, convert, filter);
}
static MaybeHandle<FixedArray> PrependElementIndicesImpl(
Handle<JSObject> object, Handle<FixedArrayBase> backing_store,
Handle<FixedArray> keys, GetKeysConversion convert,
PropertyFilter filter) {
Isolate* isolate = object->GetIsolate();
Isolate* isolate, Handle<JSObject> object,
Handle<FixedArrayBase> backing_store, Handle<FixedArray> keys,
GetKeysConversion convert, PropertyFilter filter) {
uint32_t nof_property_keys = keys->length();
size_t initial_list_length =
Subclass::GetMaxNumberOfEntries(*object, *backing_store);
......
......@@ -86,12 +86,12 @@ class ElementsAccessor {
PropertyFilter filter = ALL_PROPERTIES) = 0;
virtual MaybeHandle<FixedArray> PrependElementIndices(
Handle<JSObject> object, Handle<FixedArrayBase> backing_store,
Handle<FixedArray> keys, GetKeysConversion convert,
PropertyFilter filter = ALL_PROPERTIES) = 0;
Isolate* isolate, Handle<JSObject> object,
Handle<FixedArrayBase> backing_store, Handle<FixedArray> keys,
GetKeysConversion convert, PropertyFilter filter = ALL_PROPERTIES) = 0;
inline MaybeHandle<FixedArray> PrependElementIndices(
Handle<JSObject> object, Handle<FixedArray> keys,
Isolate* isolate, Handle<JSObject> object, Handle<FixedArray> keys,
GetKeysConversion convert, PropertyFilter filter = ALL_PROPERTIES);
V8_WARN_UNUSED_RESULT virtual ExceptionStatus AddElementsToKeyAccumulator(
......
......@@ -455,8 +455,8 @@ MaybeHandle<FixedArray> GetOwnKeysWithElements(Isolate* isolate,
if (skip_indices) {
result = keys;
} else {
result =
accessor->PrependElementIndices(object, keys, convert, ONLY_ENUMERABLE);
result = accessor->PrependElementIndices(isolate, object, keys, convert,
ONLY_ENUMERABLE);
}
if (FLAG_trace_for_in_enumerate) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment