mirror of
https://github.com/servo/servo.git
synced 2025-07-31 03:00:29 +01:00
Auto merge of #7230 - nox:required-dictionary-member, r=Ms2ger
Support required dictionary members (fixes #7216) <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7230) <!-- Reviewable:end -->
This commit is contained in:
commit
ef98e57429
4 changed files with 1181 additions and 450 deletions
|
@ -918,7 +918,8 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
|
||||||
assert not type.treatNonObjectAsNull() or type.nullable()
|
assert not type.treatNonObjectAsNull() or type.nullable()
|
||||||
assert not type.treatNonObjectAsNull() or not type.treatNonCallableAsNull()
|
assert not type.treatNonObjectAsNull() or not type.treatNonCallableAsNull()
|
||||||
|
|
||||||
declType = CGGeneric('%s::%s' % (type.unroll().module(), type.unroll().identifier.name))
|
callback = type.unroll().callback
|
||||||
|
declType = CGGeneric('%s::%s' % (callback.module(), callback.identifier.name))
|
||||||
finalDeclType = CGTemplatedType("Rc", declType)
|
finalDeclType = CGTemplatedType("Rc", declType)
|
||||||
|
|
||||||
conversion = CGCallbackTempRoot(declType.define())
|
conversion = CGCallbackTempRoot(declType.define())
|
||||||
|
@ -1285,8 +1286,8 @@ def getRetvalDeclarationForType(returnType, descriptorProvider):
|
||||||
result = CGWrapper(result, pre="Option<", post=">")
|
result = CGWrapper(result, pre="Option<", post=">")
|
||||||
return result
|
return result
|
||||||
if returnType.isCallback():
|
if returnType.isCallback():
|
||||||
result = CGGeneric('Rc<%s::%s>' % (returnType.unroll().module(),
|
callback = returnType.unroll().callback
|
||||||
returnType.unroll().identifier.name))
|
result = CGGeneric('Rc<%s::%s>' % (callback.module(), callback.identifier.name))
|
||||||
if returnType.nullable():
|
if returnType.nullable():
|
||||||
result = CGWrapper(result, pre="Option<", post=">")
|
result = CGWrapper(result, pre="Option<", post=">")
|
||||||
return result
|
return result
|
||||||
|
@ -4798,7 +4799,7 @@ class CGDictionary(CGThing):
|
||||||
def getMemberType(self, memberInfo):
|
def getMemberType(self, memberInfo):
|
||||||
member, info = memberInfo
|
member, info = memberInfo
|
||||||
declType = info.declType
|
declType = info.declType
|
||||||
if not member.defaultValue:
|
if member.optional and not member.defaultValue:
|
||||||
declType = CGWrapper(info.declType, pre="Option<", post=">")
|
declType = CGWrapper(info.declType, pre="Option<", post=">")
|
||||||
return declType.define()
|
return declType.define()
|
||||||
|
|
||||||
|
@ -4815,7 +4816,11 @@ class CGDictionary(CGThing):
|
||||||
conversion = "%s.get()" % conversion
|
conversion = "%s.get()" % conversion
|
||||||
|
|
||||||
assert (member.defaultValue is None) == (default is None)
|
assert (member.defaultValue is None) == (default is None)
|
||||||
if not default:
|
if not member.optional:
|
||||||
|
assert default is None
|
||||||
|
default = ("throw_type_error(cx, \"Missing required member \\\"%s\\\".\");\n"
|
||||||
|
"return Err(());") % member.identifier.name
|
||||||
|
elif not default:
|
||||||
default = "None"
|
default = "None"
|
||||||
conversion = "Some(%s)" % conversion
|
conversion = "Some(%s)" % conversion
|
||||||
|
|
||||||
|
@ -4935,7 +4940,7 @@ class CGBindingRoot(CGThing):
|
||||||
|
|
||||||
# Do codegen for all the callback interfaces.
|
# Do codegen for all the callback interfaces.
|
||||||
cgthings.extend(CGList([CGCallbackInterface(x),
|
cgthings.extend(CGList([CGCallbackInterface(x),
|
||||||
CGCallbackFunctionImpl(x)], "\n")
|
CGCallbackFunctionImpl(x.interface)], "\n")
|
||||||
for x in callbackDescriptors)
|
for x in callbackDescriptors)
|
||||||
|
|
||||||
# And make sure we have the right number of newlines at the end
|
# And make sure we have the right number of newlines at the end
|
||||||
|
@ -5258,7 +5263,7 @@ impl ToJSValConvertible for ${type} {
|
||||||
self.callback().to_jsval(cx, rval);
|
self.callback().to_jsval(cx, rval);
|
||||||
}
|
}
|
||||||
}\
|
}\
|
||||||
""").substitute({"type": callback.name})
|
""").substitute({"type": callback.identifier.name})
|
||||||
CGGeneric.__init__(self, impl)
|
CGGeneric.__init__(self, impl)
|
||||||
|
|
||||||
|
|
||||||
|
@ -5687,7 +5692,7 @@ class GlobalGenRoots():
|
||||||
def Bindings(config):
|
def Bindings(config):
|
||||||
|
|
||||||
descriptors = (set(d.name + "Binding" for d in config.getDescriptors(register=True)) |
|
descriptors = (set(d.name + "Binding" for d in config.getDescriptors(register=True)) |
|
||||||
set(d.unroll().module() for d in config.callbacks) |
|
set(d.module() for d in config.callbacks) |
|
||||||
set(d.module() for d in config.getDictionaries()))
|
set(d.module() for d in config.getDictionaries()))
|
||||||
curr = CGList([CGGeneric("pub mod %s;\n" % name) for name in sorted(descriptors)])
|
curr = CGList([CGGeneric("pub mod %s;\n" % name) for name in sorted(descriptors)])
|
||||||
curr = CGWrapper(curr, pre=AUTOGENERATED_WARNING_COMMENT)
|
curr = CGWrapper(curr, pre=AUTOGENERATED_WARNING_COMMENT)
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -7,8 +7,17 @@
|
||||||
|
|
||||||
callback BrowserElementNextPaintEventCallback = void ();
|
callback BrowserElementNextPaintEventCallback = void ();
|
||||||
|
|
||||||
|
//enum BrowserFindCaseSensitivity { "case-sensitive", "case-insensitive" };
|
||||||
|
//enum BrowserFindDirection { "forward", "backward" };
|
||||||
|
|
||||||
//dictionary BrowserElementDownloadOptions {
|
//dictionary BrowserElementDownloadOptions {
|
||||||
// DOMString? filename;
|
// DOMString? filename;
|
||||||
|
// DOMString? referrer;
|
||||||
|
//};
|
||||||
|
|
||||||
|
//dictionary BrowserElementExecuteScriptOptions {
|
||||||
|
// DOMString? url;
|
||||||
|
// DOMString? origin;
|
||||||
//};
|
//};
|
||||||
|
|
||||||
[NoInterfaceObject]
|
[NoInterfaceObject]
|
||||||
|
@ -22,22 +31,32 @@ BrowserElement implements BrowserElementPrivileged;
|
||||||
interface BrowserElementCommon {
|
interface BrowserElementCommon {
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser embed-widgets"]
|
// CheckAnyPermissions="browser embed-widgets"]
|
||||||
//void setVisible(boolean visible);
|
//void setVisible(boolean visible);
|
||||||
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser embed-widgets"]
|
// CheckAnyPermissions="browser embed-widgets"]
|
||||||
//DOMRequest getVisible();
|
//DOMRequest getVisible();
|
||||||
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser embed-widgets"]
|
// CheckAnyPermissions="browser embed-widgets"]
|
||||||
|
//void setActive(boolean active);
|
||||||
|
|
||||||
|
//[Throws,
|
||||||
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
// CheckAnyPermissions="browser embed-widgets"]
|
||||||
|
//boolean getActive();
|
||||||
|
|
||||||
|
//[Throws,
|
||||||
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
// CheckAnyPermissions="browser embed-widgets"]
|
||||||
//void addNextPaintListener(BrowserElementNextPaintEventCallback listener);
|
//void addNextPaintListener(BrowserElementNextPaintEventCallback listener);
|
||||||
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser embed-widgets"]
|
// CheckAnyPermissions="browser embed-widgets"]
|
||||||
//void removeNextPaintListener(BrowserElementNextPaintEventCallback listener);
|
//void removeNextPaintListener(BrowserElementNextPaintEventCallback listener);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -45,7 +64,7 @@ interface BrowserElementCommon {
|
||||||
interface BrowserElementPrivileged {
|
interface BrowserElementPrivileged {
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser"]
|
// CheckAnyPermissions="browser"]
|
||||||
//void sendMouseEvent(DOMString type,
|
//void sendMouseEvent(DOMString type,
|
||||||
// unsigned long x,
|
// unsigned long x,
|
||||||
// unsigned long y,
|
// unsigned long y,
|
||||||
|
@ -56,7 +75,7 @@ interface BrowserElementPrivileged {
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// Func="TouchEvent::PrefEnabled",
|
// Func="TouchEvent::PrefEnabled",
|
||||||
// CheckPermissions="browser"]
|
// CheckAnyPermissions="browser"]
|
||||||
//void sendTouchEvent(DOMString type,
|
//void sendTouchEvent(DOMString type,
|
||||||
// sequence<unsigned long> identifiers,
|
// sequence<unsigned long> identifiers,
|
||||||
// sequence<long> x,
|
// sequence<long> x,
|
||||||
|
@ -70,70 +89,91 @@ interface BrowserElementPrivileged {
|
||||||
|
|
||||||
[Throws,
|
[Throws,
|
||||||
Pref="dom.mozBrowserFramesEnabled",
|
Pref="dom.mozBrowserFramesEnabled",
|
||||||
CheckPermissions="browser"]
|
CheckAnyPermissions="browser"]
|
||||||
void goBack();
|
void goBack();
|
||||||
|
|
||||||
[Throws,
|
[Throws,
|
||||||
Pref="dom.mozBrowserFramesEnabled",
|
Pref="dom.mozBrowserFramesEnabled",
|
||||||
CheckPermissions="browser"]
|
CheckAnyPermissions="browser"]
|
||||||
void goForward();
|
void goForward();
|
||||||
|
|
||||||
[Throws,
|
[Throws,
|
||||||
Pref="dom.mozBrowserFramesEnabled",
|
Pref="dom.mozBrowserFramesEnabled",
|
||||||
CheckPermissions="browser"]
|
CheckAnyPermissions="browser"]
|
||||||
void reload(optional boolean hardReload = false);
|
void reload(optional boolean hardReload = false);
|
||||||
|
|
||||||
[Throws,
|
[Throws,
|
||||||
Pref="dom.mozBrowserFramesEnabled",
|
Pref="dom.mozBrowserFramesEnabled",
|
||||||
CheckPermissions="browser"]
|
CheckAnyPermissions="browser"]
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser"]
|
// CheckAnyPermissions="browser"]
|
||||||
//DOMRequest download(DOMString url,
|
//DOMRequest download(DOMString url,
|
||||||
// optional BrowserElementDownloadOptions options);
|
// optional BrowserElementDownloadOptions options);
|
||||||
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser"]
|
// CheckAnyPermissions="browser"]
|
||||||
//DOMRequest purgeHistory();
|
//DOMRequest purgeHistory();
|
||||||
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser"]
|
// CheckAnyPermissions="browser"]
|
||||||
//DOMRequest getScreenshot([EnforceRange] unsigned long width,
|
//DOMRequest getScreenshot([EnforceRange] unsigned long width,
|
||||||
// [EnforceRange] unsigned long height,
|
// [EnforceRange] unsigned long height,
|
||||||
// optional DOMString mimeType="");
|
// optional DOMString mimeType="");
|
||||||
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser"]
|
// CheckAnyPermissions="browser"]
|
||||||
//void zoom(float zoom);
|
//void zoom(float zoom);
|
||||||
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser"]
|
// CheckAnyPermissions="browser"]
|
||||||
//DOMRequest getCanGoBack();
|
//DOMRequest getCanGoBack();
|
||||||
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser"]
|
// CheckAnyPermissions="browser"]
|
||||||
//DOMRequest getCanGoForward();
|
//DOMRequest getCanGoForward();
|
||||||
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser"]
|
// CheckAnyPermissions="browser"]
|
||||||
//DOMRequest getContentDimensions();
|
//DOMRequest getContentDimensions();
|
||||||
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser"]
|
// CheckAllPermissions="browser input-manage"]
|
||||||
//DOMRequest setInputMethodActive(boolean isActive);
|
//DOMRequest setInputMethodActive(boolean isActive);
|
||||||
|
|
||||||
// Additional |nfc-manager| permission is required for setNFCFocus API
|
|
||||||
//[Throws,
|
//[Throws,
|
||||||
// Pref="dom.mozBrowserFramesEnabled",
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
// CheckPermissions="browser"]
|
// CheckAllPermissions="browser nfc-manager"]
|
||||||
//void setNFCFocus(boolean isFocus);
|
//void setNFCFocus(boolean isFocus);
|
||||||
|
|
||||||
|
//[Throws,
|
||||||
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
// CheckAnyPermissions="browser"]
|
||||||
|
//void findAll(DOMString searchString, BrowserFindCaseSensitivity caseSensitivity);
|
||||||
|
|
||||||
|
//[Throws,
|
||||||
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
// CheckAnyPermissions="browser"]
|
||||||
|
//void findNext(BrowserFindDirection direction);
|
||||||
|
|
||||||
|
//[Throws,
|
||||||
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
// CheckAnyPermissions="browser"]
|
||||||
|
//void clearMatch();
|
||||||
|
|
||||||
|
//[Throws,
|
||||||
|
// Pref="dom.mozBrowserFramesEnabled",
|
||||||
|
// CheckAllPermissions="browser browser:universalxss"]
|
||||||
|
//DOMRequest executeScript(DOMString script,
|
||||||
|
// optional BrowserElementExecuteScriptOptions options);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
enum TestEnum { "", "foo", "bar" };
|
enum TestEnum { "", "foo", "bar" };
|
||||||
|
|
||||||
dictionary TestDictionary {
|
dictionary TestDictionary {
|
||||||
|
required boolean requiredValue;
|
||||||
boolean booleanValue;
|
boolean booleanValue;
|
||||||
byte byteValue;
|
byte byteValue;
|
||||||
octet octetValue;
|
octet octetValue;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue