From eab9fd765ca2bbeb1a05b0f74375b231fb367d85 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 6 Mar 2014 22:18:49 +0100 Subject: [PATCH 1/4] Add disabled tests for optional nullable arguments with non-null default values. --- src/components/script/dom/testbinding.rs | 13 +++++++++++++ .../script/dom/webidls/TestBinding.webidl | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/components/script/dom/testbinding.rs b/src/components/script/dom/testbinding.rs index 8173a9829aa..35dc025cdae 100644 --- a/src/components/script/dom/testbinding.rs +++ b/src/components/script/dom/testbinding.rs @@ -122,6 +122,19 @@ impl TestBinding { pub fn PassOptionalNullableDoubleWithDefault(&self, _: Option) {} // pub fn PassOptionalNullableStringWithDefault(&self, _: Option) {} pub fn PassOptionalNullableInterfaceWithDefault(&self, _: Option>) {} + + // pub fn PassOptionalNullableBooleanWithNonNullDefault(&self, _: Option) {} + // pub fn PassOptionalNullableByteWithNonNullDefault(&self, _: Option) {} + // pub fn PassOptionalNullableOctetWithNonNullDefault(&self, _: Option) {} + // pub fn PassOptionalNullableShortWithNonNullDefault(&self, _: Option) {} + // pub fn PassOptionalNullableUnsignedShortWithNonNullDefault(&self, _: Option) {} + // pub fn PassOptionalNullableLongWithNonNullDefault(&self, _: Option) {} + // pub fn PassOptionalNullableUnsignedLongWithNonNullDefault(&self, _: Option) {} + // pub fn PassOptionalNullableLongLongWithNonNullDefault(&self, _: Option) {} + // pub fn PassOptionalNullableUnsignedLongLongWithNonNullDefault(&self, _: Option) {} + // pub fn PassOptionalNullableFloatWithNonNullDefault(&self, _: Option) {} + // pub fn PassOptionalNullableDoubleWithNonNullDefault(&self, _: Option) {} + // pub fn PassOptionalNullableStringWithNonNullDefault(&self, _: Option) {} } impl Reflectable for TestBinding { diff --git a/src/components/script/dom/webidls/TestBinding.webidl b/src/components/script/dom/webidls/TestBinding.webidl index 5cb5a20a02e..c9d1a6745c4 100644 --- a/src/components/script/dom/webidls/TestBinding.webidl +++ b/src/components/script/dom/webidls/TestBinding.webidl @@ -82,4 +82,17 @@ interface TestBinding { void passOptionalNullableUnsignedLongLongWithDefault(optional unsigned long long? arg = null); // void passOptionalNullableStringWithDefault(optional DOMString? arg = null); void passOptionalNullableInterfaceWithDefault(optional Blob? arg = null); + + // void passOptionalNullableBooleanWithNonNullDefault(optional boolean? arg = false); + // void passOptionalNullableByteWithNonNullDefault(optional byte? arg = 7); + // void passOptionalNullableOctetWithNonNullDefault(optional octet? arg = 7); + // void passOptionalNullableShortWithNonNullDefault(optional short? arg = 7); + // void passOptionalNullableUnsignedShortWithNonNullDefault(optional unsigned short? arg = 7); + // void passOptionalNullableLongWithNonNullDefault(optional long? arg = 7); + // void passOptionalNullableUnsignedLongWithNonNullDefault(optional unsigned long? arg = 7); + // void passOptionalNullableLongLongWithNonNullDefault(optional long long? arg = 7); + // void passOptionalNullableUnsignedLongLongWithNonNullDefault(optional unsigned long long? arg = 7); + // void passOptionalNullableFloatWithNonNullDefault(optional float? arg = 0.0); + // void passOptionalNullableDoubleWithNonNullDefault(optional double? arg = 0.0); + // void passOptionalNullableStringWithNonNullDefault(optional DOMString? arg = ""); }; From 8b5778993ab7500ad109e77b899698cdef771a60 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 6 Mar 2014 22:20:47 +0100 Subject: [PATCH 2/4] Inline dataLoc in the one place that can see it and the one place that can't. --- .../script/dom/bindings/codegen/CodegenRust.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index b9bd9a54ae8..70fa8e6515c 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1255,7 +1255,6 @@ for (uint32_t i = 0; i < length; ++i) { else: assert(defaultValue is None or not isinstance(defaultValue, IDLNullValue)) - dataLoc = "${declName}" #XXXjdm conversionBehavior should be used successVal = "v" if preSuccess or postSuccess: @@ -1263,8 +1262,8 @@ for (uint32_t i = 0; i < length; ++i) { template = ( "match JSValConvertible::from_jsval(cx, ${val}) {\n" " Err(_) => %s,\n" - " Ok(v) => %s = %s\n" - "}" % (failureCode, dataLoc, successVal)) + " Ok(v) => ${declName} = %s\n" + "}" % (failureCode, successVal)) declType = CGGeneric(typeName) if (defaultValue is not None and # We already handled IDLNullValue, so just deal with the other ones @@ -1279,8 +1278,8 @@ for (uint32_t i = 0; i < length; ++i) { pre="if ${haveValue} {\n", post=("\n" "} else {\n" - " %s = %s;\n" - "}" % (dataLoc, defaultStr))).define() + " ${declName} = %s;\n" + "}" % defaultStr)).define() initialVal = "false" if typeName == "bool" else ("0 as %s" % typeName) if type.nullable(): From 716e1ce144b3af75ec4ceb72a51f9f5b89a6545d Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 6 Mar 2014 22:26:12 +0100 Subject: [PATCH 3/4] Avoid a type error with a non-null default value for an optional nullable primitive argument. --- .../script/dom/bindings/codegen/CodegenRust.py | 4 ++++ src/components/script/dom/testbinding.rs | 18 +++++++++--------- .../script/dom/webidls/TestBinding.webidl | 18 +++++++++--------- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 70fa8e6515c..af9a39313da 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1274,6 +1274,10 @@ for (uint32_t i = 0; i < length; ++i) { else: assert(tag == IDLType.Tags.bool) defaultStr = toStringBool(defaultValue.value) + + if type.nullable(): + defaultStr = "Some(%s)" % defaultStr + template = CGWrapper(CGIndenter(CGGeneric(template)), pre="if ${haveValue} {\n", post=("\n" diff --git a/src/components/script/dom/testbinding.rs b/src/components/script/dom/testbinding.rs index 35dc025cdae..1df1f97e606 100644 --- a/src/components/script/dom/testbinding.rs +++ b/src/components/script/dom/testbinding.rs @@ -123,15 +123,15 @@ impl TestBinding { // pub fn PassOptionalNullableStringWithDefault(&self, _: Option) {} pub fn PassOptionalNullableInterfaceWithDefault(&self, _: Option>) {} - // pub fn PassOptionalNullableBooleanWithNonNullDefault(&self, _: Option) {} - // pub fn PassOptionalNullableByteWithNonNullDefault(&self, _: Option) {} - // pub fn PassOptionalNullableOctetWithNonNullDefault(&self, _: Option) {} - // pub fn PassOptionalNullableShortWithNonNullDefault(&self, _: Option) {} - // pub fn PassOptionalNullableUnsignedShortWithNonNullDefault(&self, _: Option) {} - // pub fn PassOptionalNullableLongWithNonNullDefault(&self, _: Option) {} - // pub fn PassOptionalNullableUnsignedLongWithNonNullDefault(&self, _: Option) {} - // pub fn PassOptionalNullableLongLongWithNonNullDefault(&self, _: Option) {} - // pub fn PassOptionalNullableUnsignedLongLongWithNonNullDefault(&self, _: Option) {} + pub fn PassOptionalNullableBooleanWithNonNullDefault(&self, _: Option) {} + pub fn PassOptionalNullableByteWithNonNullDefault(&self, _: Option) {} + pub fn PassOptionalNullableOctetWithNonNullDefault(&self, _: Option) {} + pub fn PassOptionalNullableShortWithNonNullDefault(&self, _: Option) {} + pub fn PassOptionalNullableUnsignedShortWithNonNullDefault(&self, _: Option) {} + pub fn PassOptionalNullableLongWithNonNullDefault(&self, _: Option) {} + pub fn PassOptionalNullableUnsignedLongWithNonNullDefault(&self, _: Option) {} + pub fn PassOptionalNullableLongLongWithNonNullDefault(&self, _: Option) {} + pub fn PassOptionalNullableUnsignedLongLongWithNonNullDefault(&self, _: Option) {} // pub fn PassOptionalNullableFloatWithNonNullDefault(&self, _: Option) {} // pub fn PassOptionalNullableDoubleWithNonNullDefault(&self, _: Option) {} // pub fn PassOptionalNullableStringWithNonNullDefault(&self, _: Option) {} diff --git a/src/components/script/dom/webidls/TestBinding.webidl b/src/components/script/dom/webidls/TestBinding.webidl index c9d1a6745c4..5c0420d5160 100644 --- a/src/components/script/dom/webidls/TestBinding.webidl +++ b/src/components/script/dom/webidls/TestBinding.webidl @@ -83,15 +83,15 @@ interface TestBinding { // void passOptionalNullableStringWithDefault(optional DOMString? arg = null); void passOptionalNullableInterfaceWithDefault(optional Blob? arg = null); - // void passOptionalNullableBooleanWithNonNullDefault(optional boolean? arg = false); - // void passOptionalNullableByteWithNonNullDefault(optional byte? arg = 7); - // void passOptionalNullableOctetWithNonNullDefault(optional octet? arg = 7); - // void passOptionalNullableShortWithNonNullDefault(optional short? arg = 7); - // void passOptionalNullableUnsignedShortWithNonNullDefault(optional unsigned short? arg = 7); - // void passOptionalNullableLongWithNonNullDefault(optional long? arg = 7); - // void passOptionalNullableUnsignedLongWithNonNullDefault(optional unsigned long? arg = 7); - // void passOptionalNullableLongLongWithNonNullDefault(optional long long? arg = 7); - // void passOptionalNullableUnsignedLongLongWithNonNullDefault(optional unsigned long long? arg = 7); + void passOptionalNullableBooleanWithNonNullDefault(optional boolean? arg = false); + void passOptionalNullableByteWithNonNullDefault(optional byte? arg = 7); + void passOptionalNullableOctetWithNonNullDefault(optional octet? arg = 7); + void passOptionalNullableShortWithNonNullDefault(optional short? arg = 7); + void passOptionalNullableUnsignedShortWithNonNullDefault(optional unsigned short? arg = 7); + void passOptionalNullableLongWithNonNullDefault(optional long? arg = 7); + void passOptionalNullableUnsignedLongWithNonNullDefault(optional unsigned long? arg = 7); + void passOptionalNullableLongLongWithNonNullDefault(optional long long? arg = 7); + void passOptionalNullableUnsignedLongLongWithNonNullDefault(optional unsigned long long? arg = 7); // void passOptionalNullableFloatWithNonNullDefault(optional float? arg = 0.0); // void passOptionalNullableDoubleWithNonNullDefault(optional double? arg = 0.0); // void passOptionalNullableStringWithNonNullDefault(optional DOMString? arg = ""); From 54a59b9d38b4cb9b58417039e4be145c15074a8d Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 6 Mar 2014 22:42:26 +0100 Subject: [PATCH 4/4] Avoid a type error with a non-null default value for an optional nullable string argument. --- .../dom/bindings/codegen/CodegenRust.py | 20 ++++++++++++------- src/components/script/dom/testbinding.rs | 2 +- .../script/dom/webidls/TestBinding.webidl | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index af9a39313da..bbdd6b9420e 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1063,13 +1063,19 @@ for (uint32_t i = 0; i < length; ++i) { assert(type.nullable()) return handleDefault(conversionCode, "%s.SetNull()" % varName) - return handleDefault( - conversionCode, - ("static data: [u8, ..%s] = [ %s ];\n" - "%s = str::from_utf8(data).to_owned()" % - (len(defaultValue.value) + 1, - ", ".join(["'" + char + "' as u8" for char in defaultValue.value] + ["0"]), - varName))) + + value = "str::from_utf8(data).to_owned()" + if type.nullable(): + value = "Some(%s)" % value + + default = ( + "static data: [u8, ..%s] = [ %s ];\n" + "%s = %s" % + (len(defaultValue.value) + 1, + ", ".join(["'" + char + "' as u8" for char in defaultValue.value] + ["0"]), + varName, value)) + + return handleDefault(conversionCode, default) if isMember: # We have to make a copy, because our jsval may well not diff --git a/src/components/script/dom/testbinding.rs b/src/components/script/dom/testbinding.rs index 1df1f97e606..2d0d3fc58bb 100644 --- a/src/components/script/dom/testbinding.rs +++ b/src/components/script/dom/testbinding.rs @@ -134,7 +134,7 @@ impl TestBinding { pub fn PassOptionalNullableUnsignedLongLongWithNonNullDefault(&self, _: Option) {} // pub fn PassOptionalNullableFloatWithNonNullDefault(&self, _: Option) {} // pub fn PassOptionalNullableDoubleWithNonNullDefault(&self, _: Option) {} - // pub fn PassOptionalNullableStringWithNonNullDefault(&self, _: Option) {} + pub fn PassOptionalNullableStringWithNonNullDefault(&self, _: Option) {} } impl Reflectable for TestBinding { diff --git a/src/components/script/dom/webidls/TestBinding.webidl b/src/components/script/dom/webidls/TestBinding.webidl index 5c0420d5160..ae655949cde 100644 --- a/src/components/script/dom/webidls/TestBinding.webidl +++ b/src/components/script/dom/webidls/TestBinding.webidl @@ -94,5 +94,5 @@ interface TestBinding { void passOptionalNullableUnsignedLongLongWithNonNullDefault(optional unsigned long long? arg = 7); // void passOptionalNullableFloatWithNonNullDefault(optional float? arg = 0.0); // void passOptionalNullableDoubleWithNonNullDefault(optional double? arg = 0.0); - // void passOptionalNullableStringWithNonNullDefault(optional DOMString? arg = ""); + void passOptionalNullableStringWithNonNullDefault(optional DOMString? arg = ""); };