google/traceur-compiler

Optimize output of rest param transformer

arv opened this issue · 0 comments

arv commented

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]);
  }
}