14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_cifunction createArray(len) {
174514f5e3Sopenharmony_ci    return Array.apply(null, { length: len });
184514f5e3Sopenharmony_ci}
194514f5e3Sopenharmony_ci
204514f5e3Sopenharmony_cilet arr = createArray(10);
214514f5e3Sopenharmony_cilet a1 = createArray(23.2);
224514f5e3Sopenharmony_cilet a2 = createArray();
234514f5e3Sopenharmony_ciprint(arr);
244514f5e3Sopenharmony_ciprint(a1);
254514f5e3Sopenharmony_ciprint(a2.length);
264514f5e3Sopenharmony_ciconst v1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
274514f5e3Sopenharmony_ciconst v4 = Int8Array.from(v1, v5 => v5.charCodeAt(0));
284514f5e3Sopenharmony_ciObject.defineProperty(v4, "length", {
294514f5e3Sopenharmony_ci    value: 0
304514f5e3Sopenharmony_ci});
314514f5e3Sopenharmony_ciprint(String.fromCharCode.apply(null, v4));
324514f5e3Sopenharmony_ci
334514f5e3Sopenharmony_cifunction f0(a, b) {
344514f5e3Sopenharmony_ci    print(a, b);
354514f5e3Sopenharmony_ci}
364514f5e3Sopenharmony_ci
374514f5e3Sopenharmony_cilet v38;
384514f5e3Sopenharmony_ci
394514f5e3Sopenharmony_cifunction f2() {
404514f5e3Sopenharmony_ci    arguments.length = -1;
414514f5e3Sopenharmony_ci    v38 = arguments;
424514f5e3Sopenharmony_ci}
434514f5e3Sopenharmony_ci
444514f5e3Sopenharmony_cif2(1, 2);
454514f5e3Sopenharmony_cif0.apply(null, v38);
464514f5e3Sopenharmony_ci
474514f5e3Sopenharmony_ci// undefined
484514f5e3Sopenharmony_citry {
494514f5e3Sopenharmony_ci    const v3 = new ArrayBuffer(17);
504514f5e3Sopenharmony_ci
514514f5e3Sopenharmony_ci    function F4(a6, a7) {
524514f5e3Sopenharmony_ci        if (!new.target) {
534514f5e3Sopenharmony_ci            throw 'must be called with new';
544514f5e3Sopenharmony_ci        }
554514f5e3Sopenharmony_ci
564514f5e3Sopenharmony_ci        function f8(a9, a10, a11) {
574514f5e3Sopenharmony_ci        }
584514f5e3Sopenharmony_ci
594514f5e3Sopenharmony_ci        const v14 = new BigUint64Array(31);
604514f5e3Sopenharmony_ci        const o15 = {
614514f5e3Sopenharmony_ci            ...v14,
624514f5e3Sopenharmony_ci            ...v14,
634514f5e3Sopenharmony_ci        };
644514f5e3Sopenharmony_ci        Object.defineProperty(o15, 4, { set: f8 });
654514f5e3Sopenharmony_ci    }
664514f5e3Sopenharmony_ci
674514f5e3Sopenharmony_ci    const v16 = new F4();
684514f5e3Sopenharmony_ci    F4(v16, v3);
694514f5e3Sopenharmony_ci} catch (error) {
704514f5e3Sopenharmony_ci    print(error.name)
714514f5e3Sopenharmony_ci}
724514f5e3Sopenharmony_ci
734514f5e3Sopenharmony_ci// undefined
744514f5e3Sopenharmony_citry {
754514f5e3Sopenharmony_ci    const v3 = [100, Int8Array];
764514f5e3Sopenharmony_ci    const v6 = new ArrayBuffer(13);
774514f5e3Sopenharmony_ci
784514f5e3Sopenharmony_ci    function F7(a9, a10) {
794514f5e3Sopenharmony_ci        if (!new.target) {
804514f5e3Sopenharmony_ci            throw 'must be called with new';
814514f5e3Sopenharmony_ci        }
824514f5e3Sopenharmony_ci
834514f5e3Sopenharmony_ci        function f11(a12, a13, a14) {
844514f5e3Sopenharmony_ci        }
854514f5e3Sopenharmony_ci
864514f5e3Sopenharmony_ci        const v17 = new BigUint64Array(35);
874514f5e3Sopenharmony_ci        const o18 = {
884514f5e3Sopenharmony_ci            ...v17,
894514f5e3Sopenharmony_ci            ...v17,
904514f5e3Sopenharmony_ci        };
914514f5e3Sopenharmony_ci        Object.defineProperty(o18, 4, { set: f11 });
924514f5e3Sopenharmony_ci    }
934514f5e3Sopenharmony_ci
944514f5e3Sopenharmony_ci    const v19 = new F7();
954514f5e3Sopenharmony_ci    F7(v19, v6);
964514f5e3Sopenharmony_ci    JSON.stringify(6, v3);
974514f5e3Sopenharmony_ci} catch (error) {
984514f5e3Sopenharmony_ci    print(error.name)
994514f5e3Sopenharmony_ci}
1004514f5e3Sopenharmony_ci
1014514f5e3Sopenharmony_ciprint(Function.name);
1024514f5e3Sopenharmony_ciprint(Function.length);
1034514f5e3Sopenharmony_ciprint(Function.prototype.name);
1044514f5e3Sopenharmony_ciprint(Function.prototype.length);
1054514f5e3Sopenharmony_ci
1064514f5e3Sopenharmony_cifor (let key in Function) {
1074514f5e3Sopenharmony_ci    print(key);
1084514f5e3Sopenharmony_ci}
1094514f5e3Sopenharmony_ci
1104514f5e3Sopenharmony_cifor (let key in Function.prototype) {
1114514f5e3Sopenharmony_ci    print(key);
1124514f5e3Sopenharmony_ci}
1134514f5e3Sopenharmony_ci
1144514f5e3Sopenharmony_civar backup_apply = Function.prototype.apply;
1154514f5e3Sopenharmony_ciFunction.prototype.constructor = 1;
1164514f5e3Sopenharmony_ciFunction.prototype.apply = 1;
1174514f5e3Sopenharmony_ciFunction.prototype.bind = 1;
1184514f5e3Sopenharmony_ciFunction.prototype.call = 1;
1194514f5e3Sopenharmony_ciFunction.prototype.toString = 1;
1204514f5e3Sopenharmony_ci
1214514f5e3Sopenharmony_citry{
1224514f5e3Sopenharmony_ci   Function.name = 1;
1234514f5e3Sopenharmony_ci} catch(e) {
1244514f5e3Sopenharmony_ci   print(e);
1254514f5e3Sopenharmony_ci}
1264514f5e3Sopenharmony_ci
1274514f5e3Sopenharmony_citry{
1284514f5e3Sopenharmony_ci   Function.length = 1;
1294514f5e3Sopenharmony_ci} catch(e) {
1304514f5e3Sopenharmony_ci   print(e);
1314514f5e3Sopenharmony_ci}
1324514f5e3Sopenharmony_ci
1334514f5e3Sopenharmony_citry{
1344514f5e3Sopenharmony_ci   Function.prototype = 1;
1354514f5e3Sopenharmony_ci} catch(e) {
1364514f5e3Sopenharmony_ci   print(e);
1374514f5e3Sopenharmony_ci}
1384514f5e3Sopenharmony_ci
1394514f5e3Sopenharmony_citry{
1404514f5e3Sopenharmony_ci   Function.prototype.name = 1;
1414514f5e3Sopenharmony_ci} catch(e) {
1424514f5e3Sopenharmony_ci   print(e);
1434514f5e3Sopenharmony_ci}
1444514f5e3Sopenharmony_ci
1454514f5e3Sopenharmony_citry{
1464514f5e3Sopenharmony_ci   Function.prototype.length = 1;
1474514f5e3Sopenharmony_ci} catch(e) {
1484514f5e3Sopenharmony_ci   print(e);
1494514f5e3Sopenharmony_ci}
1504514f5e3Sopenharmony_ci
1514514f5e3Sopenharmony_citry{
1524514f5e3Sopenharmony_ci   Function.prototype.caller = 1;
1534514f5e3Sopenharmony_ci} catch(e) {
1544514f5e3Sopenharmony_ci   print(e);
1554514f5e3Sopenharmony_ci}
1564514f5e3Sopenharmony_ci
1574514f5e3Sopenharmony_citry{
1584514f5e3Sopenharmony_ci   Function.prototype.arguments = 1;
1594514f5e3Sopenharmony_ci} catch(e) {
1604514f5e3Sopenharmony_ci   print(e);
1614514f5e3Sopenharmony_ci}
1624514f5e3Sopenharmony_ci
1634514f5e3Sopenharmony_ci
1644514f5e3Sopenharmony_citry{
1654514f5e3Sopenharmony_ci   Function.prototype[Symbol.hasInstance] = 1;
1664514f5e3Sopenharmony_ci} catch(e) {
1674514f5e3Sopenharmony_ci   print(e);
1684514f5e3Sopenharmony_ci}
1694514f5e3Sopenharmony_ci
1704514f5e3Sopenharmony_ciFunction.prototype.apply = backup_apply;
1714514f5e3Sopenharmony_ci
1724514f5e3Sopenharmony_cilet a3 = [1, 2, 3];
1734514f5e3Sopenharmony_cifunction func1(a, b, c, d) {
1744514f5e3Sopenharmony_ci    arguments.length = 100;
1754514f5e3Sopenharmony_ci    func2.apply(null, arguments, 0, 0); // c interpreter
1764514f5e3Sopenharmony_ci}
1774514f5e3Sopenharmony_cifunction func2(a) {
1784514f5e3Sopenharmony_ci    print(a.length);
1794514f5e3Sopenharmony_ci    for (let i = 0; i < a.length; ++i) {
1804514f5e3Sopenharmony_ci        print(a[i]);
1814514f5e3Sopenharmony_ci    }
1824514f5e3Sopenharmony_ci}
1834514f5e3Sopenharmony_cifunc1(a3);
184