Chromium Code Reviews| Index: src/objects-inl.h |
| diff --git a/src/objects-inl.h b/src/objects-inl.h |
| index d0958eef29a0faa736980f8b8bd23887da101375..e425302a7a10031a1f4249c0d481a85f1efa738d 100644 |
| --- a/src/objects-inl.h |
| +++ b/src/objects-inl.h |
| @@ -682,6 +682,7 @@ bool Object::IsBoolean() { |
| TYPE_CHECKER(JSArray, JS_ARRAY_TYPE) |
| TYPE_CHECKER(JSArrayBuffer, JS_ARRAY_BUFFER_TYPE) |
| +TYPE_CHECKER(JSDataView, JS_DATA_VIEW_TYPE) |
| TYPE_CHECKER(JSTypedArray, JS_TYPED_ARRAY_TYPE) |
| TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE) |
| @@ -1644,6 +1645,8 @@ int JSObject::GetHeaderSize() { |
| return JSArray::kSize; |
| case JS_ARRAY_BUFFER_TYPE: |
| return JSArrayBuffer::kSize; |
| + case JS_DATA_VIEW_TYPE: |
| + return JSDataView::kSize; |
| case JS_TYPED_ARRAY_TYPE: |
| return JSTypedArray::kSize; |
| case JS_SET_TYPE: |
| @@ -2548,6 +2551,7 @@ CAST_ACCESSOR(JSBuiltinsObject) |
| CAST_ACCESSOR(Code) |
| CAST_ACCESSOR(JSArray) |
| CAST_ACCESSOR(JSArrayBuffer) |
| +CAST_ACCESSOR(JSDataView) |
| CAST_ACCESSOR(JSTypedArray) |
| CAST_ACCESSOR(JSRegExp) |
| CAST_ACCESSOR(JSProxy) |
| @@ -5321,6 +5325,45 @@ void JSArrayBuffer::set_is_external(bool value) { |
| } |
| +ACCESSORS(JSDataView, buffer, Object, kBufferOffset) |
| +ACCESSORS(JSDataView, byte_offset, Object, kByteOffsetOffset) |
| +ACCESSORS(JSDataView, byte_length, Object, kByteLengthOffset) |
| + |
| + |
| +template <typename TypeName> |
| +TypeName JSDataView::Get(size_t byte_offset, bool little_endian) { |
| + size_t byte_length = static_cast<size_t>(this->byte_length()->Number()); |
|
Dmitry Lomov (no reviews)
2013/06/03 13:09:04
Use NumberToSize
bnoordhuis
2013/06/03 13:48:12
I copied that from ArrayBuffer actually, to keep f
Dmitry Lomov (no reviews)
2013/06/03 14:42:49
Use NumberToSize here, do not update usages in cod
|
| + if (byte_offset + sizeof(TypeName) > byte_length) return 0; |
| + if (byte_offset + sizeof(TypeName) < byte_offset) return 0; // Overflow. |
| + Handle<JSArrayBuffer> buffer(JSArrayBuffer::cast(this->buffer())); |
| + const char* data = static_cast<const char*>(buffer->backing_store()) + |
| + static_cast<size_t>(this->byte_offset()->Number()) + |
| + byte_offset; |
| + TypeName value; |
| + OS::MemCopy(&value, data, sizeof(value)); |
| + if (sizeof(TypeName) > 1 && little_endian ^ IsLittleEndian()) { |
| + Swizzle(&value); |
| + } |
| + return value; |
| +} |
| + |
| + |
| +template <typename TypeName> |
| +void JSDataView::Set(size_t byte_offset, TypeName value, bool little_endian) { |
| + size_t byte_length = static_cast<size_t>(this->byte_length()->Number()); |
|
Dmitry Lomov (no reviews)
2013/06/03 13:09:04
Use NumberToSize.
|
| + if (byte_offset + sizeof(TypeName) > byte_length) return; |
| + if (byte_offset + sizeof(TypeName) < byte_offset) return; // Overflow. |
| + Handle<JSArrayBuffer> buffer(JSArrayBuffer::cast(this->buffer())); |
| + char* data = static_cast<char*>(buffer->backing_store()) + |
| + static_cast<size_t>(this->byte_offset()->Number()) + |
| + byte_offset; |
| + if (sizeof(TypeName) > 1 && little_endian ^ IsLittleEndian()) { |
| + Swizzle(&value); |
| + } |
| + OS::MemCopy(data, &value, sizeof(value)); |
| +} |
| + |
| + |
| ACCESSORS(JSTypedArray, buffer, Object, kBufferOffset) |
| ACCESSORS(JSTypedArray, byte_offset, Object, kByteOffsetOffset) |
| ACCESSORS(JSTypedArray, byte_length, Object, kByteLengthOffset) |