aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-03-12 10:03:44 +0100
committerMs2ger <ms2ger@gmail.com>2014-03-19 19:05:59 +0100
commit59bcabb75ec7f6a62d957cca5dcbf065492bb0e6 (patch)
tree959bb3b45078129dcccf075a1fe8cd1da1f000c9 /src
parenta6100563a6e43471ae43fb155113bc2026992f78 (diff)
downloadservo-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.py15
-rw-r--r--src/components/script/dom/blob.rs2
-rw-r--r--src/components/script/dom/testbinding.rs45
-rw-r--r--src/components/script/dom/webidls/TestBinding.webidl45
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);