servo: Merge #1909 - Pass Option<T> for optional primitive arguments without a default value (from Ms2ger:optional-defaults); r=jdm

...(fixes #1813).

Source-Repo: https://github.com/servo/servo
Source-Revision: ad826efd6d31a81033261b3e038c3e6c3c094629
This commit is contained in:
Ms2ger 2014-03-19 23:55:40 -04:00
Родитель 0f2f24e380
Коммит 7762e1fe18
4 изменённых файлов: 51 добавлений и 56 удалений

Просмотреть файл

@ -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):

Просмотреть файл

@ -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)
}

Просмотреть файл

@ -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>>>) {}

Просмотреть файл

@ -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);