blob: cd3b02c4e59991e5110f13eaf29a4cc612977595 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
// |jit-test| --fast-warmup; --no-threads
setJitCompilerOption("baseline.warmup.trigger", 0);
setJitCompilerOption("ion.warmup.trigger", 100);
// Prevent GC from cancelling/discarding Ion compilations.
gczeal(0);
// Create a fresh set of functions for each argument count to avoid type pollution.
function makeTest(count) {
var args = Array(count).fill(0).join(",");
return Function(`
class Base {
constructor() {
this.count = arguments.length;
}
}
class C extends Base {
constructor(...args) {
// When |C| is inlined into its caller, the number of arguments is fixed and
// we can scalar replace the inlined rest array.
assertRecoveredOnBailout(args, true);
return super(...args);
}
}
// |C| must be small enough to be inlined into the test function.
assertEq(isSmallFunction(C), true);
function test() {
for (let i = 0; i < 1000; ++i) {
let obj = new C(${args});
assertEq(obj.count, ${count});
}
}
return test;
`)();
}
// Limited by gc::CanUseFixedElementsForArray(), see also WarpBuilder::build_Rest().
const maxRestArgs = 14;
for (let i = 0; i <= maxRestArgs; ++i) {
makeTest(i)();
}
|