diff options
Diffstat (limited to 'deps/v8/src/builtins/builtins-dataview.cc')
-rw-r--r-- | deps/v8/src/builtins/builtins-dataview.cc | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/deps/v8/src/builtins/builtins-dataview.cc b/deps/v8/src/builtins/builtins-dataview.cc index 72ea685982..f40cd0f68e 100644 --- a/deps/v8/src/builtins/builtins-dataview.cc +++ b/deps/v8/src/builtins/builtins-dataview.cc @@ -43,51 +43,52 @@ BUILTIN(DataViewConstructor) { Handle<JSArrayBuffer> array_buffer = Handle<JSArrayBuffer>::cast(buffer); // 4. Let offset be ? ToIndex(byteOffset). - Handle<Object> offset; ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, offset, + isolate, byte_offset, Object::ToIndex(isolate, byte_offset, MessageTemplate::kInvalidOffset)); + size_t view_byte_offset = byte_offset->Number(); // 5. If IsDetachedBuffer(buffer) is true, throw a TypeError exception. // We currently violate the specification at this point. TODO: Fix that. // 6. Let bufferByteLength be the value of buffer's // [[ArrayBufferByteLength]] internal slot. - double const buffer_byte_length = array_buffer->byte_length()->Number(); + size_t const buffer_byte_length = array_buffer->byte_length(); // 7. If offset > bufferByteLength, throw a RangeError exception. - if (offset->Number() > buffer_byte_length) { + if (view_byte_offset > buffer_byte_length) { THROW_NEW_ERROR_RETURN_FAILURE( - isolate, NewRangeError(MessageTemplate::kInvalidOffset, offset)); + isolate, NewRangeError(MessageTemplate::kInvalidOffset, byte_offset)); } - Handle<Object> view_byte_length; + size_t view_byte_length; if (byte_length->IsUndefined(isolate)) { // 8. If byteLength is either not present or undefined, then // a. Let viewByteLength be bufferByteLength - offset. - view_byte_length = - isolate->factory()->NewNumber(buffer_byte_length - offset->Number()); + view_byte_length = buffer_byte_length - view_byte_offset; } else { // 9. Else, // a. Let viewByteLength be ? ToIndex(byteLength). // b. If offset+viewByteLength > bufferByteLength, throw a // RangeError exception. ASSIGN_RETURN_FAILURE_ON_EXCEPTION( - isolate, view_byte_length, + isolate, byte_length, Object::ToIndex(isolate, byte_length, MessageTemplate::kInvalidDataViewLength)); - if (offset->Number() + view_byte_length->Number() > buffer_byte_length) { + if (view_byte_offset + byte_length->Number() > buffer_byte_length) { THROW_NEW_ERROR_RETURN_FAILURE( isolate, NewRangeError(MessageTemplate::kInvalidDataViewLength)); } + view_byte_length = byte_length->Number(); } // 10. Let O be ? OrdinaryCreateFromConstructor(NewTarget, // "%DataViewPrototype%", «[[DataView]], [[ViewedArrayBuffer]], // [[ByteLength]], [[ByteOffset]]»). Handle<JSObject> result; - ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, - JSObject::New(target, new_target)); + ASSIGN_RETURN_FAILURE_ON_EXCEPTION( + isolate, result, + JSObject::New(target, new_target, Handle<AllocationSite>::null())); for (int i = 0; i < ArrayBufferView::kEmbedderFieldCount; ++i) { Handle<JSDataView>::cast(result)->SetEmbedderField(i, Smi::kZero); } @@ -96,10 +97,10 @@ BUILTIN(DataViewConstructor) { Handle<JSDataView>::cast(result)->set_buffer(*array_buffer); // 12. Set O's [[ByteLength]] internal slot to viewByteLength. - Handle<JSDataView>::cast(result)->set_byte_length(*view_byte_length); + Handle<JSDataView>::cast(result)->set_byte_length(view_byte_length); // 13. Set O's [[ByteOffset]] internal slot to offset. - Handle<JSDataView>::cast(result)->set_byte_offset(*offset); + Handle<JSDataView>::cast(result)->set_byte_offset(view_byte_offset); // 14. Return O. return *result; |