holes in spread elements/arguments

Allen Wirfs-Brock allen at wirfs-brock.com
Thu Sep 29 12:53:37 PDT 2011

On Sep 29, 2011, at 12:14 PM, Sean Eagan wrote:

> On Thu, Sep 29, 2011 at 1:31 PM, Allen Wirfs-Brock
> <allen at wirfs-brock.com> wrote:
>> ...
>> I haven't written the spec. for spread in argument lists but clearly interior holes need to be passed as undefined.  Trailing holes in a spread in the final argument position could be trimmed but that would mean that:
> So you don't think holes should appear in rest parameters or
> `arguments` ?  The only reason I can think of to require that is that
> old code may expect `arguments` not to contain holes, but then it
> could be spec'ed that holes only appear in rest parameters.  Beyond
> that is seems like it would make sense to be consistent with array
> literal hole preservation.

No I don't. Currently there is no ways to syntactically generate an actual argument list with holes and I think that allowing ,, in argument lists is not particularly desirable. Also apply replaces holes with undefined so there is currently no way to create an arguments object that initially contains holes (somebody could delete elements after  it was created).  It seems highly desirable that we preserve the existing semantics of arguments and that:
   function foo(...args) {
      assert(length.arguments === length.args};
      for (let i in arguments) assert(arguments.hasOwnProperty(i) === args.hasOwnProperty(i) && arguments[i] === args[i]);

regardless of how foo was called.  In other words,  baz(...bar) and baz.apply(undefined,bar) should always produce the same effect.

Also, note that I've currently spec'd ES6 so that 'arguments' can be used as a rest parameter name.  In other words
   function foo(...args) {return args}
  function foo(...arguments) {return arguments}
are semantically equivalent.

I did this to  enable to make it easier to migrate code  such as:
   function foo() {baz(arguments)}
   function foo(...arguments) {baz(arguments)}


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110929/6e7e19b9/attachment.html>

More information about the es-discuss mailing list