[gobject-introspection/wip/transformer] [major] more fixes



commit d0a22f902bebb44be2c262ae2cc37d4ab701820f
Author: Colin Walters <walters verbum org>
Date:   Mon Aug 16 16:35:48 2010 -0400

    [major] more fixes

 giscanner/glibast.py               |    4 +++
 giscanner/glibtransformer.py       |    2 +-
 giscanner/primarytransformer.py    |    7 ++++-
 giscanner/transformer.py           |    5 +--
 tests/scanner/Foo-1.0-expected.gir |   49 +++++++++++++++++++++--------------
 5 files changed, 42 insertions(+), 25 deletions(-)
---
diff --git a/giscanner/glibast.py b/giscanner/glibast.py
index a948682..1fd5bd5 100644
--- a/giscanner/glibast.py
+++ b/giscanner/glibast.py
@@ -147,6 +147,10 @@ class GLibInterface(Interface):
         self.signals = []
         self.ctype = ctype or type_name
 
+    def _walk(self, callback, chain):
+        super(GLibInterface, self)._walk(callback, chain)
+        for sig in self.signals:
+            sig.walk(callback, chain)
 
 class GLibProperty(Property):
     pass
diff --git a/giscanner/glibtransformer.py b/giscanner/glibtransformer.py
index bbc2c5d..0fe104b 100644
--- a/giscanner/glibtransformer.py
+++ b/giscanner/glibtransformer.py
@@ -357,7 +357,7 @@ blob containing data gleaned from GObject's primitive introspection."""
         for signal_info in xmlnode.findall('signal'):
             rctype = signal_info.attrib['return']
             rtype = self._transformer.create_type_from_user_string(rctype)
-            return_ = Return(rtype, PARAM_TRANSFER_NONE)
+            return_ = Return(rtype)
             parameters = []
             for i, parameter in enumerate(signal_info.findall('param')):
                 if i == 0:
diff --git a/giscanner/primarytransformer.py b/giscanner/primarytransformer.py
index e262a18..8f99ad4 100644
--- a/giscanner/primarytransformer.py
+++ b/giscanner/primarytransformer.py
@@ -321,8 +321,13 @@ class PrimaryTransformer(object):
         return PARAM_TRANSFER_NONE
 
     def _get_transfer_default_return(self, parent, node):
-        if node.type.is_equiv(BASIC_GIR_TYPES) or node.type.is_const:
+        if (node.type.is_equiv(BASIC_GIR_TYPES)
+            or node.type.is_const
+            or node.type.is_equiv(TYPE_NONE)):
             return PARAM_TRANSFER_NONE
+        elif node.type.is_equiv(TYPE_STRING):
+            # Non-const strings default to FULL
+            return PARAM_TRANSFER_FULL
         elif node.type.target_fundamental:
             # This looks like just GType right now
             return None
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index bde2c0a..1ee9398 100644
--- a/giscanner/transformer.py
+++ b/giscanner/transformer.py
@@ -406,8 +406,6 @@ or raise ValueError."""
         return node
 
     def _create_function(self, symbol):
-        if symbol.ident == 'test_strv_out_container':
-            import pdb; pdb.set_trace()
         parameters = list(self._create_parameters(symbol.base_type))
         return_ = self._create_return(symbol.base_type.base_type)
         name = self._strip_symbol_or_warn(symbol)
@@ -601,7 +599,8 @@ or raise ValueError."""
         return Parameter(symbol.ident, ptype)
 
     def _create_return(self, source_type):
-        return Return(self._create_type_from_base(source_type, is_return=True))
+        typeval = self._create_type_from_base(source_type, is_return=True)
+        return Return(typeval)
 
     def _create_const(self, symbol):
         # Don't create constants for non-public things
diff --git a/tests/scanner/Foo-1.0-expected.gir b/tests/scanner/Foo-1.0-expected.gir
index 388f0be..ba2a5db 100644
--- a/tests/scanner/Foo-1.0-expected.gir
+++ b/tests/scanner/Foo-1.0-expected.gir
@@ -467,11 +467,18 @@ uses a C sugar return type.</doc>
           </parameter>
         </parameters>
       </method>
+      <property name="hidden"
+                introspectable="0"
+                writable="1"
+                construct-only="1"
+                transfer-ownership="none">
+        <type/>
+      </property>
       <property name="string"
                 writable="1"
                 construct="1"
                 transfer-ownership="none">
-        <type name="utf8" c:type="gchararray"/>
+        <type name="utf8"/>
       </property>
       <field name="parent_instance">
         <type name="GObject.Object" c:type="GObject"/>
@@ -481,14 +488,14 @@ uses a C sugar return type.</doc>
       </field>
       <glib:signal name="signal">
         <return-value transfer-ownership="full">
-          <type name="utf8" c:type="gchararray"/>
+          <type name="utf8"/>
         </return-value>
         <parameters>
           <parameter name="object" transfer-ownership="none">
-            <type name="GObject.Object" c:type="GObject"/>
+            <type name="GObject.Object"/>
           </parameter>
           <parameter name="p0" transfer-ownership="none">
-            <type name="gpointer" c:type="gpointer"/>
+            <type name="gpointer"/>
           </parameter>
         </parameters>
       </glib:signal>
@@ -500,7 +507,7 @@ uses a C sugar return type.</doc>
         <type name="GObject.ObjectClass" c:type="GObjectClass"/>
       </field>
       <field name="virtual_method">
-        <callback name="virtual_method" c:type="virtual_method">
+        <callback name="virtual_method">
           <return-value transfer-ownership="none">
             <type name="gboolean" c:type="gboolean"/>
           </return-value>
@@ -515,7 +522,7 @@ uses a C sugar return type.</doc>
         </callback>
       </field>
       <field name="read_fn">
-        <callback name="read_fn" c:type="read_fn">
+        <callback name="read_fn">
           <return-value transfer-ownership="none">
             <type name="none" c:type="void"/>
           </return-value>
@@ -536,12 +543,12 @@ uses a C sugar return type.</doc>
       </field>
       <field name="_reserved">
         <array zero-terminated="0" c:type="GCallback" fixed-size="4">
-          <type name="GObject.Callback"/>
+          <type name="GObject.Callback" c:type="GCallback"/>
         </array>
       </field>
     </record>
-    <constant name="PIE_IS_TASTY" value="3.14159">
-      <type name="gdouble"/>
+    <constant name="PIE_IS_TASTY" value="3.141590">
+      <type name="gdouble" c:type="gdouble"/>
     </constant>
     <record name="Rectangle" c:type="FooRectangle">
       <field name="x" writable="1">
@@ -588,7 +595,7 @@ uses a C sugar return type.</doc>
       </method>
     </record>
     <constant name="SUCCESS_INT" value="4408">
-      <type name="gint"/>
+      <type name="gint" c:type="gint"/>
     </constant>
     <enumeration name="Skippable" introspectable="0" c:type="FooSkippable">
       <doc xml:whitespace="preserve">Some type that is only interesting from C and should not be
@@ -619,9 +626,10 @@ exposed to language bindings.</doc>
         <type name="gint" c:type="int"/>
       </field>
     </record>
-    <record name="StructPrivate" c:type="FooStructPrivate">
+    <record name="StructPrivate" c:type="FooStructPrivate" disguised="1">
     </record>
     <interface name="SubInterface"
+               c:symbol-prefix="sub_interface"
                c:type="FooSubInterface"
                glib:type-name="FooSubInterface"
                glib:get-type="foo_sub_interface_get_type"
@@ -638,8 +646,8 @@ exposed to language bindings.</doc>
         </return-value>
       </method>
       <glib:signal name="destroy-event">
-        <return-value transfer-ownership="full">
-          <type name="none" c:type="void"/>
+        <return-value transfer-ownership="none">
+          <type name="none"/>
         </return-value>
       </glib:signal>
     </interface>
@@ -650,7 +658,7 @@ exposed to language bindings.</doc>
         <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
       </field>
       <field name="destroy_event">
-        <callback name="destroy_event" c:type="destroy_event">
+        <callback name="destroy_event">
           <return-value transfer-ownership="none">
             <type name="none" c:type="void"/>
           </return-value>
@@ -662,7 +670,7 @@ exposed to language bindings.</doc>
         </callback>
       </field>
       <field name="do_bar">
-        <callback name="do_bar" c:type="do_bar">
+        <callback name="do_bar">
           <return-value transfer-ownership="none">
             <type name="none" c:type="void"/>
           </return-value>
@@ -675,6 +683,7 @@ exposed to language bindings.</doc>
       </field>
     </record>
     <class name="Subobject"
+           c:symbol-prefix="subobject"
            c:type="FooSubobject"
            parent="Object"
            abstract="1"
@@ -706,12 +715,12 @@ exposed to language bindings.</doc>
         <type name="gint" c:type="int"/>
       </field>
       <field name="lines" writable="1">
-        <array zero-terminated="0" c:type="char" fixed-size="80">
-          <type name="gchar"/>
+        <array zero-terminated="0" c:type="gchar" fixed-size="80">
+          <type name="gchar" c:type="char"/>
         </array>
       </field>
       <field name="data" writable="1">
-        <type name="gpointer" c:type="guchar*"/>
+        <type name="guint8" c:type="guchar*"/>
       </field>
     </record>
     <union name="Union" c:type="_FooUnion">
@@ -776,7 +785,7 @@ exposed to language bindings.</doc>
         <parameter name="data" transfer-ownership="none">
           <type name="gpointer" c:type="gpointer"/>
         </parameter>
-        <parameter name="destroy" transfer-ownership="none" scope="call">
+        <parameter name="destroy" transfer-ownership="none">
           <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
         </parameter>
       </parameters>
@@ -792,7 +801,7 @@ exposed to language bindings.</doc>
       </parameters>
     </function>
     <function name="enum_type_returnv" c:identifier="foo_enum_type_returnv">
-      <return-value transfer-ownership="full">
+      <return-value transfer-ownership="none">
         <type name="EnumType" c:type="FooEnumType"/>
       </return-value>
       <parameters>



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