Bug 574139 – There is no way to identify 'user_data' arguments in the callback signature
authorAndreas Rottmann <a.rottmann@gmx.at>
Mon, 9 Mar 2009 17:33:00 +0000 (18:33 +0100)
committerAndreas Rottmann <a.rottmann@gmx.at>
Mon, 9 Mar 2009 17:33:00 +0000 (18:33 +0100)
Add a heuristic to the scanner that flags arguments of callbacks that
are named 'user_data' (exact match) and have a 'any (void*) type.

These arguments are marked by setting the 'closure' field of ArgBlob
to the index of themselves.

Signed-off-by: Andreas Rottmann <a.rottmann@gmx.at>
giscanner/transformer.py
tests/scanner/annotation-1.0-expected.gir
tests/scanner/annotation-1.0-expected.tgir
tests/scanner/utility-1.0-expected.gir
tests/scanner/utility-1.0-expected.tgir

index 8e3219a..9aebbd8 100644 (file)
@@ -534,13 +534,20 @@ class Transformer(object):
         return self._create_compound(Union, symbol, anonymous)
 
     def _create_callback(self, symbol):
-        parameters = self._create_parameters(symbol.base_type.base_type)
+        parameters = list(self._create_parameters(symbol.base_type.base_type))
         retval = self._create_return(symbol.base_type.base_type.base_type)
+
+        # Mark the 'user_data' arguments
+        for i, param in enumerate(parameters):
+            if (param.type.name == 'any' and
+                param.name == 'user_data'):
+                param.closure_index = i
+
         if symbol.ident.find('_') > 0:
             name = self.remove_prefix(symbol.ident, True)
         else:
             name = self.remove_prefix(symbol.ident)
-        callback = Callback(name, retval, list(parameters), symbol.ident)
+        callback = Callback(name, retval, parameters, symbol.ident)
 
         return callback
 
index f427345..1af7271 100644 (file)
@@ -34,7 +34,7 @@ and/or use gtk-doc annotations.  -->
         <parameter name="item" transfer-ownership="none">
           <type name="utf8" c:type="char*"/>
         </parameter>
-        <parameter name="user_data" transfer-ownership="none">
+        <parameter name="user_data" transfer-ownership="none" closure="2">
           <type name="any" c:type="gpointer"/>
         </parameter>
       </parameters>
index 2075143..2a1426b 100644 (file)
@@ -28,7 +28,7 @@
         <parameter name="item" transfer-ownership="none">
           <type name="utf8"/>
         </parameter>
-        <parameter name="user_data" transfer-ownership="none">
+        <parameter name="user_data" transfer-ownership="none" closure="2">
           <type name="any"/>
         </parameter>
       </parameters>
index 0ca72cb..331979c 100644 (file)
@@ -37,7 +37,7 @@ and/or use gtk-doc annotations.  -->
         <parameter name="path" transfer-ownership="none">
           <type name="utf8" c:type="char*"/>
         </parameter>
-        <parameter name="user_data" transfer-ownership="none">
+        <parameter name="user_data" transfer-ownership="none" closure="1">
           <type name="any" c:type="gpointer"/>
         </parameter>
       </parameters>
index 2653584..dfd2aa8 100644 (file)
@@ -24,7 +24,7 @@
         <parameter name="path" transfer-ownership="none">
           <type name="utf8"/>
         </parameter>
-        <parameter name="user_data" transfer-ownership="none">
+        <parameter name="user_data" transfer-ownership="none" closure="1">
           <type name="any"/>
         </parameter>
       </parameters>