зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1066776. Make variadic dictionary arguments work. r=khuey
This commit is contained in:
Родитель
14ff5707d7
Коммит
41fde7f472
|
@ -3405,6 +3405,7 @@ class IDLArgument(IDLObjectWithIdentifier):
|
||||||
self._allowTreatNonCallableAsNull = False
|
self._allowTreatNonCallableAsNull = False
|
||||||
|
|
||||||
assert not variadic or optional
|
assert not variadic or optional
|
||||||
|
assert not variadic or not defaultValue
|
||||||
|
|
||||||
def addExtendedAttributes(self, attrs):
|
def addExtendedAttributes(self, attrs):
|
||||||
attrs = self.checkForStringHandlingExtendedAttributes(
|
attrs = self.checkForStringHandlingExtendedAttributes(
|
||||||
|
@ -3453,9 +3454,9 @@ class IDLArgument(IDLObjectWithIdentifier):
|
||||||
|
|
||||||
if ((self.type.isDictionary() or
|
if ((self.type.isDictionary() or
|
||||||
self.type.isUnion() and self.type.unroll().hasDictionaryType) and
|
self.type.isUnion() and self.type.unroll().hasDictionaryType) and
|
||||||
self.optional and not self.defaultValue):
|
self.optional and not self.defaultValue and not self.variadic):
|
||||||
# Default optional dictionaries to null, for simplicity,
|
# Default optional non-variadic dictionaries to null,
|
||||||
# so the codegen doesn't have to special-case this.
|
# for simplicity, so the codegen doesn't have to special-case this.
|
||||||
self.defaultValue = IDLNullValue(self.location)
|
self.defaultValue = IDLNullValue(self.location)
|
||||||
elif self.type.isAny():
|
elif self.type.isAny():
|
||||||
assert (self.defaultValue is None or
|
assert (self.defaultValue is None or
|
||||||
|
|
|
@ -714,6 +714,7 @@ public:
|
||||||
void PassDictContainingDict(JSContext*, const DictContainingDict&);
|
void PassDictContainingDict(JSContext*, const DictContainingDict&);
|
||||||
void PassDictContainingSequence(JSContext*, const DictContainingSequence&);
|
void PassDictContainingSequence(JSContext*, const DictContainingSequence&);
|
||||||
void ReceiveDictContainingSequence(JSContext*, DictContainingSequence&);
|
void ReceiveDictContainingSequence(JSContext*, DictContainingSequence&);
|
||||||
|
void PassVariadicDictionary(JSContext*, const Sequence<Dict>&);
|
||||||
|
|
||||||
// Typedefs
|
// Typedefs
|
||||||
void ExerciseTypedefInterfaces1(TestInterface&);
|
void ExerciseTypedefInterfaces1(TestInterface&);
|
||||||
|
|
|
@ -686,6 +686,7 @@ interface TestInterface {
|
||||||
void passDictContainingDict(optional DictContainingDict arg);
|
void passDictContainingDict(optional DictContainingDict arg);
|
||||||
void passDictContainingSequence(optional DictContainingSequence arg);
|
void passDictContainingSequence(optional DictContainingSequence arg);
|
||||||
DictContainingSequence receiveDictContainingSequence();
|
DictContainingSequence receiveDictContainingSequence();
|
||||||
|
void passVariadicDictionary(Dict... arg);
|
||||||
|
|
||||||
// EnforceRange/Clamp tests
|
// EnforceRange/Clamp tests
|
||||||
void dontEnforceRangeOrClamp(byte arg);
|
void dontEnforceRangeOrClamp(byte arg);
|
||||||
|
|
|
@ -550,6 +550,7 @@ interface TestExampleInterface {
|
||||||
void passDictContainingDict(optional DictContainingDict arg);
|
void passDictContainingDict(optional DictContainingDict arg);
|
||||||
void passDictContainingSequence(optional DictContainingSequence arg);
|
void passDictContainingSequence(optional DictContainingSequence arg);
|
||||||
DictContainingSequence receiveDictContainingSequence();
|
DictContainingSequence receiveDictContainingSequence();
|
||||||
|
void passVariadicDictionary(Dict... arg);
|
||||||
|
|
||||||
// EnforceRange/Clamp tests
|
// EnforceRange/Clamp tests
|
||||||
void dontEnforceRangeOrClamp(byte arg);
|
void dontEnforceRangeOrClamp(byte arg);
|
||||||
|
|
|
@ -566,6 +566,7 @@ interface TestJSImplInterface {
|
||||||
void passDictContainingDict(optional DictContainingDict arg);
|
void passDictContainingDict(optional DictContainingDict arg);
|
||||||
void passDictContainingSequence(optional DictContainingSequence arg);
|
void passDictContainingSequence(optional DictContainingSequence arg);
|
||||||
DictContainingSequence receiveDictContainingSequence();
|
DictContainingSequence receiveDictContainingSequence();
|
||||||
|
void passVariadicDictionary(Dict... arg);
|
||||||
|
|
||||||
// EnforceRange/Clamp tests
|
// EnforceRange/Clamp tests
|
||||||
void dontEnforceRangeOrClamp(byte arg);
|
void dontEnforceRangeOrClamp(byte arg);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче