diff options
author | Ms2ger <ms2ger@gmail.com> | 2014-03-12 10:03:44 +0100 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2014-03-19 19:05:59 +0100 |
commit | 59bcabb75ec7f6a62d957cca5dcbf065492bb0e6 (patch) | |
tree | 959bb3b45078129dcccf075a1fe8cd1da1f000c9 /src | |
parent | a6100563a6e43471ae43fb155113bc2026992f78 (diff) | |
download | servo-59bcabb75ec7f6a62d957cca5dcbf065492bb0e6.tar.gz servo-59bcabb75ec7f6a62d957cca5dcbf065492bb0e6.zip |
Pass Option<T> for optional primitive arguments without a default value (fixes #1813).
Diffstat (limited to 'src')
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 15 | ||||
-rw-r--r-- | src/components/script/dom/blob.rs | 2 | ||||
-rw-r--r-- | src/components/script/dom/testbinding.rs | 45 | ||||
-rw-r--r-- | src/components/script/dom/webidls/TestBinding.webidl | 45 |
4 files changed, 51 insertions, 56 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index d06bfb0bc31..43d31b68914 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/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/src/components/script/dom/blob.rs b/src/components/script/dom/blob.rs index f1c4f677cf3..df665bc6d47 100644 --- a/src/components/script/dom/blob.rs +++ b/src/components/script/dom/blob.rs @@ -43,7 +43,7 @@ impl Blob { ~"" } - pub fn Slice(&self, _start: i64, _end: i64, _contentType: Option<DOMString>) -> JS<Blob> { + pub fn Slice(&self, _start: Option<i64>, _end: Option<i64>, _contentType: Option<DOMString>) -> JS<Blob> { Blob::new(&self.window) } diff --git a/src/components/script/dom/testbinding.rs b/src/components/script/dom/testbinding.rs index 514260c5c10..4dd9f190b03 100644 --- a/src/components/script/dom/testbinding.rs +++ b/src/components/script/dom/testbinding.rs @@ -74,33 +74,32 @@ impl TestBinding { pub fn GetInterfaceAttributeNullable(&self) -> Option<JS<Blob>> { Some(Blob::new(&self.window)) } pub fn SetInterfaceAttributeNullable(&self, _: Option<JS<Blob>>) {} - // FIXME (issue #1813) Doesn't currently compile. - // pub fn PassOptionalBoolean(&self, _: Option<bool>) {} - // pub fn PassOptionalByte(&self, _: Option<i8>) {} - // pub fn PassOptionalOctet(&self, _: Option<u8>) {} - // pub fn PassOptionalShort(&self, _: Option<i16>) {} - // pub fn PassOptionalUnsignedShort(&self, _: Option<u16>) {} - // pub fn PassOptionalLong(&self, _: Option<i32>) {} - // pub fn PassOptionalUnsignedLong(&self, _: Option<u32>) {} - // pub fn PassOptionalLongLong(&self, _: Option<i64>) {} - // pub fn PassOptionalUnsignedLongLong(&self, _: Option<u64>) {} - // pub fn PassOptionalFloat(&self, _: Option<f32>) {} - // pub fn PassOptionalDouble(&self, _: Option<f64>) {} + pub fn PassOptionalBoolean(&self, _: Option<bool>) {} + pub fn PassOptionalByte(&self, _: Option<i8>) {} + pub fn PassOptionalOctet(&self, _: Option<u8>) {} + pub fn PassOptionalShort(&self, _: Option<i16>) {} + pub fn PassOptionalUnsignedShort(&self, _: Option<u16>) {} + pub fn PassOptionalLong(&self, _: Option<i32>) {} + pub fn PassOptionalUnsignedLong(&self, _: Option<u32>) {} + pub fn PassOptionalLongLong(&self, _: Option<i64>) {} + pub fn PassOptionalUnsignedLongLong(&self, _: Option<u64>) {} + pub fn PassOptionalFloat(&self, _: Option<f32>) {} + pub fn PassOptionalDouble(&self, _: Option<f64>) {} pub fn PassOptionalString(&self, _: Option<DOMString>) {} pub fn PassOptionalInterface(&self, _: Option<JS<Blob>>) {} pub fn PassOptionalAny(&self, _: *JSContext, _: Option<JSVal>) {} - // pub fn PassOptionalNullableBoolean(&self, _: Option<Option<bool>>) {} - // pub fn PassOptionalNullableByte(&self, _: Option<Option<i8>>) {} - // pub fn PassOptionalNullableOctet(&self, _: Option<Option<u8>>) {} - // pub fn PassOptionalNullableShort(&self, _: Option<Option<i16>>) {} - // pub fn PassOptionalNullableUnsignedShort(&self, _: Option<Option<u16>>) {} - // pub fn PassOptionalNullableLong(&self, _: Option<Option<i32>>) {} - // pub fn PassOptionalNullableUnsignedLong(&self, _: Option<Option<u32>>) {} - // pub fn PassOptionalNullableLongLong(&self, _: Option<Option<i64>>) {} - // pub fn PassOptionalNullableUnsignedLongLong(&self, _: Option<Option<u64>>) {} - // pub fn PassOptionalNullableFloat(&self, _: Option<Option<f32>>) {} - // pub fn PassOptionalNullableDouble(&self, _: Option<Option<f64>>) {} + pub fn PassOptionalNullableBoolean(&self, _: Option<Option<bool>>) {} + pub fn PassOptionalNullableByte(&self, _: Option<Option<i8>>) {} + pub fn PassOptionalNullableOctet(&self, _: Option<Option<u8>>) {} + pub fn PassOptionalNullableShort(&self, _: Option<Option<i16>>) {} + pub fn PassOptionalNullableUnsignedShort(&self, _: Option<Option<u16>>) {} + pub fn PassOptionalNullableLong(&self, _: Option<Option<i32>>) {} + pub fn PassOptionalNullableUnsignedLong(&self, _: Option<Option<u32>>) {} + pub fn PassOptionalNullableLongLong(&self, _: Option<Option<i64>>) {} + pub fn PassOptionalNullableUnsignedLongLong(&self, _: Option<Option<u64>>) {} + pub fn PassOptionalNullableFloat(&self, _: Option<Option<f32>>) {} + pub fn PassOptionalNullableDouble(&self, _: Option<Option<f64>>) {} pub fn PassOptionalNullableString(&self, _: Option<Option<DOMString>>) {} // pub fn PassOptionalNullableInterface(&self, _: Option<Option<JS<Blob>>>) {} diff --git a/src/components/script/dom/webidls/TestBinding.webidl b/src/components/script/dom/webidls/TestBinding.webidl index 3a967f5484a..1fd5f242456 100644 --- a/src/components/script/dom/webidls/TestBinding.webidl +++ b/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); |