gobject-introspection r260 - in trunk: . giscanner tests/parser



Author: johan
Date: Wed Apr 30 01:48:36 2008
New Revision: 260
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=260&view=rev

Log:
2008-04-29  Johan Dahlin  <johan gnome org>

        * giscanner/ast.py:
        * giscanner/girwriter.py:
        * giscanner/transformer.py:
        * tests/parser/Foo-expected.gir:
        * TODO:
        Use transfer-ownership everywhere, to mark ownership/calle/caller etc.



Modified:
   trunk/ChangeLog
   trunk/TODO
   trunk/giscanner/ast.py
   trunk/giscanner/girwriter.py
   trunk/giscanner/transformer.py
   trunk/tests/parser/Foo-expected.gir

Modified: trunk/TODO
==============================================================================
--- trunk/TODO	(original)
+++ trunk/TODO	Wed Apr 30 01:48:36 2008
@@ -8,7 +8,6 @@
 - For argument/return values etc, store only c:identifier in the
   <class/> definition. Requires a link to the references type in the 
   Type node.
-- c:owner -> ownership-transfer=yes/no
 - replace gidl/gdk-pixbuf.gidl with something generated from headers,
   verify all information is available, possible to write
 

Modified: trunk/giscanner/ast.py
==============================================================================
--- trunk/giscanner/ast.py	(original)
+++ trunk/giscanner/ast.py	Wed Apr 30 01:48:36 2008
@@ -55,7 +55,7 @@
         Node.__init__(self, name)
         self.type = Type(type_name)
         self.direction = 'in'
-        self.transfer = 'none'
+        self.transfer = False
 
     def __repr__(self):
         return 'Parameter(%r, %r)' % (self.name, self.type)
@@ -94,7 +94,7 @@
     def __init__(self, type_name):
         Node.__init__(self)
         self.type = Type(type_name)
-        self.transfer = 'none'
+        self.transfer = False
 
     def __repr__(self):
         return 'Return(%r)' % (self.type,)
@@ -167,3 +167,4 @@
     def __init__(self, name, element_type):
         Type.__init__(self, name)
         self.element_type = element_type
+        self.transfer = False

Modified: trunk/giscanner/girwriter.py
==============================================================================
--- trunk/giscanner/girwriter.py	(original)
+++ trunk/giscanner/girwriter.py	Wed Apr 30 01:48:36 2008
@@ -79,7 +79,12 @@
     def _write_return_type(self, return_):
         if not return_:
             return
-        with self.tagcontext('return-value'):
+
+        attrs = []
+        if return_.transfer:
+            attrs.append(('transfer-ownership',
+                          str(int(return_.transfer))))
+        with self.tagcontext('return-value', attrs):
             if isinstance(return_.type, Sequence):
                 self._write_sequence(return_.type)
             else:
@@ -96,8 +101,9 @@
         attrs = [('name', parameter.name)]
         if parameter.direction != 'in':
             attrs.append(('direction', parameter.direction))
-        if parameter.transfer != 'none':
-            attrs.append(('transfer', parameter.transfer))
+        if parameter.transfer:
+            attrs.append(('transfer-ownership',
+                          str(int(parameter.transfer))))
         with self.tagcontext('parameter', attrs):
             self._write_type(parameter.type)
 
@@ -111,7 +117,10 @@
         self.write_tag('type', attrs)
 
     def _write_sequence(self, sequence):
-        attrs = [('c:owner', sequence.cowner)]
+        attrs = []
+        if sequence.transfer:
+            attrs.append(('transfer-ownership',
+                          str(int(sequence.transfer))))
         with self.tagcontext('sequence', attrs):
             attrs = [('c:identifier', sequence.element_type)]
             self.write_tag('element-type', attrs)

Modified: trunk/giscanner/transformer.py
==============================================================================
--- trunk/giscanner/transformer.py	(original)
+++ trunk/giscanner/transformer.py	Wed Apr 30 01:48:36 2008
@@ -137,7 +137,7 @@
             elif option == 'out':
                 param.direction = 'out'
             elif option == 'callee-owns':
-                param.transfer = 'full'
+                param.transfer = True
             else:
                 print 'Unhandled parameter annotation option: %s' % (
                     option,)
@@ -150,12 +150,12 @@
         return_ = Return(return_type)
         for option in options:
             if option == 'caller-owns':
-                return_.transfer = 'full'
+                return_.transfer = True
             elif option.startswith('seq '):
                 value, element_options = option[3:].split(None, 2)
                 element_type = self._parse_type_annotation(value)
                 seq = Sequence(return_type, element_type)
-                seq.cowner = 'caller'
+                seq.transfer = True
                 return_.type = seq
             else:
                 print 'Unhandled parameter annotation option: %s' % (

Modified: trunk/tests/parser/Foo-expected.gir
==============================================================================
--- trunk/tests/parser/Foo-expected.gir	(original)
+++ trunk/tests/parser/Foo-expected.gir	Wed Apr 30 01:48:36 2008
@@ -57,7 +57,7 @@
         </parameters>
       </method>
       <method name="create_object" c:identifier="foo_object_create_object">
-        <return-value>
+        <return-value transfer-ownership="1">
           <type name="GLib.Object" c:type="GObject*"/>
         </return-value>
         <parameters>
@@ -126,7 +126,7 @@
           <parameter name="object">
             <type name="Object" c:type="FooObject*"/>
           </parameter>
-          <parameter name="toown" transfer="full">
+          <parameter name="toown" transfer-ownership="1">
             <type name="GLib.Object" c:type="GObject*"/>
           </parameter>
         </parameters>
@@ -139,17 +139,17 @@
           <parameter name="object">
             <type name="Object" c:type="FooObject*"/>
           </parameter>
-          <parameter name="toown1" transfer="full">
+          <parameter name="toown1" transfer-ownership="1">
             <type name="GLib.Object" c:type="GObject*"/>
           </parameter>
-          <parameter name="toown2" transfer="full">
+          <parameter name="toown2" transfer-ownership="1">
             <type name="GLib.Object" c:type="GObject*"/>
           </parameter>
         </parameters>
       </method>
       <method name="get_strings" c:identifier="foo_object_get_strings">
         <return-value>
-          <sequence c:owner="caller">
+          <sequence transfer-ownership="1">
             <element-type c:identifier="char*"/>
           </sequence>
         </return-value>
@@ -161,7 +161,7 @@
       </method>
       <method name="get_objects" c:identifier="foo_object_get_objects">
         <return-value>
-          <sequence c:owner="caller">
+          <sequence transfer-ownership="1">
             <element-type c:identifier="FooObject*"/>
           </sequence>
         </return-value>



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