Index: src/elements.cc |
diff --git a/src/elements.cc b/src/elements.cc |
index d22b11ec8754863bb4e4bbd22141b8414e7501e1..121f6fc2d90a0f8c1e6be664434a92068b276014 100644 |
--- a/src/elements.cc |
+++ b/src/elements.cc |
@@ -2765,10 +2765,14 @@ class TypedElementsAccessor |
: kMaxUInt32; |
} |
+ static bool WasNeutered(JSObject* holder) { |
+ JSArrayBufferView* view = JSArrayBufferView::cast(holder); |
+ return view->WasNeutered(); |
+ } |
+ |
static uint32_t GetCapacityImpl(JSObject* holder, |
FixedArrayBase* backing_store) { |
- JSArrayBufferView* view = JSArrayBufferView::cast(holder); |
- if (view->WasNeutered()) return 0; |
+ if (WasNeutered(holder)) return 0; |
return backing_store->length(); |
} |
@@ -2817,6 +2821,12 @@ class TypedElementsAccessor |
DCHECK(JSObject::PrototypeHasNoElements(isolate, *receiver)); |
DisallowHeapAllocation no_gc; |
+ // TODO(caitp): return Just(false) here when implementing strict throwing on |
+ // neutered views. |
+ if (WasNeutered(*receiver)) { |
+ return Just(value->IsUndefined(isolate) && length > start_from); |
+ } |
+ |
BackingStore* elements = BackingStore::cast(receiver->elements()); |
if (value->IsUndefined(isolate) && |
length > static_cast<uint32_t>(elements->length())) { |
@@ -2866,6 +2876,8 @@ class TypedElementsAccessor |
DCHECK(JSObject::PrototypeHasNoElements(isolate, *receiver)); |
DisallowHeapAllocation no_gc; |
+ if (WasNeutered(*receiver)) return Just<int64_t>(-1); |
+ |
BackingStore* elements = BackingStore::cast(receiver->elements()); |
if (!value->IsNumber()) return Just<int64_t>(-1); |