source: frontend/node_modules/es-abstract/2025/GetViewByteLength.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 1.5 KB
Line 
1'use strict';
2
3var $TypeError = require('es-errors/type');
4
5var IsFixedLengthArrayBuffer = require('./IsFixedLengthArrayBuffer');
6var IsViewOutOfBounds = require('./IsViewOutOfBounds');
7
8var isDataViewWithBufferWitnessRecord = require('../helpers/records/data-view-with-buffer-witness-record');
9
10var dataViewBuffer = require('data-view-buffer');
11var dataViewByteLength = require('data-view-byte-length');
12var dataViewByteOffset = require('data-view-byte-offset');
13
14// https://262.ecma-international.org/15.0/#sec-getviewbytelength
15
16module.exports = function GetViewByteLength(viewRecord) {
17 if (!isDataViewWithBufferWitnessRecord(viewRecord)) {
18 throw new $TypeError('Assertion failed: `viewRecord` must be a DataView with Buffer Witness Record');
19 }
20
21 if (IsViewOutOfBounds(viewRecord)) {
22 throw new $TypeError('Assertion failed: `viewRecord` is out of bounds'); // step 1
23 }
24
25 var view = viewRecord['[[Object]]']; // step 2
26
27 var isFixed = IsFixedLengthArrayBuffer(dataViewBuffer(view));
28
29 var viewByteLength = isFixed ? dataViewByteLength(view) : 'AUTO'; // view.[[ByteLength]]
30 if (viewByteLength !== 'AUTO') {
31 return viewByteLength; // step 3
32 }
33
34 if (isFixed) {
35 throw new $TypeError('Assertion failed: DataView’s ArrayBuffer is not fixed length'); // step 4
36 }
37
38 var byteOffset = dataViewByteOffset(view); // step 5
39
40 var byteLength = viewRecord['[[CachedBufferByteLength]]']; // step 6
41
42 if (byteLength === 'DETACHED') {
43 throw new $TypeError('Assertion failed: DataView’s ArrayBuffer is detached'); // step 7
44 }
45
46 return byteLength - byteOffset; // step 8
47};
Note: See TracBrowser for help on using the repository browser.