Skip to content

Commit

Permalink
servo: Merge #1909 - Pass Option<T> for optional primitive arguments …
Browse files Browse the repository at this point in the history
…without a default value (from Ms2ger:optional-defaults); r=jdm

...(fixes #1813).

Source-Repo: https://github.com/servo/servo
Source-Revision: ad826efd6d31a81033261b3e038c3e6c3c094629
  • Loading branch information
Ms2ger committed Mar 20, 2014
1 parent 0f2f24e commit 7762e1f
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 56 deletions.
15 changes: 6 additions & 9 deletions servo/src/components/script/dom/bindings/codegen/CodegenRust.py
Original file line number Diff line number Diff line change
Expand Up @@ -877,8 +877,6 @@ def getConversionCode(isOptional=False):
if not type.isPrimitive():
raise TypeError("Need conversion for argument type '%s'" % str(type))

typeName = builtinNames[type.tag()]

conversionBehavior = "eDefault"
if isEnforceRange:
conversionBehavior = "eEnforceRange"
Expand All @@ -898,10 +896,12 @@ def getConversionCode(isOptional=False):
" 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):
Expand All @@ -925,10 +925,7 @@ def getConversionCode(isOptional=False):
" ${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):
Expand Down
2 changes: 1 addition & 1 deletion servo/src/components/script/dom/blob.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
45 changes: 22 additions & 23 deletions servo/src/components/script/dom/testbinding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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>>>) {}

Expand Down
45 changes: 22 additions & 23 deletions servo/src/components/script/dom/webidls/TestBinding.webidl
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down

0 comments on commit 7762e1f

Please sign in to comment.