Open arv opened 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.
rest[expr]
rest.length
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]); } }
In a strict function if all accesses of the rest param is
rest[expr]
andrest.length
we could generate code that only referencesarguments
.For example:
Today we compile that into:
But we could compile it into: