mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-30 00:01:50 +00:00
Bug 1056138 - Move checks for the PutForwards and Replaceable extended attributes into the WebIDL parser; r=bz
In fact, the WebIDL parser already checks for PutForwards, so the check in the codegen was superfluous.
This commit is contained in:
parent
b88537eeb0
commit
51b6bdd7a2
@ -10752,12 +10752,6 @@ class CGDescriptor(CGThing):
|
||||
if props.isCrossOriginGetter:
|
||||
crossOriginGetters.add(m.identifier.name)
|
||||
if not m.readonly:
|
||||
for extAttr in ["PutForwards", "Replaceable"]:
|
||||
if m.getExtendedAttribute(extAttr):
|
||||
raise TypeError("Writable attributes should not "
|
||||
"have %s specified.\n"
|
||||
"%s" %
|
||||
(extAttr, m.location))
|
||||
if m.isStatic():
|
||||
assert descriptor.interface.hasInterfaceObject()
|
||||
cgThings.append(CGStaticSetter(descriptor, m))
|
||||
|
@ -957,10 +957,15 @@ class IDLInterface(IDLObjectWithScope):
|
||||
list(i.location for i in
|
||||
self.interfacesBasedOnSelf if i.parent == self))
|
||||
|
||||
|
||||
for member in self.members:
|
||||
member.validate()
|
||||
|
||||
if self.isCallback() and member.getExtendedAttribute("Replaceable"):
|
||||
raise WebIDLError("[Replaceable] used on an attribute on "
|
||||
"interface %s which is a callback interface" %
|
||||
self.identifier.name,
|
||||
[self.location, member.location])
|
||||
|
||||
# Check that PutForwards refers to another attribute and that no
|
||||
# cycles exist in forwarded assignments.
|
||||
if member.isAttr():
|
||||
@ -3236,6 +3241,15 @@ class IDLAttribute(IDLInterfaceMember):
|
||||
raise WebIDLError("[PutForwards] takes an identifier",
|
||||
[attr.location, self.location])
|
||||
elif identifier == "Replaceable":
|
||||
if not attr.noArguments():
|
||||
raise WebIDLError("[Replaceable] must take no arguments",
|
||||
[attr.location])
|
||||
if not self.readonly:
|
||||
raise WebIDLError("[Replaceable] is only allowed on readonly "
|
||||
"attributes", [attr.location, self.location])
|
||||
if self.isStatic():
|
||||
raise WebIDLError("[Replaceable] is only allowed on non-static "
|
||||
"attributes", [attr.location, self.location])
|
||||
if self.getExtendedAttribute("PutForwards") is not None:
|
||||
raise WebIDLError("[PutForwards] and [Replaceable] can't both "
|
||||
"appear on the same attribute",
|
||||
|
58
dom/bindings/parser/tests/test_replaceable.py
Normal file
58
dom/bindings/parser/tests/test_replaceable.py
Normal file
@ -0,0 +1,58 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
def should_throw(parser, harness, message, code):
|
||||
parser = parser.reset();
|
||||
threw = False
|
||||
try:
|
||||
parser.parse(code)
|
||||
parser.finish()
|
||||
except:
|
||||
threw = True
|
||||
|
||||
harness.ok(threw, "Should have thrown: %s" % message)
|
||||
|
||||
|
||||
def WebIDLTest(parser, harness):
|
||||
# The [Replaceable] extended attribute MUST take no arguments.
|
||||
should_throw(parser, harness, "no arguments", """
|
||||
interface I {
|
||||
[Replaceable=X] readonly attribute long A;
|
||||
};
|
||||
""")
|
||||
|
||||
# An attribute with the [Replaceable] extended attribute MUST NOT also be
|
||||
# declared with the [PutForwards] extended attribute.
|
||||
should_throw(parser, harness, "PutForwards", """
|
||||
interface I {
|
||||
[PutForwards=B, Replaceable] readonly attribute J A;
|
||||
};
|
||||
interface J {
|
||||
attribute long B;
|
||||
};
|
||||
""")
|
||||
|
||||
# The [Replaceable] extended attribute MUST NOT be used on an attribute
|
||||
# that is not read only.
|
||||
should_throw(parser, harness, "writable attribute", """
|
||||
interface I {
|
||||
[Replaceable] attribute long A;
|
||||
};
|
||||
""")
|
||||
|
||||
# The [Replaceable] extended attribute MUST NOT be used on a static
|
||||
# attribute.
|
||||
should_throw(parser, harness, "static attribute", """
|
||||
interface I {
|
||||
[Replaceable] static readonly attribute long A;
|
||||
};
|
||||
""")
|
||||
|
||||
# The [Replaceable] extended attribute MUST NOT be used on an attribute
|
||||
# declared on a callback interface.
|
||||
should_throw(parser, harness, "callback interface", """
|
||||
callback interface I {
|
||||
[Replaceable] readonly attribute long A;
|
||||
};
|
||||
""")
|
Loading…
Reference in New Issue
Block a user