Unforgeable attributes are defined directly on the object, not on the
prototype. So we keep them in a separate spec array and define them
during object creation as needed.
This means that we have to pass that separate spec array to the Xray
helpers, unfortunately, which somewhat complicates those.
We mark constructors as static in the parser because they are. This
allows us to just use the isStatic() for the IDLMember to mark our
declarations static.
To generate an example interface implementation, just "make
interfacename-example" in $objdir/dom/bindings. This will place files
called interfacename-example.h and interfacename-example.cpp in that
directory. For example, "make XMLHttpRequest-example" will get you
$objdir/dom/bindings/XMLHttpRequest-example.h and
$objdir/dom/bindings/XMLHttpRequest-example.cpp.
Attribute getters currently default to const methods, while setters
and operations default to non-const methods.
--HG--
rename : dom/bindings/BindingGen.py => dom/bindings/ExampleGen.py
There are several parts here:
1) Enforce the requirement that dictionary arguments not followed by a required argument are optional.
2) Make dictionaries no longer be distinguishable from nullable types.
3) Disallow dictionaries or unions containing dictionaries inside a nullable type.
4) Force optional dictionaries to have a default value of null so that codegen doesn't have to worry about dealing with
optional arguments that have no default value in the IDL but need to be treated as if they were null.
There are several parts here:
1) Enforce the requirement that dictionary arguments not followed by a required argument are optional.
2) Make dictionaries no longer be distinguishable from nullable types.
3) Disallow dictionaries or unions containing dictionaries inside a nullable type.
4) Force optional dictionaries to have a default value of null so that codegen doesn't have to worry about dealing with
optional arguments that have no default value in the IDL but need to be treated as if they were null.
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.