mirror of
https://github.com/servo/servo.git
synced 2025-06-15 11:54:28 +00:00
Pass Option<T> for optional primitive arguments without a default value (fixes #1813).
This commit is contained in:
parent
a6100563a6
commit
59bcabb75e
4 changed files with 51 additions and 56 deletions
|
@ -877,8 +877,6 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None,
|
||||||
if not type.isPrimitive():
|
if not type.isPrimitive():
|
||||||
raise TypeError("Need conversion for argument type '%s'" % str(type))
|
raise TypeError("Need conversion for argument type '%s'" % str(type))
|
||||||
|
|
||||||
typeName = builtinNames[type.tag()]
|
|
||||||
|
|
||||||
conversionBehavior = "eDefault"
|
conversionBehavior = "eDefault"
|
||||||
if isEnforceRange:
|
if isEnforceRange:
|
||||||
conversionBehavior = "eEnforceRange"
|
conversionBehavior = "eEnforceRange"
|
||||||
|
@ -898,10 +896,12 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None,
|
||||||
" Err(_) => { %s }\n"
|
" Err(_) => { %s }\n"
|
||||||
"}" % (successVal, exceptionCode))
|
"}" % (successVal, exceptionCode))
|
||||||
|
|
||||||
|
declType = CGGeneric(builtinNames[type.tag()])
|
||||||
if type.nullable():
|
if type.nullable():
|
||||||
declType = CGGeneric("Option<" + typeName + ">")
|
declType = CGWrapper(declType, pre="Option<", post=">")
|
||||||
else:
|
|
||||||
declType = CGGeneric(typeName)
|
if isOptional:
|
||||||
|
declType = CGWrapper(declType, pre="Option<", post=">")
|
||||||
|
|
||||||
if defaultValue is not None:
|
if defaultValue is not None:
|
||||||
if isinstance(defaultValue, IDLNullValue):
|
if isinstance(defaultValue, IDLNullValue):
|
||||||
|
@ -925,10 +925,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None,
|
||||||
" ${declName} = %s;\n"
|
" ${declName} = %s;\n"
|
||||||
"}" % defaultStr)).define()
|
"}" % defaultStr)).define()
|
||||||
|
|
||||||
initialVal = "false" if typeName == "bool" else ("0 as %s" % typeName)
|
return (template, declType, None, isOptional, "None" if isOptional else None)
|
||||||
if type.nullable():
|
|
||||||
initialVal = "Some(%s)" % initialVal
|
|
||||||
return (template, declType, None, isOptional, initialVal)
|
|
||||||
|
|
||||||
def instantiateJSToNativeConversionTemplate(templateTuple, replacements,
|
def instantiateJSToNativeConversionTemplate(templateTuple, replacements,
|
||||||
argcAndIndex=None):
|
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)
|
Blob::new(&self.window)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,33 +74,32 @@ impl TestBinding {
|
||||||
pub fn GetInterfaceAttributeNullable(&self) -> Option<JS<Blob>> { Some(Blob::new(&self.window)) }
|
pub fn GetInterfaceAttributeNullable(&self) -> Option<JS<Blob>> { Some(Blob::new(&self.window)) }
|
||||||
pub fn SetInterfaceAttributeNullable(&self, _: Option<JS<Blob>>) {}
|
pub fn SetInterfaceAttributeNullable(&self, _: Option<JS<Blob>>) {}
|
||||||
|
|
||||||
// FIXME (issue #1813) Doesn't currently compile.
|
pub fn PassOptionalBoolean(&self, _: Option<bool>) {}
|
||||||
// pub fn PassOptionalBoolean(&self, _: Option<bool>) {}
|
pub fn PassOptionalByte(&self, _: Option<i8>) {}
|
||||||
// pub fn PassOptionalByte(&self, _: Option<i8>) {}
|
pub fn PassOptionalOctet(&self, _: Option<u8>) {}
|
||||||
// pub fn PassOptionalOctet(&self, _: Option<u8>) {}
|
pub fn PassOptionalShort(&self, _: Option<i16>) {}
|
||||||
// pub fn PassOptionalShort(&self, _: Option<i16>) {}
|
pub fn PassOptionalUnsignedShort(&self, _: Option<u16>) {}
|
||||||
// pub fn PassOptionalUnsignedShort(&self, _: Option<u16>) {}
|
pub fn PassOptionalLong(&self, _: Option<i32>) {}
|
||||||
// pub fn PassOptionalLong(&self, _: Option<i32>) {}
|
pub fn PassOptionalUnsignedLong(&self, _: Option<u32>) {}
|
||||||
// pub fn PassOptionalUnsignedLong(&self, _: Option<u32>) {}
|
pub fn PassOptionalLongLong(&self, _: Option<i64>) {}
|
||||||
// pub fn PassOptionalLongLong(&self, _: Option<i64>) {}
|
pub fn PassOptionalUnsignedLongLong(&self, _: Option<u64>) {}
|
||||||
// pub fn PassOptionalUnsignedLongLong(&self, _: Option<u64>) {}
|
pub fn PassOptionalFloat(&self, _: Option<f32>) {}
|
||||||
// pub fn PassOptionalFloat(&self, _: Option<f32>) {}
|
pub fn PassOptionalDouble(&self, _: Option<f64>) {}
|
||||||
// pub fn PassOptionalDouble(&self, _: Option<f64>) {}
|
|
||||||
pub fn PassOptionalString(&self, _: Option<DOMString>) {}
|
pub fn PassOptionalString(&self, _: Option<DOMString>) {}
|
||||||
pub fn PassOptionalInterface(&self, _: Option<JS<Blob>>) {}
|
pub fn PassOptionalInterface(&self, _: Option<JS<Blob>>) {}
|
||||||
pub fn PassOptionalAny(&self, _: *JSContext, _: Option<JSVal>) {}
|
pub fn PassOptionalAny(&self, _: *JSContext, _: Option<JSVal>) {}
|
||||||
|
|
||||||
// pub fn PassOptionalNullableBoolean(&self, _: Option<Option<bool>>) {}
|
pub fn PassOptionalNullableBoolean(&self, _: Option<Option<bool>>) {}
|
||||||
// pub fn PassOptionalNullableByte(&self, _: Option<Option<i8>>) {}
|
pub fn PassOptionalNullableByte(&self, _: Option<Option<i8>>) {}
|
||||||
// pub fn PassOptionalNullableOctet(&self, _: Option<Option<u8>>) {}
|
pub fn PassOptionalNullableOctet(&self, _: Option<Option<u8>>) {}
|
||||||
// pub fn PassOptionalNullableShort(&self, _: Option<Option<i16>>) {}
|
pub fn PassOptionalNullableShort(&self, _: Option<Option<i16>>) {}
|
||||||
// pub fn PassOptionalNullableUnsignedShort(&self, _: Option<Option<u16>>) {}
|
pub fn PassOptionalNullableUnsignedShort(&self, _: Option<Option<u16>>) {}
|
||||||
// pub fn PassOptionalNullableLong(&self, _: Option<Option<i32>>) {}
|
pub fn PassOptionalNullableLong(&self, _: Option<Option<i32>>) {}
|
||||||
// pub fn PassOptionalNullableUnsignedLong(&self, _: Option<Option<u32>>) {}
|
pub fn PassOptionalNullableUnsignedLong(&self, _: Option<Option<u32>>) {}
|
||||||
// pub fn PassOptionalNullableLongLong(&self, _: Option<Option<i64>>) {}
|
pub fn PassOptionalNullableLongLong(&self, _: Option<Option<i64>>) {}
|
||||||
// pub fn PassOptionalNullableUnsignedLongLong(&self, _: Option<Option<u64>>) {}
|
pub fn PassOptionalNullableUnsignedLongLong(&self, _: Option<Option<u64>>) {}
|
||||||
// pub fn PassOptionalNullableFloat(&self, _: Option<Option<f32>>) {}
|
pub fn PassOptionalNullableFloat(&self, _: Option<Option<f32>>) {}
|
||||||
// pub fn PassOptionalNullableDouble(&self, _: Option<Option<f64>>) {}
|
pub fn PassOptionalNullableDouble(&self, _: Option<Option<f64>>) {}
|
||||||
pub fn PassOptionalNullableString(&self, _: Option<Option<DOMString>>) {}
|
pub fn PassOptionalNullableString(&self, _: Option<Option<DOMString>>) {}
|
||||||
// pub fn PassOptionalNullableInterface(&self, _: Option<Option<JS<Blob>>>) {}
|
// pub fn PassOptionalNullableInterface(&self, _: Option<Option<JS<Blob>>>) {}
|
||||||
|
|
||||||
|
|
|
@ -32,33 +32,32 @@ interface TestBinding {
|
||||||
attribute DOMString? stringAttributeNullable;
|
attribute DOMString? stringAttributeNullable;
|
||||||
attribute Blob? interfaceAttributeNullable;
|
attribute Blob? interfaceAttributeNullable;
|
||||||
|
|
||||||
// FIXME (issue #1813) Doesn't currently compile.
|
void passOptionalBoolean(optional boolean arg);
|
||||||
// void passOptionalBoolean(optional boolean arg);
|
void passOptionalByte(optional byte arg);
|
||||||
// void passOptionalByte(optional byte arg);
|
void passOptionalOctet(optional octet arg);
|
||||||
// void passOptionalOctet(optional octet arg);
|
void passOptionalShort(optional short arg);
|
||||||
// void passOptionalShort(optional short arg);
|
void passOptionalUnsignedShort(optional unsigned short arg);
|
||||||
// void passOptionalUnsignedShort(optional unsigned short arg);
|
void passOptionalLong(optional long arg);
|
||||||
// void passOptionalLong(optional long arg);
|
void passOptionalUnsignedLong(optional unsigned long arg);
|
||||||
// void passOptionalUnsignedLong(optional unsigned long arg);
|
void passOptionalLongLong(optional long long arg);
|
||||||
// void passOptionalLongLong(optional long long arg);
|
void passOptionalUnsignedLongLong(optional unsigned long long arg);
|
||||||
// void passOptionalUnsignedLongLong(optional unsigned long long arg);
|
void passOptionalFloat(optional float arg);
|
||||||
// void passOptionalFloat(optional float arg);
|
void passOptionalDouble(optional double arg);
|
||||||
// void passOptionalDouble(optional double arg);
|
|
||||||
void passOptionalString(optional DOMString arg);
|
void passOptionalString(optional DOMString arg);
|
||||||
void passOptionalInterface(optional Blob arg);
|
void passOptionalInterface(optional Blob arg);
|
||||||
void passOptionalAny(optional any arg);
|
void passOptionalAny(optional any arg);
|
||||||
|
|
||||||
// void passOptionalNullableBoolean(optional boolean? arg);
|
void passOptionalNullableBoolean(optional boolean? arg);
|
||||||
// void passOptionalNullableByte(optional byte? arg);
|
void passOptionalNullableByte(optional byte? arg);
|
||||||
// void passOptionalNullableOctet(optional octet? arg);
|
void passOptionalNullableOctet(optional octet? arg);
|
||||||
// void passOptionalNullableShort(optional short? arg);
|
void passOptionalNullableShort(optional short? arg);
|
||||||
// void passOptionalNullableUnsignedShort(optional unsigned short? arg);
|
void passOptionalNullableUnsignedShort(optional unsigned short? arg);
|
||||||
// void passOptionalNullableLong(optional long? arg);
|
void passOptionalNullableLong(optional long? arg);
|
||||||
// void passOptionalNullableUnsignedLong(optional unsigned long? arg);
|
void passOptionalNullableUnsignedLong(optional unsigned long? arg);
|
||||||
// void passOptionalNullableLongLong(optional long long? arg);
|
void passOptionalNullableLongLong(optional long long? arg);
|
||||||
// void passOptionalNullableUnsignedLongLong(optional unsigned long long? arg);
|
void passOptionalNullableUnsignedLongLong(optional unsigned long long? arg);
|
||||||
// void passOptionalNullableFloat(optional float? arg);
|
void passOptionalNullableFloat(optional float? arg);
|
||||||
// void passOptionalNullableDouble(optional double? arg);
|
void passOptionalNullableDouble(optional double? arg);
|
||||||
void passOptionalNullableString(optional DOMString? arg);
|
void passOptionalNullableString(optional DOMString? arg);
|
||||||
// void passOptionalNullableInterface(optional Blob? arg);
|
// void passOptionalNullableInterface(optional Blob? arg);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue