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

Side by Side Diff: src/objects.cc

Issue 1094863002: Remove the weak list of views from array buffers (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <iomanip> 5 #include <iomanip>
6 #include <sstream> 6 #include <sstream>
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/accessors.h" 10 #include "src/accessors.h"
(...skipping 13271 matching lines...) Expand 10 before | Expand all | Expand 10 after
13282 case FAST_ELEMENTS: 13282 case FAST_ELEMENTS:
13283 case FAST_HOLEY_SMI_ELEMENTS: 13283 case FAST_HOLEY_SMI_ELEMENTS:
13284 case FAST_HOLEY_ELEMENTS: 13284 case FAST_HOLEY_ELEMENTS:
13285 return SetFastElement(object, index, value, language_mode, 13285 return SetFastElement(object, index, value, language_mode,
13286 check_prototype); 13286 check_prototype);
13287 case FAST_DOUBLE_ELEMENTS: 13287 case FAST_DOUBLE_ELEMENTS:
13288 case FAST_HOLEY_DOUBLE_ELEMENTS: 13288 case FAST_HOLEY_DOUBLE_ELEMENTS:
13289 return SetFastDoubleElement(object, index, value, language_mode, 13289 return SetFastDoubleElement(object, index, value, language_mode,
13290 check_prototype); 13290 check_prototype);
13291 13291
13292 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ 13292 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
13293 case EXTERNAL_##TYPE##_ELEMENTS: { \ 13293 case EXTERNAL_##TYPE##_ELEMENTS: { \
13294 Handle<External##Type##Array> array( \ 13294 Handle<External##Type##Array> array( \
13295 External##Type##Array::cast(object->elements())); \ 13295 External##Type##Array::cast(object->elements())); \
13296 return External##Type##Array::SetValue(array, index, value); \ 13296 return External##Type##Array::SetValue(object, array, index, value); \
13297 } \ 13297 } \
13298 case TYPE##_ELEMENTS: { \ 13298 case TYPE##_ELEMENTS: { \
13299 Handle<Fixed##Type##Array> array( \ 13299 Handle<Fixed##Type##Array> array( \
13300 Fixed##Type##Array::cast(object->elements())); \ 13300 Fixed##Type##Array::cast(object->elements())); \
13301 return Fixed##Type##Array::SetValue(array, index, value); \ 13301 return Fixed##Type##Array::SetValue(object, array, index, value); \
13302 } 13302 }
13303 13303
13304 TYPED_ARRAYS(TYPED_ARRAY_CASE) 13304 TYPED_ARRAYS(TYPED_ARRAY_CASE)
13305 13305
13306 #undef TYPED_ARRAY_CASE 13306 #undef TYPED_ARRAY_CASE
13307 13307
13308 case DICTIONARY_ELEMENTS: 13308 case DICTIONARY_ELEMENTS:
13309 return SetDictionaryElement(object, index, value, attributes, 13309 return SetDictionaryElement(object, index, value, attributes,
13310 language_mode, check_prototype, set_mode); 13310 language_mode, check_prototype, set_mode);
13311 case SLOPPY_ARGUMENTS_ELEMENTS: { 13311 case SLOPPY_ARGUMENTS_ELEMENTS: {
13312 Handle<FixedArray> parameter_map(FixedArray::cast(object->elements())); 13312 Handle<FixedArray> parameter_map(FixedArray::cast(object->elements()));
(...skipping 1843 matching lines...) Expand 10 before | Expand all | Expand 10 after
15156 #undef INSTANCE_TYPE_TO_ELEMENT_SIZE 15156 #undef INSTANCE_TYPE_TO_ELEMENT_SIZE
15157 15157
15158 default: 15158 default:
15159 UNREACHABLE(); 15159 UNREACHABLE();
15160 return 0; 15160 return 0;
15161 } 15161 }
15162 } 15162 }
15163 15163
15164 15164
15165 Handle<Object> ExternalUint8ClampedArray::SetValue( 15165 Handle<Object> ExternalUint8ClampedArray::SetValue(
15166 Handle<ExternalUint8ClampedArray> array, 15166 Handle<JSObject> holder, Handle<ExternalUint8ClampedArray> array,
15167 uint32_t index, 15167 uint32_t index, Handle<Object> value) {
15168 Handle<Object> value) {
15169 uint8_t clamped_value = 0; 15168 uint8_t clamped_value = 0;
15170 if (index < static_cast<uint32_t>(array->length())) { 15169 Handle<JSArrayBufferView> view = Handle<JSArrayBufferView>::cast(holder);
15171 if (value->IsSmi()) { 15170 if (view->buffer()->IsSmi() ||
15172 int int_value = Handle<Smi>::cast(value)->value(); 15171 !JSArrayBuffer::cast(view->buffer())->was_neutered()) {
15173 if (int_value < 0) { 15172 if (index < static_cast<uint32_t>(array->length())) {
15174 clamped_value = 0; 15173 if (value->IsSmi()) {
15175 } else if (int_value > 255) { 15174 int int_value = Handle<Smi>::cast(value)->value();
15176 clamped_value = 255; 15175 if (int_value < 0) {
15176 clamped_value = 0;
15177 } else if (int_value > 255) {
15178 clamped_value = 255;
15179 } else {
15180 clamped_value = static_cast<uint8_t>(int_value);
15181 }
15182 } else if (value->IsHeapNumber()) {
15183 double double_value = Handle<HeapNumber>::cast(value)->value();
15184 if (!(double_value > 0)) {
15185 // NaN and less than zero clamp to zero.
15186 clamped_value = 0;
15187 } else if (double_value > 255) {
15188 // Greater than 255 clamp to 255.
15189 clamped_value = 255;
15190 } else {
15191 // Other doubles are rounded to the nearest integer.
15192 clamped_value = static_cast<uint8_t>(lrint(double_value));
15193 }
15177 } else { 15194 } else {
15178 clamped_value = static_cast<uint8_t>(int_value); 15195 // Clamp undefined to zero (default). All other types have been
15196 // converted to a number type further up in the call chain.
15197 DCHECK(value->IsUndefined());
15179 } 15198 }
15180 } else if (value->IsHeapNumber()) { 15199 array->set(index, clamped_value);
15181 double double_value = Handle<HeapNumber>::cast(value)->value();
15182 if (!(double_value > 0)) {
15183 // NaN and less than zero clamp to zero.
15184 clamped_value = 0;
15185 } else if (double_value > 255) {
15186 // Greater than 255 clamp to 255.
15187 clamped_value = 255;
15188 } else {
15189 // Other doubles are rounded to the nearest integer.
15190 clamped_value = static_cast<uint8_t>(lrint(double_value));
15191 }
15192 } else {
15193 // Clamp undefined to zero (default). All other types have been
15194 // converted to a number type further up in the call chain.
15195 DCHECK(value->IsUndefined());
15196 } 15200 }
15197 array->set(index, clamped_value);
15198 } 15201 }
15199 return handle(Smi::FromInt(clamped_value), array->GetIsolate()); 15202 return handle(Smi::FromInt(clamped_value), array->GetIsolate());
15200 } 15203 }
15201 15204
15202 15205
15203 template<typename ExternalArrayClass, typename ValueType> 15206 template <typename ExternalArrayClass, typename ValueType>
15204 static Handle<Object> ExternalArrayIntSetter( 15207 static Handle<Object> ExternalArrayIntSetter(
15205 Isolate* isolate, 15208 Isolate* isolate, Handle<JSObject> holder,
15206 Handle<ExternalArrayClass> receiver, 15209 Handle<ExternalArrayClass> receiver, uint32_t index, Handle<Object> value) {
15207 uint32_t index,
15208 Handle<Object> value) {
15209 ValueType cast_value = 0; 15210 ValueType cast_value = 0;
15210 if (index < static_cast<uint32_t>(receiver->length())) { 15211 Handle<JSArrayBufferView> view = Handle<JSArrayBufferView>::cast(holder);
15211 if (value->IsSmi()) { 15212 if (view->buffer()->IsSmi() ||
15212 int int_value = Handle<Smi>::cast(value)->value(); 15213 !JSArrayBuffer::cast(view->buffer())->was_neutered()) {
15213 cast_value = static_cast<ValueType>(int_value); 15214 if (index < static_cast<uint32_t>(receiver->length())) {
15214 } else if (value->IsHeapNumber()) { 15215 if (value->IsSmi()) {
15215 double double_value = Handle<HeapNumber>::cast(value)->value(); 15216 int int_value = Handle<Smi>::cast(value)->value();
15216 cast_value = static_cast<ValueType>(DoubleToInt32(double_value)); 15217 cast_value = static_cast<ValueType>(int_value);
15217 } else { 15218 } else if (value->IsHeapNumber()) {
15218 // Clamp undefined to zero (default). All other types have been 15219 double double_value = Handle<HeapNumber>::cast(value)->value();
15219 // converted to a number type further up in the call chain. 15220 cast_value = static_cast<ValueType>(DoubleToInt32(double_value));
15220 DCHECK(value->IsUndefined()); 15221 } else {
15222 // Clamp undefined to zero (default). All other types have been
15223 // converted to a number type further up in the call chain.
15224 DCHECK(value->IsUndefined());
15225 }
15226 receiver->set(index, cast_value);
15221 } 15227 }
15222 receiver->set(index, cast_value);
15223 } 15228 }
15224 return isolate->factory()->NewNumberFromInt(cast_value); 15229 return isolate->factory()->NewNumberFromInt(cast_value);
15225 } 15230 }
15226 15231
15227 15232
15228 Handle<Object> ExternalInt8Array::SetValue(Handle<ExternalInt8Array> array, 15233 Handle<Object> ExternalInt8Array::SetValue(Handle<JSObject> holder,
15234 Handle<ExternalInt8Array> array,
15229 uint32_t index, 15235 uint32_t index,
15230 Handle<Object> value) { 15236 Handle<Object> value) {
15231 return ExternalArrayIntSetter<ExternalInt8Array, int8_t>( 15237 return ExternalArrayIntSetter<ExternalInt8Array, int8_t>(
15232 array->GetIsolate(), array, index, value); 15238 array->GetIsolate(), holder, array, index, value);
15233 } 15239 }
15234 15240
15235 15241
15236 Handle<Object> ExternalUint8Array::SetValue(Handle<ExternalUint8Array> array, 15242 Handle<Object> ExternalUint8Array::SetValue(Handle<JSObject> holder,
15243 Handle<ExternalUint8Array> array,
15237 uint32_t index, 15244 uint32_t index,
15238 Handle<Object> value) { 15245 Handle<Object> value) {
15239 return ExternalArrayIntSetter<ExternalUint8Array, uint8_t>( 15246 return ExternalArrayIntSetter<ExternalUint8Array, uint8_t>(
15240 array->GetIsolate(), array, index, value); 15247 array->GetIsolate(), holder, array, index, value);
15241 } 15248 }
15242 15249
15243 15250
15244 Handle<Object> ExternalInt16Array::SetValue(Handle<ExternalInt16Array> array, 15251 Handle<Object> ExternalInt16Array::SetValue(Handle<JSObject> holder,
15252 Handle<ExternalInt16Array> array,
15245 uint32_t index, 15253 uint32_t index,
15246 Handle<Object> value) { 15254 Handle<Object> value) {
15247 return ExternalArrayIntSetter<ExternalInt16Array, int16_t>( 15255 return ExternalArrayIntSetter<ExternalInt16Array, int16_t>(
15248 array->GetIsolate(), array, index, value); 15256 array->GetIsolate(), holder, array, index, value);
15249 } 15257 }
15250 15258
15251 15259
15252 Handle<Object> ExternalUint16Array::SetValue(Handle<ExternalUint16Array> array, 15260 Handle<Object> ExternalUint16Array::SetValue(Handle<JSObject> holder,
15261 Handle<ExternalUint16Array> array,
15253 uint32_t index, 15262 uint32_t index,
15254 Handle<Object> value) { 15263 Handle<Object> value) {
15255 return ExternalArrayIntSetter<ExternalUint16Array, uint16_t>( 15264 return ExternalArrayIntSetter<ExternalUint16Array, uint16_t>(
15256 array->GetIsolate(), array, index, value); 15265 array->GetIsolate(), holder, array, index, value);
15257 } 15266 }
15258 15267
15259 15268
15260 Handle<Object> ExternalInt32Array::SetValue(Handle<ExternalInt32Array> array, 15269 Handle<Object> ExternalInt32Array::SetValue(Handle<JSObject> holder,
15270 Handle<ExternalInt32Array> array,
15261 uint32_t index, 15271 uint32_t index,
15262 Handle<Object> value) { 15272 Handle<Object> value) {
15263 return ExternalArrayIntSetter<ExternalInt32Array, int32_t>( 15273 return ExternalArrayIntSetter<ExternalInt32Array, int32_t>(
15264 array->GetIsolate(), array, index, value); 15274 array->GetIsolate(), holder, array, index, value);
15265 } 15275 }
15266 15276
15267 15277
15268 Handle<Object> ExternalUint32Array::SetValue( 15278 Handle<Object> ExternalUint32Array::SetValue(Handle<JSObject> holder,
15269 Handle<ExternalUint32Array> array, 15279 Handle<ExternalUint32Array> array,
15270 uint32_t index, 15280 uint32_t index,
15271 Handle<Object> value) { 15281 Handle<Object> value) {
15272 uint32_t cast_value = 0; 15282 uint32_t cast_value = 0;
15273 if (index < static_cast<uint32_t>(array->length())) { 15283 Handle<JSArrayBufferView> view = Handle<JSArrayBufferView>::cast(holder);
15274 if (value->IsSmi()) { 15284 if (view->buffer()->IsSmi() ||
15275 int int_value = Handle<Smi>::cast(value)->value(); 15285 !JSArrayBuffer::cast(view->buffer())->was_neutered()) {
15276 cast_value = static_cast<uint32_t>(int_value); 15286 if (index < static_cast<uint32_t>(array->length())) {
15277 } else if (value->IsHeapNumber()) { 15287 if (value->IsSmi()) {
15278 double double_value = Handle<HeapNumber>::cast(value)->value(); 15288 int int_value = Handle<Smi>::cast(value)->value();
15279 cast_value = static_cast<uint32_t>(DoubleToUint32(double_value)); 15289 cast_value = static_cast<uint32_t>(int_value);
15280 } else { 15290 } else if (value->IsHeapNumber()) {
15281 // Clamp undefined to zero (default). All other types have been 15291 double double_value = Handle<HeapNumber>::cast(value)->value();
15282 // converted to a number type further up in the call chain. 15292 cast_value = static_cast<uint32_t>(DoubleToUint32(double_value));
15283 DCHECK(value->IsUndefined()); 15293 } else {
15294 // Clamp undefined to zero (default). All other types have been
15295 // converted to a number type further up in the call chain.
15296 DCHECK(value->IsUndefined());
15297 }
15298 array->set(index, cast_value);
15284 } 15299 }
15285 array->set(index, cast_value);
15286 } 15300 }
15287 return array->GetIsolate()->factory()->NewNumberFromUint(cast_value); 15301 return array->GetIsolate()->factory()->NewNumberFromUint(cast_value);
15288 } 15302 }
15289 15303
15290 15304
15291 Handle<Object> ExternalFloat32Array::SetValue( 15305 Handle<Object> ExternalFloat32Array::SetValue(
15292 Handle<ExternalFloat32Array> array, 15306 Handle<JSObject> holder, Handle<ExternalFloat32Array> array, uint32_t index,
15293 uint32_t index,
15294 Handle<Object> value) { 15307 Handle<Object> value) {
15295 float cast_value = std::numeric_limits<float>::quiet_NaN(); 15308 float cast_value = std::numeric_limits<float>::quiet_NaN();
15296 if (index < static_cast<uint32_t>(array->length())) { 15309 Handle<JSArrayBufferView> view = Handle<JSArrayBufferView>::cast(holder);
15297 if (value->IsSmi()) { 15310 if (view->buffer()->IsSmi() ||
15298 int int_value = Handle<Smi>::cast(value)->value(); 15311 !JSArrayBuffer::cast(view->buffer())->was_neutered()) {
15299 cast_value = static_cast<float>(int_value); 15312 if (index < static_cast<uint32_t>(array->length())) {
15300 } else if (value->IsHeapNumber()) { 15313 if (value->IsSmi()) {
15301 double double_value = Handle<HeapNumber>::cast(value)->value(); 15314 int int_value = Handle<Smi>::cast(value)->value();
15302 cast_value = static_cast<float>(double_value); 15315 cast_value = static_cast<float>(int_value);
15303 } else { 15316 } else if (value->IsHeapNumber()) {
15304 // Clamp undefined to NaN (default). All other types have been 15317 double double_value = Handle<HeapNumber>::cast(value)->value();
15305 // converted to a number type further up in the call chain. 15318 cast_value = static_cast<float>(double_value);
15306 DCHECK(value->IsUndefined()); 15319 } else {
15320 // Clamp undefined to NaN (default). All other types have been
15321 // converted to a number type further up in the call chain.
15322 DCHECK(value->IsUndefined());
15323 }
15324 array->set(index, cast_value);
15307 } 15325 }
15308 array->set(index, cast_value);
15309 } 15326 }
15310 return array->GetIsolate()->factory()->NewNumber(cast_value); 15327 return array->GetIsolate()->factory()->NewNumber(cast_value);
15311 } 15328 }
15312 15329
15313 15330
15314 Handle<Object> ExternalFloat64Array::SetValue( 15331 Handle<Object> ExternalFloat64Array::SetValue(
15315 Handle<ExternalFloat64Array> array, 15332 Handle<JSObject> holder, Handle<ExternalFloat64Array> array, uint32_t index,
15316 uint32_t index,
15317 Handle<Object> value) { 15333 Handle<Object> value) {
15318 double double_value = std::numeric_limits<double>::quiet_NaN(); 15334 double double_value = std::numeric_limits<double>::quiet_NaN();
15319 if (index < static_cast<uint32_t>(array->length())) { 15335 Handle<JSArrayBufferView> view = Handle<JSArrayBufferView>::cast(holder);
15320 if (value->IsNumber()) { 15336 if (view->buffer()->IsSmi() ||
15321 double_value = value->Number(); 15337 !JSArrayBuffer::cast(view->buffer())->was_neutered()) {
15322 } else { 15338 if (index < static_cast<uint32_t>(array->length())) {
15323 // Clamp undefined to NaN (default). All other types have been 15339 if (value->IsNumber()) {
15324 // converted to a number type further up in the call chain. 15340 double_value = value->Number();
15325 DCHECK(value->IsUndefined()); 15341 } else {
15342 // Clamp undefined to NaN (default). All other types have been
15343 // converted to a number type further up in the call chain.
15344 DCHECK(value->IsUndefined());
15345 }
15346 array->set(index, double_value);
15326 } 15347 }
15327 array->set(index, double_value);
15328 } 15348 }
15329 return array->GetIsolate()->factory()->NewNumber(double_value); 15349 return array->GetIsolate()->factory()->NewNumber(double_value);
15330 } 15350 }
15331 15351
15332 15352
15333 void GlobalObject::InvalidatePropertyCell(Handle<GlobalObject> global, 15353 void GlobalObject::InvalidatePropertyCell(Handle<GlobalObject> global,
15334 Handle<Name> name) { 15354 Handle<Name> name) {
15335 DCHECK(!global->HasFastProperties()); 15355 DCHECK(!global->HasFastProperties());
15336 auto dictionary = handle(global->property_dictionary()); 15356 auto dictionary = handle(global->property_dictionary());
15337 int entry = dictionary->FindEntry(name); 15357 int entry = dictionary->FindEntry(name);
(...skipping 1541 matching lines...) Expand 10 before | Expand all | Expand 10 after
16879 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); 16899 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER);
16880 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); 16900 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER);
16881 } 16901 }
16882 16902
16883 16903
16884 void JSArrayBuffer::Neuter() { 16904 void JSArrayBuffer::Neuter() {
16885 CHECK(is_neuterable()); 16905 CHECK(is_neuterable());
16886 CHECK(is_external()); 16906 CHECK(is_external());
16887 set_backing_store(NULL); 16907 set_backing_store(NULL);
16888 set_byte_length(Smi::FromInt(0)); 16908 set_byte_length(Smi::FromInt(0));
16909 set_was_neutered(true);
16889 } 16910 }
16890 16911
16891 16912
16892 void JSArrayBufferView::NeuterView() {
16893 CHECK(JSArrayBuffer::cast(buffer())->is_neuterable());
16894 set_byte_offset(Smi::FromInt(0));
16895 set_byte_length(Smi::FromInt(0));
16896 }
16897
16898
16899 void JSDataView::Neuter() {
16900 NeuterView();
16901 }
16902
16903
16904 void JSTypedArray::Neuter() {
16905 NeuterView();
16906 set_length(Smi::FromInt(0));
16907 set_elements(GetHeap()->EmptyExternalArrayForMap(map()));
16908 }
16909
16910
16911 static ElementsKind FixedToExternalElementsKind(ElementsKind elements_kind) { 16913 static ElementsKind FixedToExternalElementsKind(ElementsKind elements_kind) {
16912 switch (elements_kind) { 16914 switch (elements_kind) {
16913 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ 16915 #define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \
16914 case TYPE##_ELEMENTS: return EXTERNAL_##TYPE##_ELEMENTS; 16916 case TYPE##_ELEMENTS: return EXTERNAL_##TYPE##_ELEMENTS;
16915 16917
16916 TYPED_ARRAYS(TYPED_ARRAY_CASE) 16918 TYPED_ARRAYS(TYPED_ARRAY_CASE)
16917 #undef TYPED_ARRAY_CASE 16919 #undef TYPED_ARRAY_CASE
16918 16920
16919 default: 16921 default:
16920 UNREACHABLE(); 16922 UNREACHABLE();
(...skipping 20 matching lines...) Expand all
16941 Runtime::SetupArrayBufferAllocatingData(isolate, buffer, 16943 Runtime::SetupArrayBufferAllocatingData(isolate, buffer,
16942 fixed_typed_array->DataSize(), false); 16944 fixed_typed_array->DataSize(), false);
16943 memcpy(buffer->backing_store(), 16945 memcpy(buffer->backing_store(),
16944 fixed_typed_array->DataPtr(), 16946 fixed_typed_array->DataPtr(),
16945 fixed_typed_array->DataSize()); 16947 fixed_typed_array->DataSize());
16946 Handle<ExternalArray> new_elements = 16948 Handle<ExternalArray> new_elements =
16947 isolate->factory()->NewExternalArray( 16949 isolate->factory()->NewExternalArray(
16948 fixed_typed_array->length(), typed_array->type(), 16950 fixed_typed_array->length(), typed_array->type(),
16949 static_cast<uint8_t*>(buffer->backing_store())); 16951 static_cast<uint8_t*>(buffer->backing_store()));
16950 16952
16951 Heap* heap = isolate->heap();
16952 if (heap->InNewSpace(*typed_array)) {
16953 DCHECK(typed_array->weak_next() == isolate->heap()->undefined_value());
16954 typed_array->set_weak_next(heap->new_array_buffer_views_list());
16955 heap->set_new_array_buffer_views_list(*typed_array);
16956 } else {
16957 buffer->set_weak_first_view(*typed_array);
16958 DCHECK(typed_array->weak_next() == isolate->heap()->undefined_value());
16959 }
16960 typed_array->set_buffer(*buffer); 16953 typed_array->set_buffer(*buffer);
16961 JSObject::SetMapAndElements(typed_array, new_map, new_elements); 16954 JSObject::SetMapAndElements(typed_array, new_map, new_elements);
16962 16955
16963 return buffer; 16956 return buffer;
16964 } 16957 }
16965 16958
16966 16959
16967 Handle<JSArrayBuffer> JSTypedArray::GetBuffer() { 16960 Handle<JSArrayBuffer> JSTypedArray::GetBuffer() {
16968 Handle<Object> result(buffer(), GetIsolate()); 16961 Handle<Object> result(buffer(), GetIsolate());
16969 if (*result != Smi::FromInt(0)) { 16962 if (*result != Smi::FromInt(0)) {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
17076 if (!invalidate && old_type == PropertyCellType::kConstant && 17069 if (!invalidate && old_type == PropertyCellType::kConstant &&
17077 new_type != PropertyCellType::kConstant) { 17070 new_type != PropertyCellType::kConstant) {
17078 auto isolate = dictionary->GetIsolate(); 17071 auto isolate = dictionary->GetIsolate();
17079 cell->dependent_code()->DeoptimizeDependentCodeGroup( 17072 cell->dependent_code()->DeoptimizeDependentCodeGroup(
17080 isolate, DependentCode::kPropertyCellChangedGroup); 17073 isolate, DependentCode::kPropertyCellChangedGroup);
17081 } 17074 }
17082 return value; 17075 return value;
17083 } 17076 }
17084 17077
17085 } } // namespace v8::internal 17078 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698