- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Thu, 09 May 2013 09:45:32 -0400
- To: Andreas Rossberg <rossberg@google.com>
- CC: Allen Wirfs-Brock <allen@wirfs-brock.com>, "public-script-coord@w3.org" <public-script-coord@w3.org>
On 5/9/13 8:14 AM, Andreas Rossberg wrote:
> On 9 May 2013 03:18, Boris Zbarsky <bzbarsky@mit.edu> wrote:
>> I guess let's take this requirement for ES as a sunk compatibility cost.
>> Where do we go with WebIDL?
>
> Maybe I misunderstand, but is there any reason why WebIDL needs to
> care about the arguments object at all?
Well, WebIDL needs to care about APIs people want to create. So say
someone wants to define a function doSomething which coerces its first
argument to a string, and for the second argument wants to tell apart
whether it was not passed at all or passed as undefined. In JS, you
would do this like so:
function doSomething(arg1, arg2) {
arg1 = String(arg2);
if (arguments.length > 1) {
// arg2 passed
if (arg2 === undefined) {
// explicit undefined
} else {
// some value
}
} else {
// arg2 not passed at all
}
}
If we want WebIDL to allow such APIS, then webidl either needs a type
that can express both undefined and "not passed" as separate concepts or
it needs to pass along the argument count to the underlying prose or
something.
Right now WebIDL can express something like "not passed or coerced to
string" (which looks like "optional DOMString"), and it can express "not
passed or just any value" (which is "optional any"), but can't express
"not passed, or explicit undefined, or coerced to string". One question
is whether it ever needs to do that or whether we can assume that any
cases that want to treat "not passed" and "undefined" differently would
always want the 'any' type anyway.
-Boris
Received on Thursday, 9 May 2013 13:46:03 UTC