optimise rest parameters in spread element position and allocate rest array at the earliest common ancestor of all references - fixes #1768
This commit is contained in:
@@ -12,7 +12,6 @@ var somefun = function () {
|
||||
let somefg = (c, d, e, f, ...args3) => {
|
||||
var _a = args3[0];
|
||||
};
|
||||
var _c = arguments[1];
|
||||
var _d = args1[1];
|
||||
};
|
||||
let get1stArg = (...args) => args[0];
|
||||
|
||||
@@ -6,22 +6,15 @@ var concat = function concat() {
|
||||
};
|
||||
|
||||
var somefun = function somefun() {
|
||||
var _arguments = arguments;
|
||||
|
||||
var get2ndArg = function get2ndArg(a, b) {
|
||||
for (var _len = arguments.length, args1 = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
||||
args1[_key - 2] = arguments[_key];
|
||||
}
|
||||
|
||||
var _b = args1[0];
|
||||
var _b = arguments[2];
|
||||
var somef = function somef(x, y, z) {
|
||||
var _a = arguments[3];
|
||||
};
|
||||
var somefg = function somefg(c, d, e, f) {
|
||||
var _a = arguments[4];
|
||||
};
|
||||
var _c = _arguments[1];
|
||||
var _d = args1[1];
|
||||
var _d = arguments[3];
|
||||
};
|
||||
var get1stArg = function get1stArg() {
|
||||
return arguments[0];
|
||||
@@ -29,8 +22,8 @@ var somefun = function somefun() {
|
||||
};
|
||||
|
||||
function demo1() {
|
||||
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
||||
args[_key2] = arguments[_key2];
|
||||
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
|
||||
args[_key] = arguments[_key];
|
||||
}
|
||||
|
||||
return function (i) {
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
// single referenes
|
||||
function r(...rest){
|
||||
if (noNeedToWork) return 0;
|
||||
return rest;
|
||||
}
|
||||
|
||||
// multiple references
|
||||
function r(...rest){
|
||||
if (noNeedToWork) return 0;
|
||||
|
||||
rest;
|
||||
rest;
|
||||
}
|
||||
|
||||
// multiple nested references
|
||||
function r(...rest){
|
||||
if (noNeedToWork) return 0;
|
||||
|
||||
if (true) {
|
||||
return rest;
|
||||
} else {
|
||||
return rest;
|
||||
}
|
||||
}
|
||||
|
||||
// nested reference with root reference
|
||||
function r(...rest){
|
||||
if (noNeedToWork) return 0;
|
||||
|
||||
if (lol) rest;
|
||||
rest;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
// single referenes
|
||||
"use strict";
|
||||
|
||||
function r() {
|
||||
if (noNeedToWork) return 0;
|
||||
|
||||
for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {
|
||||
rest[_key] = arguments[_key];
|
||||
}
|
||||
|
||||
return rest;
|
||||
}
|
||||
|
||||
// multiple references
|
||||
function r() {
|
||||
if (noNeedToWork) return 0;
|
||||
|
||||
for (var _len2 = arguments.length, rest = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
||||
rest[_key2] = arguments[_key2];
|
||||
}
|
||||
|
||||
rest;
|
||||
rest;
|
||||
}
|
||||
|
||||
// multiple nested references
|
||||
function r() {
|
||||
if (noNeedToWork) return 0;
|
||||
|
||||
for (var _len3 = arguments.length, rest = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
||||
rest[_key3] = arguments[_key3];
|
||||
}
|
||||
|
||||
if (true) {
|
||||
return rest;
|
||||
} else {
|
||||
return rest;
|
||||
}
|
||||
}
|
||||
|
||||
// nested reference with root reference
|
||||
function r() {
|
||||
if (noNeedToWork) return 0;
|
||||
|
||||
for (var _len4 = arguments.length, rest = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
||||
rest[_key4] = arguments[_key4];
|
||||
}
|
||||
|
||||
if (lol) rest;
|
||||
rest;
|
||||
}
|
||||
@@ -47,10 +47,11 @@ var a = function a(foo) {
|
||||
};
|
||||
|
||||
var b = function b(foo) {
|
||||
var join = "join";
|
||||
|
||||
for (var _len6 = arguments.length, bar = Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {
|
||||
bar[_key6 - 1] = arguments[_key6];
|
||||
}
|
||||
|
||||
var join = "join";
|
||||
return bar[join];
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
// optimisation
|
||||
|
||||
function foo(...bar) {
|
||||
foo(...bar);
|
||||
}
|
||||
|
||||
// deoptimisation
|
||||
|
||||
function foo(a, ...b) {
|
||||
foo(...b);
|
||||
}
|
||||
|
||||
function foo(...b) {
|
||||
foo(1, ...b);
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// optimisation
|
||||
|
||||
"use strict";
|
||||
|
||||
function foo() {
|
||||
foo.apply(undefined, arguments);
|
||||
}
|
||||
|
||||
// deoptimisation
|
||||
|
||||
function foo(a) {
|
||||
for (var _len = arguments.length, b = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
||||
b[_key - 1] = arguments[_key];
|
||||
}
|
||||
|
||||
foo.apply(undefined, b);
|
||||
}
|
||||
|
||||
function foo() {
|
||||
for (var _len2 = arguments.length, b = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
||||
b[_key2] = arguments[_key2];
|
||||
}
|
||||
|
||||
foo.apply(undefined, [1].concat(b));
|
||||
}
|
||||
Reference in New Issue
Block a user