source: frontend/node_modules/es-abstract/2025/ArraySpeciesCreate.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.3 KB
Line 
1'use strict';
2
3var GetIntrinsic = require('get-intrinsic');
4
5var $species = GetIntrinsic('%Symbol.species%', true);
6var $TypeError = require('es-errors/type');
7var isInteger = require('math-intrinsics/isInteger');
8var isObject = require('es-object-atoms/isObject');
9
10var ArrayCreate = require('./ArrayCreate');
11var Get = require('./Get');
12var IsArray = require('./IsArray');
13var IsConstructor = require('./IsConstructor');
14
15// https://262.ecma-international.org/12.0/#sec-arrayspeciescreate
16
17module.exports = function ArraySpeciesCreate(originalArray, length) {
18 if (!isInteger(length) || length < 0) {
19 throw new $TypeError('Assertion failed: length must be an integer >= 0');
20 }
21
22 var isArray = IsArray(originalArray);
23 if (!isArray) {
24 return ArrayCreate(length);
25 }
26
27 var C = Get(originalArray, 'constructor');
28 // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
29 // if (IsConstructor(C)) {
30 // if C is another realm's Array, C = undefined
31 // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
32 // }
33 if ($species && isObject(C)) {
34 C = Get(C, $species);
35 if (C === null) {
36 C = void 0;
37 }
38 }
39
40 if (typeof C === 'undefined') {
41 return ArrayCreate(length);
42 }
43 if (!IsConstructor(C)) {
44 throw new $TypeError('C must be a constructor');
45 }
46 return new C(length); // Construct(C, length);
47};
48
Note: See TracBrowser for help on using the repository browser.