gobject-introspection r670 - in trunk: . giscanner tests/scanner



Author: juergbi
Date: Sat Oct 11 21:54:30 2008
New Revision: 670
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=670&view=rev

Log:
2008-10-11  JÃrg Billeter  <j bitron ch>

	Bug 552374: Const strings should be identified in the gir.

	* giscanner/transformer.py: support string memory management
	* tests/scanner/foo.h: use char * and const char *
	* tests/scanner/foo-expected.gir: test that


Modified:
   trunk/ChangeLog
   trunk/giscanner/transformer.py
   trunk/tests/scanner/foo-expected.gir
   trunk/tests/scanner/foo.c
   trunk/tests/scanner/foo.h

Modified: trunk/giscanner/transformer.py
==============================================================================
--- trunk/giscanner/transformer.py	(original)
+++ trunk/giscanner/transformer.py	Sat Oct 11 21:54:30 2008
@@ -33,7 +33,8 @@
     CTYPE_VOID, CTYPE_ENUM, CTYPE_FUNCTION, CTYPE_STRUCT,
     CSYMBOL_TYPE_FUNCTION, CSYMBOL_TYPE_TYPEDEF, CSYMBOL_TYPE_STRUCT,
     CSYMBOL_TYPE_ENUM, CSYMBOL_TYPE_UNION, CSYMBOL_TYPE_OBJECT,
-    CSYMBOL_TYPE_MEMBER, CSYMBOL_TYPE_ELLIPSIS)
+    CSYMBOL_TYPE_MEMBER, CSYMBOL_TYPE_ELLIPSIS,
+    TYPE_QUALIFIER_CONST)
 from .odict import odict
 from .utils import strip_common_prefix, to_underscores
 
@@ -372,6 +373,14 @@
             return Array(ctype,
                          self._parse_ctype(derefed))
         resolved_type_name = self._parse_ctype(ctype)
+
+        # string memory management
+        if ctype == 'char*':
+            if source_type.base_type.type_qualifier & TYPE_QUALIFIER_CONST:
+                options.append('notransfer')
+            else:
+                options.append('transfer')
+
         return Type(resolved_type_name, ctype)
 
     def _create_parameter(self, symbol, options):
@@ -408,8 +417,10 @@
         for option in options:
             if option == 'transfer':
                 return_.transfer = True
+            elif option == 'notransfer':
+                return_.transfer = False
             else:
-                print 'Unhandled parameter annotation option: %r' % (
+                print 'Unhandled return type annotation option: %r' % (
                     option, )
         return return_
 

Modified: trunk/tests/scanner/foo-expected.gir
==============================================================================
--- trunk/tests/scanner/foo-expected.gir	(original)
+++ trunk/tests/scanner/foo-expected.gir	Sat Oct 11 21:54:30 2008
@@ -113,6 +113,16 @@
           </parameter>
         </parameters>
       </method>
+      <method name="get_name" c:identifier="foo_object_get_name">
+        <return-value>
+          <type name="utf8" c:type="char*"/>
+        </return-value>
+      </method>
+      <method name="dup_name" c:identifier="foo_object_dup_name">
+        <return-value transfer-ownership="1">
+          <type name="utf8" c:type="char*"/>
+        </return-value>
+      </method>
       <property name="string" writable="1">
         <type name="utf8" c:type="gchararray"/>
       </property>

Modified: trunk/tests/scanner/foo.c
==============================================================================
--- trunk/tests/scanner/foo.c	(original)
+++ trunk/tests/scanner/foo.c	Sat Oct 11 21:54:30 2008
@@ -155,6 +155,18 @@
 {
 }
 
+const char *
+foo_object_get_name (FooObject *object)
+{
+  return "foo";
+}
+
+char *
+foo_object_dup_name (FooObject *object)
+{
+  return g_strdup ("foo");
+}
+
 G_DEFINE_TYPE (FooSubobject, foo_subobject, FOO_TYPE_OBJECT);
 
 static void

Modified: trunk/tests/scanner/foo.h
==============================================================================
--- trunk/tests/scanner/foo.h	(original)
+++ trunk/tests/scanner/foo.h	Sat Oct 11 21:54:30 2008
@@ -66,6 +66,10 @@
 
 void                  foo_object_is_it_time_yet    (FooObject *object, time_t time);
 
+const char *          foo_object_get_name          (FooObject *object);
+
+char *                foo_object_dup_name          (FooObject *object);
+
 struct _FooSubobject
 {
   FooObject parent_instance;



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