summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2015-10-10 15:43:54 -0400
committerColin Walters <walters@verbum.org>2015-10-10 16:30:31 -0400
commit0aa60a43c4c9679668e15dbf3ef7a39016525150 (patch)
tree5c8143d00932e2b58f8af6399b2e2d58fcb33a58
parente8a7fbee3bb652159b81771ec16eab938ff84793 (diff)
downloadgobject-introspection-0aa60a43c4c9679668e15dbf3ef7a39016525150.tar.gz
maintransformer: Fix regression in callback closure assignment
The nullable code needs to search via index lookup of closure_name, which drops the need to (incorrectly) assign closure_name again. https://bugzilla.gnome.org/show_bug.cgi?id=756352
-rw-r--r--giscanner/maintransformer.py11
-rw-r--r--tests/scanner/Regress-1.0-expected.gir35
-rw-r--r--tests/scanner/Utility-1.0-expected.gir6
3 files changed, 20 insertions, 32 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py
index 5ea1f5b4..b4b39345 100644
--- a/giscanner/maintransformer.py
+++ b/giscanner/maintransformer.py
@@ -1451,14 +1451,15 @@ method or constructor of some type."""
param.argname is not None and
param.argname.endswith('data')):
callback_param.closure_name = param.argname
- param.closure_name = param.argname
for param in params:
# By convention, closure user_data parameters are always nullable.
- if param.closure_name is not None and \
- param.closure_name == param.argname and \
- not param.not_nullable:
- param.nullable = True
+ if param.closure_name is not None:
+ idx = node.get_parameter_index(param.closure_name)
+ assert idx >= 0
+ closure_param = params[idx]
+ if not closure_param.not_nullable:
+ closure_param.nullable = True
def _pass3_callable_throws(self, node):
"""Check to see if we have anything that looks like a
diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir
index dfbbd8d5..620a2907 100644
--- a/tests/scanner/Regress-1.0-expected.gir
+++ b/tests/scanner/Regress-1.0-expected.gir
@@ -387,8 +387,7 @@ are zero-terminated</doc>
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="1">
+ allow-none="1">
<doc xml:space="preserve">Callback user data</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
@@ -739,8 +738,7 @@ regress_annotation_object_watch_full().</doc>
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="1">
+ allow-none="1">
<doc xml:space="preserve">The callback data</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
@@ -770,8 +768,7 @@ regress_annotation_object_watch_full().</doc>
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="1">
+ allow-none="1">
<doc xml:space="preserve">The callback data</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
@@ -1868,8 +1865,7 @@ exposed to language bindings.</doc>
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="1">
+ allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
@@ -2927,8 +2923,7 @@ use it should be.</doc>
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="1">
+ allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
<parameter name="notify" transfer-ownership="none" scope="async">
@@ -4309,8 +4304,7 @@ detection, and fixing it via annotations.</doc>
<parameter name="data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="2">
+ allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
@@ -4507,8 +4501,7 @@ detection, and fixing it via annotations.</doc>
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="2">
+ allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
@@ -4529,8 +4522,7 @@ detection, and fixing it via annotations.</doc>
<parameter name="data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="1">
+ allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
<parameter name="destroy" transfer-ownership="none" scope="async">
@@ -5404,8 +5396,7 @@ libgnome-keyring.</doc>
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="1">
+ allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
@@ -5429,8 +5420,7 @@ is invoked.</doc>
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="1">
+ allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
<parameter name="notify" transfer-ownership="none" scope="async">
@@ -5501,7 +5491,7 @@ call and can be released on return.</doc>
<type name="TestCallbackUserData"
c:type="RegressTestCallbackUserData"/>
</parameter>
- <parameter name="user_data" transfer-ownership="none" closure="1">
+ <parameter name="user_data" transfer-ownership="none">
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
@@ -6513,8 +6503,7 @@ https://bugzilla.gnome.org/show_bug.cgi?id=685399</doc>
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="2">
+ allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
<parameter name="notify" transfer-ownership="none" scope="async">
diff --git a/tests/scanner/Utility-1.0-expected.gir b/tests/scanner/Utility-1.0-expected.gir
index 38b6a3cb..7eea9f77 100644
--- a/tests/scanner/Utility-1.0-expected.gir
+++ b/tests/scanner/Utility-1.0-expected.gir
@@ -100,8 +100,7 @@ and/or use gtk-doc annotations. -->
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="2">
+ allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
<parameter name="destroy" transfer-ownership="none" scope="async">
@@ -180,8 +179,7 @@ and/or use gtk-doc annotations. -->
<parameter name="user_data"
transfer-ownership="none"
nullable="1"
- allow-none="1"
- closure="2">
+ allow-none="1">
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>