Another implementation option would be to put all the dictionaries in a single
file and have a static global set of ids which works across all dictionaries
and is initialized once at startup or so. That would also handle cross-file
dictionary inheritance better.
One problem that remains is the fake descriptor business. At the moment this
does not allow interface types inside dictionaries. We could probably work
around this by either refactoring code to make it possible to get the declType
independently of the actual conversion template (whether because it lives in a
separate function or because the conversion template generator knows to just
return an empty string when the fake descriptor provirder is passed) or by
figuring out a way to pass an actual descriptor provider to dictionary codegen.
There are two changes here. One is to pass tracking=True to our parser. This makes it properly track positions
of all productions, not just of lexer tokens. The second is to properly count up our newlines in the lex data,
since the lexer seems to report the line number of the start of the lex data, which is always 1 in our case.
The big block in getRetvalDeclarationForType is just direct cut/paste from CGCallGenerator plus the addition of the sequence case. The IDL parser changes were OKed by khuey; they're needed so that we don't have to worry about the ordering of sequence with conversions for strings and primitives.
There are two parts to this change:
1) Sequences and arrays are now distinguishable from all non-callback interfaces.
2) To handle that change, overload resolution first tries to convert to the exact
interface, and only if that fails tries to convert things with indexed properties
to sequences or arrays.