- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Wed, 10 Oct 2012 21:12:57 -0400
- To: Jonas Sicking <jonas@sicking.cc>
- CC: Robert Ginda <rginda@chromium.org>, Alec Flett <alecflett@chromium.org>, public-webapps@w3.org, "public-script-coord@w3.org" <public-script-coord@w3.org>
On 10/10/12 6:51 PM, Jonas Sicking wrote: > FWIW, ES6 is going to treat the undefined value as "not passing a > parameter" when it comes to functions that have default values. When there are default values, yes. But what about cases when there are no default values? Note that openCursor, which I think is where this thread started, does NOT define default values for its arguments. Should it? (As a side note, the IDL for openCursor is not valid WebIDL, because "any?" is not a valid WebIDL type.) > In anticipation of ES6 formally defining this, WebIDL has already > switched to this It certainly hasn't so far, though I agree it may be a good idea to do this. In fact, WebIDL doesn't even do what you want here with [TreatUndefinedAs=Missing]. All that does is that if it's present on an argument and all arguments after it, and if all the values passed for all those arguments are undefined, then the effective overload used is the one with all those arguments omitted. So if you have this IDL: void foo([TreatUndefinedAs=Missing] optional int foo, [TreatUndefinedAs=Missing] optional int bar); and you make this call: foo(undefined, 5) this will behave the same as foo(0, 5). Basically, TreatUndefinedAs=Missing is meant to let you pretend like trailing undefined values don't affect arguments.length, in ES terms. Think about all this from the point of view of an ES impl of foo() above. How would you represent, in an ES function that expects its first argument to be an int and the second argument to be an int but makes them optional, the concept of "second int passed, but first not passed"? However you'd do that, that's probably what WebIDL should aim for. ccing public-script-coord here, because it seems like there's some serious lack of clarity about what WebIDL does now and what behavior people want out of it. Note that all this affects openCursor and the like only tangentially, because those take an "any" type and hence have to do type introspection anyway. They can define whatever behavior is desired for null or undefined or whatnot. > As for null, the intent was that 'null' would be interpreted as 'not > defined' and thus the same as undefined. Though this isn't very clear > in the spec. It's not just not clear, it's not present at all, as far as I can tell. -Boris
Received on Thursday, 11 October 2012 01:13:28 UTC