google / traceur-compiler

Traceur is a JavaScript.next-to-JavaScript-of-today compiler
Apache License 2.0
8.17k stars 578 forks source link

Optimize output of rest param transformer #2116

Open arv opened 8 years ago

arv commented 8 years ago

In a strict function if all accesses of the rest param is rest[expr] and rest.length we could generate code that only references arguments.

For example:

'use strict';
function f(x, ...xs) {
  for (let i = 0; i < xs.length; i++) {
    print(xs[i]);
  }
}

Today we compile that into:

'use strict';
function f(x) {
  for (var xs = [],
      $__0 = 1; $__0 < arguments.length; $__0++)
    xs[$__0 - 1] = arguments[$__0];
  for (var i = 0; i < xs.length; i++) {
    print(xs[i]);
  }
}

But we could compile it into:

'use strict';
function f(x) {
  for (var i = 0; i < arguments.length - 1; i++) {
    print(arguments[i + 1]);
  }
}