diff options
author | Colin Walters <walters@verbum.org> | 2015-10-10 15:43:54 -0400 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2015-10-10 16:30:31 -0400 |
commit | 0aa60a43c4c9679668e15dbf3ef7a39016525150 (patch) | |
tree | 5c8143d00932e2b58f8af6399b2e2d58fcb33a58 | |
parent | e8a7fbee3bb652159b81771ec16eab938ff84793 (diff) | |
download | gobject-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.py | 11 | ||||
-rw-r--r-- | tests/scanner/Regress-1.0-expected.gir | 35 | ||||
-rw-r--r-- | tests/scanner/Utility-1.0-expected.gir | 6 |
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> |