diff --git a/servo/src/components/script/dom/bindings/codegen/CodegenRust.py b/servo/src/components/script/dom/bindings/codegen/CodegenRust.py index cb9dd7036049..a14358d99c68 100644 --- a/servo/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/servo/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -877,8 +877,6 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, if not type.isPrimitive(): raise TypeError("Need conversion for argument type '%s'" % str(type)) - typeName = builtinNames[type.tag()] - conversionBehavior = "eDefault" if isEnforceRange: conversionBehavior = "eEnforceRange" @@ -898,10 +896,12 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, " Err(_) => { %s }\n" "}" % (successVal, exceptionCode)) + declType = CGGeneric(builtinNames[type.tag()]) if type.nullable(): - declType = CGGeneric("Option<" + typeName + ">") - else: - declType = CGGeneric(typeName) + declType = CGWrapper(declType, pre="Option<", post=">") + + if isOptional: + declType = CGWrapper(declType, pre="Option<", post=">") if defaultValue is not None: if isinstance(defaultValue, IDLNullValue): @@ -925,10 +925,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, " ${declName} = %s;\n" "}" % defaultStr)).define() - initialVal = "false" if typeName == "bool" else ("0 as %s" % typeName) - if type.nullable(): - initialVal = "Some(%s)" % initialVal - return (template, declType, None, isOptional, initialVal) + return (template, declType, None, isOptional, "None" if isOptional else None) def instantiateJSToNativeConversionTemplate(templateTuple, replacements, argcAndIndex=None): diff --git a/servo/src/components/script/dom/blob.rs b/servo/src/components/script/dom/blob.rs index f1c4f677cf3d..df665bc6d47e 100644 --- a/servo/src/components/script/dom/blob.rs +++ b/servo/src/components/script/dom/blob.rs @@ -43,7 +43,7 @@ impl Blob { ~"" } - pub fn Slice(&self, _start: i64, _end: i64, _contentType: Option) -> JS { + pub fn Slice(&self, _start: Option, _end: Option, _contentType: Option) -> JS { Blob::new(&self.window) } diff --git a/servo/src/components/script/dom/testbinding.rs b/servo/src/components/script/dom/testbinding.rs index 514260c5c10c..4dd9f190b03e 100644 --- a/servo/src/components/script/dom/testbinding.rs +++ b/servo/src/components/script/dom/testbinding.rs @@ -74,33 +74,32 @@ impl TestBinding { pub fn GetInterfaceAttributeNullable(&self) -> Option> { Some(Blob::new(&self.window)) } pub fn SetInterfaceAttributeNullable(&self, _: Option>) {} - // FIXME (issue #1813) Doesn't currently compile. - // pub fn PassOptionalBoolean(&self, _: Option) {} - // pub fn PassOptionalByte(&self, _: Option) {} - // pub fn PassOptionalOctet(&self, _: Option) {} - // pub fn PassOptionalShort(&self, _: Option) {} - // pub fn PassOptionalUnsignedShort(&self, _: Option) {} - // pub fn PassOptionalLong(&self, _: Option) {} - // pub fn PassOptionalUnsignedLong(&self, _: Option) {} - // pub fn PassOptionalLongLong(&self, _: Option) {} - // pub fn PassOptionalUnsignedLongLong(&self, _: Option) {} - // pub fn PassOptionalFloat(&self, _: Option) {} - // pub fn PassOptionalDouble(&self, _: Option) {} + pub fn PassOptionalBoolean(&self, _: Option) {} + pub fn PassOptionalByte(&self, _: Option) {} + pub fn PassOptionalOctet(&self, _: Option) {} + pub fn PassOptionalShort(&self, _: Option) {} + pub fn PassOptionalUnsignedShort(&self, _: Option) {} + pub fn PassOptionalLong(&self, _: Option) {} + pub fn PassOptionalUnsignedLong(&self, _: Option) {} + pub fn PassOptionalLongLong(&self, _: Option) {} + pub fn PassOptionalUnsignedLongLong(&self, _: Option) {} + pub fn PassOptionalFloat(&self, _: Option) {} + pub fn PassOptionalDouble(&self, _: Option) {} pub fn PassOptionalString(&self, _: Option) {} pub fn PassOptionalInterface(&self, _: Option>) {} pub fn PassOptionalAny(&self, _: *JSContext, _: Option) {} - // pub fn PassOptionalNullableBoolean(&self, _: Option>) {} - // pub fn PassOptionalNullableByte(&self, _: Option>) {} - // pub fn PassOptionalNullableOctet(&self, _: Option>) {} - // pub fn PassOptionalNullableShort(&self, _: Option>) {} - // pub fn PassOptionalNullableUnsignedShort(&self, _: Option>) {} - // pub fn PassOptionalNullableLong(&self, _: Option>) {} - // pub fn PassOptionalNullableUnsignedLong(&self, _: Option>) {} - // pub fn PassOptionalNullableLongLong(&self, _: Option>) {} - // pub fn PassOptionalNullableUnsignedLongLong(&self, _: Option>) {} - // pub fn PassOptionalNullableFloat(&self, _: Option>) {} - // pub fn PassOptionalNullableDouble(&self, _: Option>) {} + pub fn PassOptionalNullableBoolean(&self, _: Option>) {} + pub fn PassOptionalNullableByte(&self, _: Option>) {} + pub fn PassOptionalNullableOctet(&self, _: Option>) {} + pub fn PassOptionalNullableShort(&self, _: Option>) {} + pub fn PassOptionalNullableUnsignedShort(&self, _: Option>) {} + pub fn PassOptionalNullableLong(&self, _: Option>) {} + pub fn PassOptionalNullableUnsignedLong(&self, _: Option>) {} + pub fn PassOptionalNullableLongLong(&self, _: Option>) {} + pub fn PassOptionalNullableUnsignedLongLong(&self, _: Option>) {} + pub fn PassOptionalNullableFloat(&self, _: Option>) {} + pub fn PassOptionalNullableDouble(&self, _: Option>) {} pub fn PassOptionalNullableString(&self, _: Option>) {} // pub fn PassOptionalNullableInterface(&self, _: Option>>) {} diff --git a/servo/src/components/script/dom/webidls/TestBinding.webidl b/servo/src/components/script/dom/webidls/TestBinding.webidl index 3a967f5484a4..1fd5f2424561 100644 --- a/servo/src/components/script/dom/webidls/TestBinding.webidl +++ b/servo/src/components/script/dom/webidls/TestBinding.webidl @@ -32,33 +32,32 @@ interface TestBinding { attribute DOMString? stringAttributeNullable; attribute Blob? interfaceAttributeNullable; - // FIXME (issue #1813) Doesn't currently compile. - // void passOptionalBoolean(optional boolean arg); - // void passOptionalByte(optional byte arg); - // void passOptionalOctet(optional octet arg); - // void passOptionalShort(optional short arg); - // void passOptionalUnsignedShort(optional unsigned short arg); - // void passOptionalLong(optional long arg); - // void passOptionalUnsignedLong(optional unsigned long arg); - // void passOptionalLongLong(optional long long arg); - // void passOptionalUnsignedLongLong(optional unsigned long long arg); - // void passOptionalFloat(optional float arg); - // void passOptionalDouble(optional double arg); + void passOptionalBoolean(optional boolean arg); + void passOptionalByte(optional byte arg); + void passOptionalOctet(optional octet arg); + void passOptionalShort(optional short arg); + void passOptionalUnsignedShort(optional unsigned short arg); + void passOptionalLong(optional long arg); + void passOptionalUnsignedLong(optional unsigned long arg); + void passOptionalLongLong(optional long long arg); + void passOptionalUnsignedLongLong(optional unsigned long long arg); + void passOptionalFloat(optional float arg); + void passOptionalDouble(optional double arg); void passOptionalString(optional DOMString arg); void passOptionalInterface(optional Blob arg); void passOptionalAny(optional any arg); - // void passOptionalNullableBoolean(optional boolean? arg); - // void passOptionalNullableByte(optional byte? arg); - // void passOptionalNullableOctet(optional octet? arg); - // void passOptionalNullableShort(optional short? arg); - // void passOptionalNullableUnsignedShort(optional unsigned short? arg); - // void passOptionalNullableLong(optional long? arg); - // void passOptionalNullableUnsignedLong(optional unsigned long? arg); - // void passOptionalNullableLongLong(optional long long? arg); - // void passOptionalNullableUnsignedLongLong(optional unsigned long long? arg); - // void passOptionalNullableFloat(optional float? arg); - // void passOptionalNullableDouble(optional double? arg); + void passOptionalNullableBoolean(optional boolean? arg); + void passOptionalNullableByte(optional byte? arg); + void passOptionalNullableOctet(optional octet? arg); + void passOptionalNullableShort(optional short? arg); + void passOptionalNullableUnsignedShort(optional unsigned short? arg); + void passOptionalNullableLong(optional long? arg); + void passOptionalNullableUnsignedLong(optional unsigned long? arg); + void passOptionalNullableLongLong(optional long long? arg); + void passOptionalNullableUnsignedLongLong(optional unsigned long long? arg); + void passOptionalNullableFloat(optional float? arg); + void passOptionalNullableDouble(optional double? arg); void passOptionalNullableString(optional DOMString? arg); // void passOptionalNullableInterface(optional Blob? arg);