[gobject-introspection] maintransformer: Fix regression in callback closure assignment



commit 0aa60a43c4c9679668e15dbf3ef7a39016525150
Author: Colin Walters <walters verbum org>
Date:   Sat Oct 10 15:43:54 2015 -0400

    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

 giscanner/maintransformer.py           |   11 +++++----
 tests/scanner/Regress-1.0-expected.gir |   35 +++++++++++---------------------
 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 5ea1f5b..b4b3934 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 dfbbd8d..620a290 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 38b6a3c..7eea9f7 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>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]