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

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

Fix frontend appearance

  • Property mode set to 100644
File size: 2.4 KB
RevLine 
[9af201e]1'use strict';
2
3var GetIntrinsic = require('get-intrinsic');
4var callBound = require('call-bound');
5
6var $RangeError = require('es-errors/range');
7var $SyntaxError = require('es-errors/syntax');
8var $TypeError = require('es-errors/type');
9var $BigInt = GetIntrinsic('%BigInt%', true);
10
11var hasOwnProperty = require('./HasOwnProperty');
12var IsArray = require('./IsArray');
13var IsBigIntElementType = require('./IsBigIntElementType');
14var IsUnsignedElementType = require('./IsUnsignedElementType');
15
16var bytesAsFloat16 = require('../helpers/bytesAsFloat16');
17var bytesAsFloat32 = require('../helpers/bytesAsFloat32');
18var bytesAsFloat64 = require('../helpers/bytesAsFloat64');
19var bytesAsInteger = require('../helpers/bytesAsInteger');
20var every = require('../helpers/every');
21var isByteValue = require('../helpers/isByteValue');
22
23var $reverse = callBound('Array.prototype.reverse');
24var $slice = callBound('Array.prototype.slice');
25
26var tableTAO = require('./tables/typed-array-objects');
27
28// https://262.ecma-international.org/15.0/#sec-rawbytestonumeric
29
30module.exports = function RawBytesToNumeric(type, rawBytes, isLittleEndian) {
31 if (!hasOwnProperty(tableTAO.size, '$' + type)) {
32 throw new $TypeError('Assertion failed: `type` must be a TypedArray element type');
33 }
34 if (!IsArray(rawBytes) || !every(rawBytes, isByteValue)) {
35 throw new $TypeError('Assertion failed: `rawBytes` must be an Array of bytes');
36 }
37 if (typeof isLittleEndian !== 'boolean') {
38 throw new $TypeError('Assertion failed: `isLittleEndian` must be a Boolean');
39 }
40
41 var elementSize = tableTAO.size['$' + type]; // step 1
42
43 if (rawBytes.length !== elementSize) {
44 // this assertion is not in the spec, but it'd be an editorial error if it were ever violated
45 throw new $RangeError('Assertion failed: `rawBytes` must have a length of ' + elementSize + ' for type ' + type);
46 }
47
48 var isBigInt = IsBigIntElementType(type);
49 if (isBigInt && !$BigInt) {
50 throw new $SyntaxError('this environment does not support BigInts');
51 }
52
53 // eslint-disable-next-line no-param-reassign
54 rawBytes = $slice(rawBytes, 0, elementSize);
55 if (!isLittleEndian) {
56 $reverse(rawBytes); // step 2
57 }
58
59 if (type === 'FLOAT16') { // step 3
60 return bytesAsFloat16(rawBytes);
61 }
62
63 if (type === 'FLOAT32') { // step 4
64 return bytesAsFloat32(rawBytes);
65 }
66
67 if (type === 'FLOAT64') { // step 5
68 return bytesAsFloat64(rawBytes);
69 }
70
71 return bytesAsInteger(rawBytes, elementSize, IsUnsignedElementType(type), isBigInt);
72};
Note: See TracBrowser for help on using the repository browser.