Re: WebIDL overload resolution, arrays and Nullable

On 6/29/12 12:25 PM, Joshua Bell wrote:
> void f(float[] x); // overload A
> void f(DOMString x); // overload B
>
> WebIDL itself, of course, doesn't dictate how matching and dispatching
> should be implemented

Actually, it does. 
http://dev.w3.org/2006/webapi/WebIDL/#dfn-overload-resolution-algorithm

> The implication is that an IDL that defines methods
> with signatures that are not distinguishable is invalid

Correct.

> So rephrasing the question: are the above types distinguishable?

http://dev.w3.org/2006/webapi/WebIDL/#dfn-distinguishable seems pretty 
clear: yes.

> And if so, which would be expected to handle the call:
>
> f(null);
>
> Several interpretations and hence outcomes occur to us

Per current spec, at 
http://dev.w3.org/2006/webapi/WebIDL/#dfn-overload-resolution-algorithm 
step 13 we have:

* Substep 2 is skipped because there are no nullable types or
   dictionaries here.
* Substeps 3-6 are skipped because null is not an object.
* In step 7 the overload with DOMString is selected

> (3) T[] does not match null, but as null is an ECMAScript primitive
> value it is run through ToString() and hence overload B is invoked with
> DOMString "null"

This is what happens per spec at the moment, but the fact that null is a 
primitive value is somewhat irrelevant except insofar as it makes it not 
match the preconditions in substep 4.

-Boris

Received on Friday, 29 June 2012 16:50:44 UTC