22  const char* 
const kMethodName = 
"DataView constructor";
 
   25  if (IsUndefined(*
args.new_target(), isolate)) {  
 
   27        isolate, NewTypeError(MessageTemplate::kConstructorNotFunction,
 
   28                              isolate->factory()->NewStringFromAsciiChecked(
 
   39  if (!IsJSArrayBuffer(*buffer)) {
 
   41        isolate, NewTypeError(MessageTemplate::kDataViewNotArrayBuffer));
 
   48      Object::ToIndex(isolate, byte_offset, MessageTemplate::kInvalidOffset));
 
   52  if (array_buffer->was_detached()) {
 
   54        isolate, NewTypeError(MessageTemplate::kDetachedOperation,
 
   55                              isolate->factory()->NewStringFromAsciiChecked(
 
   60  size_t buffer_byte_length = array_buffer->GetByteLength();
 
   63  if (view_byte_offset > buffer_byte_length) {
 
   65        isolate, NewRangeError(MessageTemplate::kInvalidOffset, byte_offset));
 
   74  size_t view_byte_length;
 
   75  bool length_tracking = 
false;
 
   76  if (IsUndefined(*byte_length, isolate)) {
 
   77    view_byte_length = buffer_byte_length - view_byte_offset;
 
   78    length_tracking = array_buffer->is_resizable_by_js();
 
   88                        MessageTemplate::kInvalidDataViewLength));
 
   93          NewRangeError(MessageTemplate::kInvalidDataViewLength, byte_length));
 
   99      array_buffer->is_resizable_by_js() && !array_buffer->is_shared();
 
  110        isolate, initial_map,
 
  134    raw->set_bit_field(0);
 
  136    raw->set_is_length_tracking(length_tracking);
 
  137    raw->set_byte_length(0);
 
  138    raw->set_byte_offset(0);
 
  139    raw->set_data_pointer(isolate, array_buffer->backing_store());
 
  140    raw->set_buffer(*array_buffer);
 
  144  if (array_buffer->was_detached()) {
 
  146        isolate, NewTypeError(MessageTemplate::kDetachedOperation,
 
  147                              isolate->factory()->NewStringFromAsciiChecked(
 
  154  buffer_byte_length = array_buffer->GetByteLength();
 
  157  if (view_byte_offset > buffer_byte_length) {
 
  159        isolate, NewRangeError(MessageTemplate::kInvalidOffset, byte_offset));
 
  165  if (!length_tracking &&
 
  166      view_byte_offset + view_byte_length > buffer_byte_length) {
 
  168        isolate, NewRangeError(MessageTemplate::kInvalidDataViewLength));
 
  175  data_view->set_byte_length(length_tracking ? 0 : view_byte_length);
 
  178  data_view->set_byte_offset(view_byte_offset);
 
  179  data_view->set_data_pointer(
 
  181      static_cast<uint8_t*
>(array_buffer->backing_store()) + view_byte_offset);
 
 
static V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT MaybeHandle< JSObject > New(DirectHandle< JSFunction > constructor, DirectHandle< JSReceiver > new_target, DirectHandle< AllocationSite > site, NewJSObjectType=NewJSObjectType::kNoAPIWrapper)