Bug 1066776. Make variadic dictionary arguments work. r=khuey

This commit is contained in:
Boris Zbarsky 2014-09-19 00:02:33 -04:00
Родитель 14ff5707d7
Коммит 41fde7f472
5 изменённых файлов: 8 добавлений и 3 удалений

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

@ -3405,6 +3405,7 @@ class IDLArgument(IDLObjectWithIdentifier):
self._allowTreatNonCallableAsNull = False
assert not variadic or optional
assert not variadic or not defaultValue
def addExtendedAttributes(self, attrs):
attrs = self.checkForStringHandlingExtendedAttributes(
@ -3453,9 +3454,9 @@ class IDLArgument(IDLObjectWithIdentifier):
if ((self.type.isDictionary() or
self.type.isUnion() and self.type.unroll().hasDictionaryType) and
self.optional and not self.defaultValue):
# Default optional dictionaries to null, for simplicity,
# so the codegen doesn't have to special-case this.
self.optional and not self.defaultValue and not self.variadic):
# Default optional non-variadic dictionaries to null,
# for simplicity, so the codegen doesn't have to special-case this.
self.defaultValue = IDLNullValue(self.location)
elif self.type.isAny():
assert (self.defaultValue is None or

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

@ -714,6 +714,7 @@ public:
void PassDictContainingDict(JSContext*, const DictContainingDict&);
void PassDictContainingSequence(JSContext*, const DictContainingSequence&);
void ReceiveDictContainingSequence(JSContext*, DictContainingSequence&);
void PassVariadicDictionary(JSContext*, const Sequence<Dict>&);
// Typedefs
void ExerciseTypedefInterfaces1(TestInterface&);

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

@ -686,6 +686,7 @@ interface TestInterface {
void passDictContainingDict(optional DictContainingDict arg);
void passDictContainingSequence(optional DictContainingSequence arg);
DictContainingSequence receiveDictContainingSequence();
void passVariadicDictionary(Dict... arg);
// EnforceRange/Clamp tests
void dontEnforceRangeOrClamp(byte arg);

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

@ -550,6 +550,7 @@ interface TestExampleInterface {
void passDictContainingDict(optional DictContainingDict arg);
void passDictContainingSequence(optional DictContainingSequence arg);
DictContainingSequence receiveDictContainingSequence();
void passVariadicDictionary(Dict... arg);
// EnforceRange/Clamp tests
void dontEnforceRangeOrClamp(byte arg);

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

@ -566,6 +566,7 @@ interface TestJSImplInterface {
void passDictContainingDict(optional DictContainingDict arg);
void passDictContainingSequence(optional DictContainingSequence arg);
DictContainingSequence receiveDictContainingSequence();
void passVariadicDictionary(Dict... arg);
// EnforceRange/Clamp tests
void dontEnforceRangeOrClamp(byte arg);