aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-04-07 13:32:02 -0500
committerbors-servo <metajack+bors@gmail.com>2015-04-07 13:32:02 -0500
commit3fb666cf606f835a9ab9165339e34023ab83a358 (patch)
tree79c37b585a4f80cc57a09a61c01414317d04a766 /components/script/dom/bindings/codegen
parentc7e210f24c97be1057a652b3644332e7043bfeac (diff)
parent5570bc3798d422b847766d1dd2b17dbe24e1a933 (diff)
downloadservo-3fb666cf606f835a9ab9165339e34023ab83a358.tar.gz
servo-3fb666cf606f835a9ab9165339e34023ab83a358.zip
Auto merge of #5569 - Ms2ger:object, r=jdm
Diffstat (limited to 'components/script/dom/bindings/codegen')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py24
1 files changed, 17 insertions, 7 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 65cdeb2db99..faa1d5698fc 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -582,7 +582,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
# A helper function for wrapping up the template body for
# possibly-nullable objecty stuff
- def wrapObjectTemplate(templateBody, isDefinitelyObject, type,
+ def wrapObjectTemplate(templateBody, nullValue, isDefinitelyObject, type,
failureCode=None):
if not isDefinitelyObject:
# Handle the non-object cases by wrapping up the whole
@@ -593,7 +593,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
if type.nullable():
templateBody += (
"} else if (${val}).is_null_or_undefined() {\n"
- " None\n")
+ " %s\n") % nullValue
templateBody += (
"} else {\n" +
CGIndenter(onFailureNotAnObject(failureCode)).define() +
@@ -632,8 +632,9 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
template = "%s::new((${val}).to_object())" % name
if type.nullable():
declType = CGWrapper(declType, pre="Option<", post=">")
- template = wrapObjectTemplate("Some(%s)" % template, isDefinitelyObject, type,
- failureCode)
+ template = wrapObjectTemplate("Some(%s)" % template, "None",
+ isDefinitelyObject, type,
+ failureCode)
return handleOptional(template, declType, handleDefaultNull("None"))
@@ -675,8 +676,8 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
if isMember:
templateBody += ".root()"
- templateBody = wrapObjectTemplate(templateBody, isDefinitelyObject,
- type, failureCode)
+ templateBody = wrapObjectTemplate(templateBody, "None",
+ isDefinitelyObject, type, failureCode)
return handleOptional(templateBody, declType, handleDefaultNull("None"))
@@ -821,6 +822,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
onFailureNotCallable(failureCode)).define()
template = wrapObjectTemplate(
template,
+ "None",
isDefinitelyObject,
type,
failureCode)
@@ -853,7 +855,15 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
return handleOptional("${val}", declType, default)
if type.isObject():
- raise TypeError("Can't handle object arguments yet")
+ assert not isEnforceRange and not isClamp
+
+ declType = CGGeneric("*mut JSObject")
+ templateBody = wrapObjectTemplate("${val}.to_object()",
+ "ptr::null_mut()",
+ isDefinitelyObject, type, failureCode)
+
+ return handleOptional(templateBody, declType,
+ handleDefaultNull("ptr::null_mut()"))
if type.isDictionary():
if failureCode is not None: