Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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_ |
| OLD | NEW |