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

Side by Side Diff: src/objects-inl.h

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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 // Review notes: 5 // Review notes:
6 // 6 //
7 // - The use of macros in these inline functions may seem superfluous 7 // - The use of macros in these inline functions may seem superfluous
8 // but it is absolutely needed to make sure gcc generates optimal 8 // but it is absolutely needed to make sure gcc generates optimal
9 // code. gcc is not happy when attempting to inline too deep. 9 // code. gcc is not happy when attempting to inline too deep.
10 // 10 //
(...skipping 4357 matching lines...) Expand 10 before | Expand all | Expand 10 after
4368 template <class Traits> 4368 template <class Traits>
4369 Handle<Object> FixedTypedArray<Traits>::get( 4369 Handle<Object> FixedTypedArray<Traits>::get(
4370 Handle<FixedTypedArray<Traits> > array, 4370 Handle<FixedTypedArray<Traits> > array,
4371 int index) { 4371 int index) {
4372 return Traits::ToHandle(array->GetIsolate(), array->get_scalar(index)); 4372 return Traits::ToHandle(array->GetIsolate(), array->get_scalar(index));
4373 } 4373 }
4374 4374
4375 4375
4376 template <class Traits> 4376 template <class Traits>
4377 Handle<Object> FixedTypedArray<Traits>::SetValue( 4377 Handle<Object> FixedTypedArray<Traits>::SetValue(
4378 Handle<FixedTypedArray<Traits> > array, 4378 Handle<JSObject> holder, Handle<FixedTypedArray<Traits> > array,
4379 uint32_t index, 4379 uint32_t index, Handle<Object> value) {
4380 Handle<Object> value) {
4381 ElementType cast_value = Traits::defaultValue(); 4380 ElementType cast_value = Traits::defaultValue();
4382 if (index < static_cast<uint32_t>(array->length())) { 4381 Handle<JSArrayBufferView> view = Handle<JSArrayBufferView>::cast(holder);
4383 if (value->IsSmi()) { 4382 if (view->buffer()->IsSmi() ||
4384 int int_value = Handle<Smi>::cast(value)->value(); 4383 !JSArrayBuffer::cast(view->buffer())->was_neutered()) {
Toon Verwaest 2015/04/17 13:25:55 What about a nicer method to avoid duplicating thi
4385 cast_value = from_int(int_value); 4384 if (index < static_cast<uint32_t>(array->length())) {
4386 } else if (value->IsHeapNumber()) { 4385 if (value->IsSmi()) {
4387 double double_value = Handle<HeapNumber>::cast(value)->value(); 4386 int int_value = Handle<Smi>::cast(value)->value();
4388 cast_value = from_double(double_value); 4387 cast_value = from_int(int_value);
4389 } else { 4388 } else if (value->IsHeapNumber()) {
4390 // Clamp undefined to the default value. All other types have been 4389 double double_value = Handle<HeapNumber>::cast(value)->value();
4391 // converted to a number type further up in the call chain. 4390 cast_value = from_double(double_value);
4392 DCHECK(value->IsUndefined()); 4391 } else {
4392 // Clamp undefined to the default value. All other types have been
4393 // converted to a number type further up in the call chain.
4394 DCHECK(value->IsUndefined());
4395 }
4396 array->set(index, cast_value);
4393 } 4397 }
4394 array->set(index, cast_value);
4395 } 4398 }
4396 return Traits::ToHandle(array->GetIsolate(), cast_value); 4399 return Traits::ToHandle(array->GetIsolate(), cast_value);
4397 } 4400 }
4398 4401
4399 4402
4400 Handle<Object> Uint8ArrayTraits::ToHandle(Isolate* isolate, uint8_t scalar) { 4403 Handle<Object> Uint8ArrayTraits::ToHandle(Isolate* isolate, uint8_t scalar) {
4401 return handle(Smi::FromInt(scalar), isolate); 4404 return handle(Smi::FromInt(scalar), isolate);
4402 } 4405 }
4403 4406
4404 4407
(...skipping 2041 matching lines...) Expand 10 before | Expand all | Expand 10 after
6446 bool JSArrayBuffer::is_neuterable() { 6449 bool JSArrayBuffer::is_neuterable() {
6447 return BooleanBit::get(flag(), kIsNeuterableBit); 6450 return BooleanBit::get(flag(), kIsNeuterableBit);
6448 } 6451 }
6449 6452
6450 6453
6451 void JSArrayBuffer::set_is_neuterable(bool value) { 6454 void JSArrayBuffer::set_is_neuterable(bool value) {
6452 set_flag(BooleanBit::set(flag(), kIsNeuterableBit, value)); 6455 set_flag(BooleanBit::set(flag(), kIsNeuterableBit, value));
6453 } 6456 }
6454 6457
6455 6458
6459 bool JSArrayBuffer::was_neutered() {
6460 return BooleanBit::get(flag(), kWasNeuteredBit);
6461 }
6462
6463
6464 void JSArrayBuffer::set_was_neutered(bool value) {
6465 set_flag(BooleanBit::set(flag(), kWasNeuteredBit, value));
6466 }
6467
6468
6456 ACCESSORS(JSArrayBuffer, weak_next, Object, kWeakNextOffset) 6469 ACCESSORS(JSArrayBuffer, weak_next, Object, kWeakNextOffset)
6457 ACCESSORS(JSArrayBuffer, weak_first_view, Object, kWeakFirstViewOffset) 6470
6471
6472 Object* JSArrayBufferView::byte_offset() const {
6473 if (!buffer()->IsSmi() && JSArrayBuffer::cast(buffer())->was_neutered()) {
6474 return Smi::FromInt(0);
6475 }
6476 return Object::cast(READ_FIELD(this, kByteOffsetOffset));
6477 }
6478
6479
6480 void JSArrayBufferView::set_byte_offset(Object* value, WriteBarrierMode mode) {
6481 WRITE_FIELD(this, kByteOffsetOffset, value);
6482 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kByteOffsetOffset, value, mode);
6483 }
6484
6485
6486 Object* JSArrayBufferView::byte_length() const {
6487 if (!buffer()->IsSmi() && JSArrayBuffer::cast(buffer())->was_neutered()) {
6488 return Smi::FromInt(0);
6489 }
6490 return Object::cast(READ_FIELD(this, kByteLengthOffset));
6491 }
6492
6493
6494 void JSArrayBufferView::set_byte_length(Object* value, WriteBarrierMode mode) {
6495 WRITE_FIELD(this, kByteLengthOffset, value);
6496 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kByteLengthOffset, value, mode);
6497 }
6458 6498
6459 6499
6460 ACCESSORS(JSArrayBufferView, buffer, Object, kBufferOffset) 6500 ACCESSORS(JSArrayBufferView, buffer, Object, kBufferOffset)
6461 ACCESSORS(JSArrayBufferView, byte_offset, Object, kByteOffsetOffset) 6501
6462 ACCESSORS(JSArrayBufferView, byte_length, Object, kByteLengthOffset) 6502
6463 ACCESSORS(JSArrayBufferView, weak_next, Object, kWeakNextOffset) 6503 Object* JSTypedArray::length() const {
6464 ACCESSORS(JSTypedArray, length, Object, kLengthOffset) 6504 if (!buffer()->IsSmi() && JSArrayBuffer::cast(buffer())->was_neutered()) {
6505 return Smi::FromInt(0);
6506 }
6507 return Object::cast(READ_FIELD(this, kLengthOffset));
6508 }
6509
6510
6511 void JSTypedArray::set_length(Object* value, WriteBarrierMode mode) {
6512 WRITE_FIELD(this, kLengthOffset, value);
6513 CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kLengthOffset, value, mode);
6514 }
6515
6465 6516
6466 ACCESSORS(JSRegExp, data, Object, kDataOffset) 6517 ACCESSORS(JSRegExp, data, Object, kDataOffset)
6467 6518
6468 6519
6469 JSRegExp::Type JSRegExp::TypeTag() { 6520 JSRegExp::Type JSRegExp::TypeTag() {
6470 Object* data = this->data(); 6521 Object* data = this->data();
6471 if (data->IsUndefined()) return JSRegExp::NOT_COMPILED; 6522 if (data->IsUndefined()) return JSRegExp::NOT_COMPILED;
6472 Smi* smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex)); 6523 Smi* smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex));
6473 return static_cast<JSRegExp::Type>(smi->value()); 6524 return static_cast<JSRegExp::Type>(smi->value());
6474 } 6525 }
(...skipping 1067 matching lines...) Expand 10 before | Expand all | Expand 10 after
7542 #undef READ_SHORT_FIELD 7593 #undef READ_SHORT_FIELD
7543 #undef WRITE_SHORT_FIELD 7594 #undef WRITE_SHORT_FIELD
7544 #undef READ_BYTE_FIELD 7595 #undef READ_BYTE_FIELD
7545 #undef WRITE_BYTE_FIELD 7596 #undef WRITE_BYTE_FIELD
7546 #undef NOBARRIER_READ_BYTE_FIELD 7597 #undef NOBARRIER_READ_BYTE_FIELD
7547 #undef NOBARRIER_WRITE_BYTE_FIELD 7598 #undef NOBARRIER_WRITE_BYTE_FIELD
7548 7599
7549 } } // namespace v8::internal 7600 } } // namespace v8::internal
7550 7601
7551 #endif // V8_OBJECTS_INL_H_ 7602 #endif // V8_OBJECTS_INL_H_
OLDNEW
« src/hydrogen.cc ('K') | « src/objects.cc ('k') | src/runtime/runtime-typedarray.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698