Bug 963321 part 2. Add codegen support for [Cached] dictionary attributes. r=khuey

This commit is contained in:
Boris Zbarsky 2014-02-05 13:38:16 -05:00
parent 8ad668ddf4
commit da001d4b79
5 changed files with 47 additions and 1 deletions

View File

@ -5245,7 +5245,7 @@ if (!${obj}) {
else:
preserveWrapper = ""
if self.idlNode.getExtendedAttribute("Frozen"):
assert self.idlNode.type.isSequence()
assert self.idlNode.type.isSequence() or self.idlNode.type.isDictionary()
freezeValue = CGGeneric(
"JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject());\n"
"if (!JS_FreezeObject(cx, rvalObj)) {\n"

View File

@ -603,6 +603,14 @@ public:
// Dictionary tests
void PassDictionary(JSContext*, const Dict&);
void GetReadonlyDictionary(JSContext*, Dict&);
void GetReadonlyNullableDictionary(JSContext*, Nullable<Dict>&);
void GetWritableDictionary(JSContext*, Dict&);
void SetWritableDictionary(JSContext*, const Dict&);
void GetReadonlyFrozenDictionary(JSContext*, Dict&);
void GetReadonlyFrozenNullableDictionary(JSContext*, Nullable<Dict>&);
void GetWritableFrozenDictionary(JSContext*, Dict&);
void SetWritableFrozenDictionary(JSContext*, const Dict&);
void ReceiveDictionary(JSContext*, Dict&);
void ReceiveNullableDictionary(JSContext*, Nullable<Dict>&);
void PassOtherDictionary(const GrandparentDict&);

View File

@ -549,6 +549,18 @@ interface TestInterface {
attribute byte attributeRenamedFrom;
void passDictionary(optional Dict x);
[Cached, Pure]
readonly attribute Dict readonlyDictionary;
[Cached, Pure]
readonly attribute Dict? readonlyNullableDictionary;
[Cached, Pure]
attribute Dict writableDictionary;
[Cached, Pure, Frozen]
readonly attribute Dict readonlyFrozenDictionary;
[Cached, Pure, Frozen]
readonly attribute Dict? readonlyFrozenNullableDictionary;
[Cached, Pure, Frozen]
attribute Dict writableFrozenDictionary;
Dict receiveDictionary();
Dict? receiveNullableDictionary();
void passOtherDictionary(optional GrandparentDict x);

View File

@ -445,6 +445,18 @@ interface TestExampleInterface {
attribute byte attributeRenamedFrom;
void passDictionary(optional Dict x);
[Cached, Pure]
readonly attribute Dict readonlyDictionary;
[Cached, Pure]
readonly attribute Dict? readonlyNullableDictionary;
[Cached, Pure]
attribute Dict writableDictionary;
[Cached, Pure, Frozen]
readonly attribute Dict readonlyFrozenDictionary;
[Cached, Pure, Frozen]
readonly attribute Dict? readonlyFrozenNullableDictionary;
[Cached, Pure, Frozen]
attribute Dict writableFrozenDictionary;
Dict receiveDictionary();
Dict? receiveNullableDictionary();
void passOtherDictionary(optional GrandparentDict x);

View File

@ -467,6 +467,20 @@ interface TestJSImplInterface {
attribute byte attributeRenamedFrom;
void passDictionary(optional Dict x);
[Cached, Pure]
readonly attribute Dict readonlyDictionary;
// No support for nullable dictionary return values here yet
// [Cached, Pure]
// readonly attribute Dict? readonlyNullableDictionary;
[Cached, Pure]
attribute Dict writableDictionary;
[Cached, Pure, Frozen]
readonly attribute Dict readonlyFrozenDictionary;
// No support for nullable dictionary return values here yet
// [Cached, Pure, Frozen]
// readonly attribute Dict? readonlyFrozenNullableDictionary;
[Cached, Pure, Frozen]
attribute Dict writableFrozenDictionary;
Dict receiveDictionary();
// No support for nullable dictionary return values here yet
// Dict? receiveNullableDictionary();