Bug 1583819 - Webidl parser should report error if there are multiple definitions with same identifier from the mixin interfaces; r=bzbarsky

Differential Revision: https://phabricator.services.mozilla.com/D47136

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Edgar Chen 2019-09-25 20:00:53 +00:00
Родитель 11b80b3ccf
Коммит 2cae03d6e1
2 изменённых файлов: 45 добавлений и 0 удалений

Просмотреть файл

@ -1101,6 +1101,13 @@ class IDLInterfaceOrNamespace(IDLInterfaceOrInterfaceMixinOrNamespace):
for mixin in sorted(self.includedMixins,
key=lambda x: x.identifier.name):
for mixinMember in mixin.members:
for member in self.members:
if mixinMember.identifier.name == member.identifier.name:
raise WebIDLError(
"Multiple definitions of %s on %s coming from 'includes' statements" %
(member.identifier.name, self),
[mixinMember.location, member.location])
self.members.extend(mixin.members)
for ancestor in self.getInheritedInterfaces():

Просмотреть файл

@ -337,6 +337,44 @@ def WebIDLTest(parser, harness):
harness.ok(threw,
"Should fail if an interface mixin includes maplike")
parser = parser.reset()
threw = False
try:
parser.parse("""
interface Interface {
attribute short attr;
};
interface mixin Mixin {
attribute short attr;
};
Interface includes Mixin;
""")
results = parser.finish()
except:
threw = True
harness.ok(threw,
"Should fail if the included mixin interface has duplicated member")
parser = parser.reset()
threw = False
try:
parser.parse("""
interface Interface {};
interface mixin Mixin1 {
attribute short attr;
};
interface mixin Mixin2 {
attribute short attr;
};
Interface includes Mixin1;
Interface includes Mixin2;
""")
results = parser.finish()
except:
threw = True
harness.ok(threw,
"Should fail if the included mixin interfaces have duplicated member")
parser = parser.reset()
parser.parse("""
[Global] interface Window {};