[Bug 23532] Dealing with undefined

https://www.w3.org/Bugs/Public/show_bug.cgi?id=23532

--- Comment #12 from Boris Zbarsky <bzbarsky@mit.edu> ---
So I've thought about this some more.

This bug's proposal (comment 0) comes down to making a whole bunch of methods
that currently do not throw in certain cases start throwing in those cases.

Specifically, converting undefined to non-nullable interface arguments threw
anyway.  But conversion to nullable interface arguments used to produce null
and would now throw, and conversion to primitives used to produce
0/false/"undefined" (depending on the kind of primitive) and would now throw.

I strongly suspect that such a change is not web-compatible wholesale, which
means that if we make it we will need to explicitly flag various APIs that are
exceptions to the general rule for web compat purposes.  Coming up with such a
list of APIs would be at best time-consuming and error-prone (in the sense of
shipping browsers that break websites and finding out about that the hard way).

I do not expect Gecko to ship such a change before other UAs have done so and
have submitted feedback on which APIs they had to munge for compat reasons
(which is not a given, since other UAs seem to have a history of not submitting
such feedback at all).  I strongly doubt any other UA vendors are any more
willing than I am to stick their hands into this meat-grinder, but if they are
they should of course speak up!

Another, perhaps less breakage-prone, way to get to the world proposed in
comment 0 is to simply drop all arguments.length checks from WebIDL altogether
and just blindly coerce things as needed.  So omitting a Node argument would
still throw, but omitting a "Node?" argument would in fact act just like
passing explicit undefined would.  A bunch of stuff like calling setAttribute()
with only one argument (or no arguments, for that matter) which is currently
specified to throw would stop throwing, which is a safer change to make than
the reverse, albeit one that leads to less-debuggable code.  In this world, I'm
not quite sure how overload resolution will work, but if this is the direction
we want to go we can try to figure that out.  In some ways, overloaded methods
that cannot be reexpressed in terms of unions are already so whack that it
doesn't matter _that_ much how we resolve them.  :(

I should note that the "less breakage-prone" world is where WebKit and Blink
already live, as far as I can tell.  Try
http://software.hixie.ch/utilities/js/live-dom-viewer/?saved=2580 in Chrome or
Safari.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Received on Wednesday, 23 October 2013 06:33:26 UTC