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



Author: johan
Date: Tue Jan 13 21:13:00 2009
New Revision: 1032
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=1032&view=rev

Log:
2009-01-13  Johan Dahlin  <jdahlin async com br>

        Bug 555036 â put gtk-doc in GIR

        * giscanner/annotationparser.py:
        * giscanner/ast.py:
        * giscanner/girwriter.py:
        * giscanner/glibast.py:
        * tests/scanner/annotation-1.0-expected.gir:
        * tests/scanner/annotation.h:
        * tests/scanner/foo-1.0-expected.gir:



Modified:
   trunk/ChangeLog
   trunk/giscanner/annotationparser.py
   trunk/giscanner/ast.py
   trunk/giscanner/girwriter.py
   trunk/giscanner/glibast.py
   trunk/tests/scanner/annotation-1.0-expected.gir
   trunk/tests/scanner/annotation.h
   trunk/tests/scanner/foo-1.0-expected.gir

Modified: trunk/giscanner/annotationparser.py
==============================================================================
--- trunk/giscanner/annotationparser.py	(original)
+++ trunk/giscanner/annotationparser.py	Tue Jan 13 21:13:00 2009
@@ -20,8 +20,9 @@
 
 # AnnotationParser - parses gtk-doc annotations
 
-from .ast import (Array, Callback, Class, Enum, Field, Function, Interface,
-                  List, Map, Parameter, Record, Return, Type, Union, Varargs,
+from .ast import (Array, Bitfield, Callback, Class, Enum, Field, Function,
+                  Interface, List, Map, Parameter, Record, Return, Type, Union,
+                  Varargs,
                   default_array_types,
                   BASIC_GIR_TYPES,
                   PARAM_DIRECTION_INOUT,
@@ -71,6 +72,7 @@
         self.name = name
         self.value = None
         self.tags = odict()
+        self.comment = None
 
     def __repr__(self):
         return '<DocBlock %r>' % (self.name, )
@@ -91,6 +93,7 @@
     def __init__(self, name):
         self.name = name
         self.options = []
+        self.comment = None
 
 
 class Option(object):
@@ -164,34 +167,36 @@
         if not block_name.endswith(':'):
             return
         block = DocBlock(block_name[:-1])
-        content = comment[pos+1:]
-        for line in content.split('\n'):
+        comment_lines = []
+        for line in comment[pos+1:].split('\n'):
             line = line.lstrip()
             line = line[2:].strip() # Skip ' *'
             if not line:
                 continue
-
             if line.startswith('@'):
                 line = line[1:]
             elif not ': ' in line:
+                comment_lines.append(line)
                 continue
             tag = self._parse_tag(line)
             block.tags[tag.name] = tag
-
+        block.comment = '\n'.join(comment_lines)
         self._blocks[block.name] = block
 
-    def _parse_tag(self, value):
+    def _parse_tag(self, raw):
         # Tag: bar
         # Tag: bar opt1 opt2
-        parts = value.split(': ', 1)
+        parts = raw.split(': ', 1)
         if len(parts) == 1:
             tag_name = parts[0]
-            options = ''
+            value = ''
         else:
-            tag_name, options = parts
+            tag_name, value = parts
+        options, rest = self._parse_options(value)
         tag = DocTag(tag_name)
-        tag.value = options
-        tag.options = self._parse_options(options)
+        tag.value = value
+        tag.options = options
+        tag.comment = rest
         return tag
 
     def _parse_options(self, value):
@@ -199,6 +204,7 @@
         # (bar opt1 opt2...)
         opened = -1
         options = {}
+        last = None
         for i, c in enumerate(value):
             if c == '(' and opened == -1:
                 opened = i+1
@@ -215,8 +221,14 @@
                 if option is not None:
                     option = Option(option)
                 options[name] = option
+                last = i + 2
                 opened = -1
-        return options
+
+        if last is not None:
+            rest = value[last:].strip()
+        else:
+            rest = None
+        return options, rest
 
 
 class AnnotationApplier(object):
@@ -242,6 +254,8 @@
             self._parse_function(node)
         elif isinstance(node, Enum):
             self._parse_enum(node)
+        elif isinstance(node, Bitfield):
+            self._parse_bitfield(node)
         elif isinstance(node, Class):
             self._parse_class(node)
         elif isinstance(node, Interface):
@@ -256,7 +270,7 @@
             self._parse_boxed(node)
 
     def _parse_class(self, class_):
-        block = self._blocks.get(class_.name)
+        block = self._blocks.get(class_.type_name)
         self._parse_version(class_, block)
         self._parse_constructors(class_.constructors)
         self._parse_methods(class_.methods)
@@ -264,14 +278,18 @@
         self._parse_properties(class_, class_.properties)
         self._parse_signals(class_, class_.signals)
         self._parse_fields(class_, class_.fields)
+        if block:
+            class_.doc = block.comment
 
     def _parse_interface(self, interface):
-        block = self._blocks.get(interface.name)
+        block = self._blocks.get(interface.type_name)
         self._parse_version(interface, block)
         self._parse_methods(interface.methods)
         self._parse_properties(interface, interface.properties)
         self._parse_signals(interface, interface.signals)
         self._parse_fields(interface, interface.fields)
+        if block:
+            interface.doc = block.comment
 
     def _parse_record(self, record):
         block = self._blocks.get(record.symbol)
@@ -280,12 +298,16 @@
         self._parse_fields(record, record.fields)
         if isinstance(record, GLibBoxed):
             self._parse_methods(record.methods)
+        if block:
+            record.doc = block.comment
 
     def _parse_boxed(self, boxed):
         block = self._blocks.get(boxed.name)
         self._parse_version(boxed, block)
         self._parse_constructors(boxed.constructors)
         self._parse_methods(boxed.methods)
+        if block:
+            boxed.doc = block.comment
 
     def _parse_union(self, union):
         block = self._blocks.get(union.name)
@@ -293,10 +315,20 @@
         self._parse_constructors(union.constructors)
         if isinstance(union, GLibBoxed):
             self._parse_methods(union.methods)
+        if block:
+            union.doc = block.comment
 
     def _parse_enum(self, enum):
         block = self._blocks.get(enum.symbol)
         self._parse_version(enum, block)
+        if block:
+            enum.doc = block.comment
+
+    def _parse_bitfield(self, bitfield):
+        block = self._blocks.get(bitfield.symbol)
+        self._parse_version(bitfield, block)
+        if block:
+            bitfield.doc = block.comment
 
     def _parse_constructors(self, constructors):
         for ctor in constructors:
@@ -322,12 +354,16 @@
         block = self._blocks.get('%s:%s' % (parent.type_name, prop.name))
         self._parse_version(prop, block)
         self._parse_deprecated(prop, block)
+        if block:
+            prop.doc = block.comment
 
     def _parse_callback(self, callback):
         block = self._blocks.get(callback.ctype)
         self._parse_version(callback, block)
         self._parse_params(callback, callback.parameters, block)
         self._parse_return(callback, callback.retval, block)
+        if block:
+            callback.doc = block.comment
 
     def _parse_function(self, func):
         block = self._blocks.get(func.symbol)
@@ -335,6 +371,8 @@
         self._parse_deprecated(func, block)
         self._parse_params(func, func.parameters, block)
         self._parse_return(func, func.retval, block)
+        if block:
+            func.doc = block.comment
 
     def _parse_signal(self, parent, signal):
         block = self._blocks.get('%s::%s' % (parent.type_name, signal.name))
@@ -359,6 +397,8 @@
                 tag = None
             self._parse_param(signal, param, tag)
         self._parse_return(signal, signal.retval, block)
+        if block:
+            signal.doc = block.comment
 
     def _parse_field(self, parent, field):
         if isinstance(field, Callback):
@@ -373,6 +413,8 @@
         tag = self._get_tag(block, TAG_RETURNS)
         options = getattr(tag, 'options', {})
         self._parse_param_ret_common(parent, return_, options)
+        if tag is not None and tag.comment is not None:
+            return_.doc = tag.comment
 
     def _parse_param(self, parent, param, tag):
         options = getattr(tag, 'options', {})
@@ -383,6 +425,8 @@
                 param.scope = scope.one()
                 param.transfer = PARAM_TRANSFER_NONE
         self._parse_param_ret_common(parent, param, options)
+        if tag is not None and tag.comment is not None:
+            param.doc = tag.comment
 
     def _parse_param_ret_common(self, parent, node, options):
         node.direction = self._extract_direction(node, options)

Modified: trunk/giscanner/ast.py
==============================================================================
--- trunk/giscanner/ast.py	(original)
+++ trunk/giscanner/ast.py	Tue Jan 13 21:13:00 2009
@@ -201,6 +201,7 @@
         self.symbol = symbol
         self.throws = not not throws
         self.is_method = False
+        self.doc = None
 
     def get_parameter_index(self, name):
         for i, parameter in enumerate(self.parameters):
@@ -312,6 +313,7 @@
         self.scope = scope
         self.closure_index = -1
         self.destroy_index = -1
+        self.doc = None
 
     def __repr__(self):
         return 'Parameter(%r, %r)' % (self.name, self.type)
@@ -323,6 +325,7 @@
         Node.__init__(self, name)
         self.symbol = symbol
         self.members = members
+        self.doc = None
 
     def __repr__(self):
         return 'Enum(%r, %r)' % (self.name, self.members)
@@ -334,6 +337,7 @@
         Node.__init__(self, name)
         self.symbol = symbol
         self.members = members
+        self.doc = None
 
     def __repr__(self):
         return 'Bitfield(%r, %r)' % (self.name, self.members)
@@ -358,6 +362,7 @@
         self.constructors = []
         self.symbol = symbol
         self.disguised = disguised
+        self.doc = None
 
 # BW compat, remove
 Struct = Record
@@ -385,6 +390,7 @@
     def __init__(self, rtype, transfer=None):
         TypeContainer.__init__(self, None, rtype, transfer)
         self.direction = PARAM_DIRECTION_OUT
+        self.doc = None
 
     def __repr__(self):
         return 'Return(%r)' % (self.type, )
@@ -403,6 +409,7 @@
         self.constructors = []
         self.properties = []
         self.fields = []
+        self.doc = None
 
     def __repr__(self):
         return '%s(%r, %r, %r)' % (
@@ -419,6 +426,7 @@
         self.properties = []
         self.fields = []
         self.prerequisites = []
+        self.doc = None
 
     def __repr__(self):
         return '%s(%r, %r)' % (
@@ -448,6 +456,7 @@
         self.writable = writable
         self.construct = construct
         self.construct_only = construct_only
+        self.doc = None
 
     def __repr__(self):
         return '%s(%r, %r)' % (
@@ -466,6 +475,7 @@
         self.parameters = parameters
         self.ctype = ctype
         self.throws = False
+        self.doc = None
 
     def __repr__(self):
         return 'Callback(%r, %r, %r)' % (
@@ -479,6 +489,7 @@
         self.fields = []
         self.constructors = []
         self.symbol = symbol
+        self.doc = None
 
     def __repr__(self):
         return 'Union(%r, %r)' % (self.name, self.fields, )

Modified: trunk/giscanner/girwriter.py
==============================================================================
--- trunk/giscanner/girwriter.py	(original)
+++ trunk/giscanner/girwriter.py	Tue Jan 13 21:13:00 2009
@@ -119,6 +119,8 @@
     def _write_function(self, func, tag_name='function'):
         attrs = [('name', func.name),
                  ('c:identifier', func.symbol)]
+        if func.doc:
+            attrs.append(('doc', func.doc))
         self._append_version(func, attrs)
         self._append_deprecated(func, attrs)
         self._append_throws(func, attrs)
@@ -143,6 +145,8 @@
 
         attrs = []
         attrs.append(('transfer-ownership', return_.transfer))
+        if return_.doc:
+            attrs.append(('doc', return_.doc))
         with self.tagcontext('return-value', attrs):
             self._write_type(return_.type)
 
@@ -171,6 +175,8 @@
             attrs.append(('closure', '%d' % parameter.closure_index))
         if parameter.destroy_index >= 0:
             attrs.append(('destroy', '%d' % parameter.destroy_index))
+        if parameter.doc:
+            attrs.append(('doc', parameter.doc))
         with self.tagcontext('parameter', attrs):
             self._write_type(parameter.type)
 
@@ -222,6 +228,8 @@
 
     def _write_enum(self, enum):
         attrs = [('name', enum.name)]
+        if enum.doc:
+            attrs.append(('doc', enum.doc))
         self._append_version(enum, attrs)
         self._append_deprecated(enum, attrs)
         if isinstance(enum, GLibEnum):
@@ -236,6 +244,8 @@
 
     def _write_bitfield(self, bitfield):
         attrs = [('name', bitfield.name)]
+        if bitfield.doc:
+            attrs.append(('doc', bitfield.doc))
         self._append_version(bitfield, attrs)
         self._append_deprecated(bitfield, attrs)
         if isinstance(bitfield, GLibFlags):
@@ -265,6 +275,8 @@
     def _write_class(self, node):
         attrs = [('name', node.name),
                  ('c:type', node.ctype)]
+        if node.doc:
+            attrs.append(('doc', node.doc))
         self._append_version(node, attrs)
         self._append_deprecated(node, attrs)
         if isinstance(node, Class):
@@ -303,6 +315,8 @@
     def _write_boxed(self, boxed):
         attrs = [('c:type', boxed.ctype),
                  ('glib:name', boxed.name)]
+        if boxed.doc:
+            attrs.append(('doc', boxed.doc))
         attrs.extend(self._boxed_attrs(boxed))
         with self.tagcontext('glib:boxed', attrs):
             self._write_boxed_ctors_methods(boxed)
@@ -320,12 +334,16 @@
             attrs.append(('construct', '1'))
         if prop.construct_only:
             attrs.append(('construct-only', '1'))
+        if prop.doc:
+            attrs.append(('doc', prop.doc))
         with self.tagcontext('property', attrs):
             self._write_type(prop.type)
 
     def _write_callback(self, callback):
         # FIXME: reuse _write_function
         attrs = [('name', callback.name), ('c:type', callback.ctype)]
+        if callback.doc:
+            attrs.append(('doc', callback.doc))
         self._append_version(callback, attrs)
         self._append_deprecated(callback, attrs)
         self._append_throws(callback, attrs)
@@ -348,6 +366,8 @@
                  ('c:type', record.symbol)]
         if record.disguised:
             attrs.append(('disguised', '1'))
+        if record.doc:
+            attrs.append(('doc', record.doc))
         self._append_version(record, attrs)
         self._append_deprecated(record, attrs)
         if isinstance(record, GLibBoxed):
@@ -362,6 +382,8 @@
     def _write_union(self, union):
         attrs = [('name', union.name),
                  ('c:type', union.symbol)]
+        if union.doc:
+            attrs.append(('doc', union.doc))
         self._append_version(union, attrs)
         self._append_deprecated(union, attrs)
         if isinstance(union, GLibBoxed):
@@ -396,6 +418,8 @@
 
     def _write_signal(self, signal):
         attrs = [('name', signal.name)]
+        if signal.doc:
+            attrs.append(('doc', signal.doc))
         self._append_version(signal, attrs)
         self._append_deprecated(signal, attrs)
         with self.tagcontext('glib:signal', attrs):

Modified: trunk/giscanner/glibast.py
==============================================================================
--- trunk/giscanner/glibast.py	(original)
+++ trunk/giscanner/glibast.py	Tue Jan 13 21:13:00 2009
@@ -136,7 +136,7 @@
         Node.__init__(self, name)
         GLibBoxed.__init__(self, type_name, get_type)
         self.ctype = type_name
-
+        self.doc = None
 
 class GLibInterface(Interface):
 
@@ -159,3 +159,4 @@
         Node.__init__(self, name)
         self.retval = retval
         self.parameters = []
+        self.doc = None

Modified: trunk/tests/scanner/annotation-1.0-expected.gir
==============================================================================
--- trunk/tests/scanner/annotation-1.0-expected.gir	(original)
+++ trunk/tests/scanner/annotation-1.0-expected.gir	Tue Jan 13 21:13:00 2009
@@ -7,24 +7,28 @@
   <include name="GObject" version="2.0"/>
   <include name="utility" version="1.0"/>
   <namespace name="annotation" version="1.0" shared-library="annotation">
-    <callback name="Callback" c:type="AnnotationCallback">
-      <return-value transfer-ownership="none">
+    <callback name="Callback"
+              c:type="AnnotationCallback"
+              doc="This is a callback.">
+      <return-value transfer-ownership="none" doc="array of ints">
         <type name="int" c:type="gint*"/>
       </return-value>
       <parameters>
-        <parameter name="in" transfer-ownership="none">
+        <parameter name="in" transfer-ownership="none" doc="array of ints">
           <type name="int" c:type="gint*"/>
         </parameter>
       </parameters>
     </callback>
-    <callback name="ListCallback" c:type="AnnotationListCallback">
-      <return-value transfer-ownership="container">
+    <callback name="ListCallback"
+              c:type="AnnotationListCallback"
+              doc="This is a callback taking a list.">
+      <return-value transfer-ownership="container" doc="list of strings">
         <type name="GLib.List" c:type="GList*">
           <type name="utf8"/>
         </type>
       </return-value>
       <parameters>
-        <parameter name="in" transfer-ownership="none">
+        <parameter name="in" transfer-ownership="none" doc="list of strings">
           <type name="GLib.List" c:type="GList*">
             <type name="utf8"/>
           </type>
@@ -33,6 +37,7 @@
     </callback>
     <class name="Object"
            c:type="AnnotationObject"
+           doc="This is an object used to test annotations."
            parent="GObject.Object"
            glib:type-name="AnnotationObject"
            glib:get-type="annotation_object_get_type">
@@ -41,19 +46,25 @@
           <type name="int" c:type="gint"/>
         </return-value>
       </method>
-      <method name="out" c:identifier="annotation_object_out">
+      <method name="out"
+              c:identifier="annotation_object_out"
+              doc="This is a test for out arguments">
         <return-value transfer-ownership="none">
           <type name="int" c:type="gint"/>
         </return-value>
         <parameters>
-          <parameter name="outarg" direction="out" transfer-ownership="full">
+          <parameter name="outarg"
+                     direction="out"
+                     transfer-ownership="full"
+                     doc="This is an argument test">
             <type name="int" c:type="int*"/>
           </parameter>
         </parameters>
       </method>
       <method name="create_object"
-              c:identifier="annotation_object_create_object">
-        <return-value transfer-ownership="full">
+              c:identifier="annotation_object_create_object"
+              doc="Test returning a caller-owned object">
+        <return-value transfer-ownership="full" doc="The object">
           <type name="GObject.Object" c:type="GObject*"/>
         </return-value>
       </method>
@@ -68,35 +79,44 @@
         </parameters>
       </method>
       <method name="notrans" c:identifier="annotation_object_notrans">
-        <return-value transfer-ownership="none">
+        <return-value transfer-ownership="none"
+                      doc="An object, not referenced">
           <type name="GObject.Object" c:type="GObject*"/>
         </return-value>
       </method>
-      <method name="inout" c:identifier="annotation_object_inout">
+      <method name="inout"
+              c:identifier="annotation_object_inout"
+              doc="This is a test for out arguments">
         <return-value transfer-ownership="none">
           <type name="int" c:type="gint"/>
         </return-value>
         <parameters>
           <parameter name="inoutarg"
                      direction="inout"
-                     transfer-ownership="full">
+                     transfer-ownership="full"
+                     doc="This is an argument test">
             <type name="int" c:type="int*"/>
           </parameter>
         </parameters>
       </method>
-      <method name="inout2" c:identifier="annotation_object_inout2">
+      <method name="inout2"
+              c:identifier="annotation_object_inout2"
+              doc="This is a second test for out arguments">
         <return-value transfer-ownership="none">
           <type name="int" c:type="gint"/>
         </return-value>
         <parameters>
           <parameter name="inoutarg"
                      direction="inout"
-                     transfer-ownership="full">
+                     transfer-ownership="full"
+                     doc="This is an argument test">
             <type name="int" c:type="int*"/>
           </parameter>
         </parameters>
       </method>
-      <method name="inout3" c:identifier="annotation_object_inout3">
+      <method name="inout3"
+              c:identifier="annotation_object_inout3"
+              doc="This is a 3th test for out arguments">
         <return-value transfer-ownership="none">
           <type name="int" c:type="gint"/>
         </return-value>
@@ -104,61 +124,89 @@
           <parameter name="inoutarg"
                      direction="inout"
                      transfer-ownership="full"
-                     allow-none="1">
+                     allow-none="1"
+                     doc="This is an argument test">
             <type name="int" c:type="int*"/>
           </parameter>
         </parameters>
       </method>
-      <method name="in" c:identifier="annotation_object_in">
+      <method name="in"
+              c:identifier="annotation_object_in"
+              doc="This is a test for in arguments">
         <return-value transfer-ownership="none">
           <type name="int" c:type="gint"/>
         </return-value>
         <parameters>
-          <parameter name="inarg" transfer-ownership="none">
+          <parameter name="inarg"
+                     transfer-ownership="none"
+                     doc="This is an argument test">
             <type name="int" c:type="int*"/>
           </parameter>
         </parameters>
       </method>
-      <method name="calleeowns" c:identifier="annotation_object_calleeowns">
+      <method name="calleeowns"
+              c:identifier="annotation_object_calleeowns"
+              doc="This is a test for out arguments; GObject defaults to transfer">
         <return-value transfer-ownership="none">
           <type name="int" c:type="gint"/>
         </return-value>
         <parameters>
-          <parameter name="toown" direction="out" transfer-ownership="full">
+          <parameter name="toown"
+                     direction="out"
+                     transfer-ownership="full"
+                     doc="a #GObject">
             <type name="GObject.Object" c:type="GObject**"/>
           </parameter>
         </parameters>
       </method>
-      <method name="calleesowns" c:identifier="annotation_object_calleesowns">
+      <method name="calleesowns"
+              c:identifier="annotation_object_calleesowns"
+              doc="This is a test for out arguments, one transferred, other not">
         <return-value transfer-ownership="none">
           <type name="int" c:type="gint"/>
         </return-value>
         <parameters>
-          <parameter name="toown1" direction="out" transfer-ownership="full">
+          <parameter name="toown1"
+                     direction="out"
+                     transfer-ownership="full"
+                     doc="a #GObject">
             <type name="GObject.Object" c:type="GObject**"/>
           </parameter>
-          <parameter name="toown2" direction="out" transfer-ownership="none">
+          <parameter name="toown2"
+                     direction="out"
+                     transfer-ownership="none"
+                     doc="a #GObject">
             <type name="GObject.Object" c:type="GObject**"/>
           </parameter>
         </parameters>
       </method>
-      <method name="get_strings" c:identifier="annotation_object_get_strings">
-        <return-value transfer-ownership="full">
+      <method name="get_strings"
+              c:identifier="annotation_object_get_strings"
+              doc="This is a test for returning a list of strings, where
+each string needs to be freed.">
+        <return-value transfer-ownership="full" doc="list of strings">
           <type name="GLib.List" c:type="GList*">
             <type name="utf8"/>
           </type>
         </return-value>
       </method>
-      <method name="get_hash" c:identifier="annotation_object_get_hash">
-        <return-value transfer-ownership="full">
+      <method name="get_hash"
+              c:identifier="annotation_object_get_hash"
+              doc="This is a test for returning a hash table mapping strings to
+objects.">
+        <return-value transfer-ownership="full" doc="hash table">
           <type name="GLib.HashTable" c:type="GHashTable*">
             <type name="utf8"/>
             <type name="GObject.Object"/>
           </type>
         </return-value>
       </method>
-      <method name="get_objects" c:identifier="annotation_object_get_objects">
-        <return-value transfer-ownership="container">
+      <method name="get_objects"
+              c:identifier="annotation_object_get_objects"
+              doc="This is a test for returning a list of objects.
+The list itself should be freed, but not the internal objects,
+intentionally similar example to gtk_container_get_children">
+        <return-value transfer-ownership="container" doc="list of objects">
           <type name="GLib.SList" c:type="GSList*">
             <type name="Object"/>
           </type>
@@ -176,12 +224,16 @@
           </parameter>
         </parameters>
       </method>
-      <method name="compute_sum" c:identifier="annotation_object_compute_sum">
+      <method name="compute_sum"
+              c:identifier="annotation_object_compute_sum"
+              doc="Test taking a zero-terminated array">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="nums" transfer-ownership="none">
+          <parameter name="nums"
+                     transfer-ownership="none"
+                     doc="Sequence of numbers">
             <array c:type="int*">
               <type name="int"/>
             </array>
@@ -189,12 +241,15 @@
         </parameters>
       </method>
       <method name="compute_sum_n"
-              c:identifier="annotation_object_compute_sum_n">
+              c:identifier="annotation_object_compute_sum_n"
+              doc="Test taking an array with length parameter">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="nums" transfer-ownership="none">
+          <parameter name="nums"
+                     transfer-ownership="none"
+                     doc="Sequence of numbers">
             <array zero-terminated="0" length="2" c:type="int*">
               <type name="int"/>
             </array>
@@ -205,12 +260,15 @@
         </parameters>
       </method>
       <method name="compute_sum_nz"
-              c:identifier="annotation_object_compute_sum_nz">
+              c:identifier="annotation_object_compute_sum_nz"
+              doc="Test taking a zero-terminated array with length parameter">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="nums" transfer-ownership="none">
+          <parameter name="nums"
+                     transfer-ownership="none"
+                     doc="Sequence of numbers">
             <array length="2" c:type="int*">
               <type name="int"/>
             </array>
@@ -220,32 +278,47 @@
           </parameter>
         </parameters>
       </method>
-      <method name="parse_args" c:identifier="annotation_object_parse_args">
+      <method name="parse_args"
+              c:identifier="annotation_object_parse_args"
+              doc="Test taking a zero-terminated array with length parameter">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="argc" direction="inout" transfer-ownership="full">
+          <parameter name="argc"
+                     direction="inout"
+                     transfer-ownership="full"
+                     doc="Length of the argument vector">
             <type name="int" c:type="int*"/>
           </parameter>
-          <parameter name="argv" direction="inout" transfer-ownership="none">
+          <parameter name="argv"
+                     direction="inout"
+                     transfer-ownership="none"
+                     doc="Argument vector">
             <array length="1" c:type="char***">
               <type name="utf8"/>
             </array>
           </parameter>
         </parameters>
       </method>
-      <method name="string_out" c:identifier="annotation_object_string_out">
+      <method name="string_out"
+              c:identifier="annotation_object_string_out"
+              doc="Test returning a string as an out parameter">
         <return-value transfer-ownership="none">
           <type name="boolean" c:type="gboolean"/>
         </return-value>
         <parameters>
-          <parameter name="str_out" direction="out" transfer-ownership="full">
+          <parameter name="str_out"
+                     direction="out"
+                     transfer-ownership="full"
+                     doc="string return value">
             <type name="utf8" c:type="char**"/>
           </parameter>
         </parameters>
       </method>
-      <method name="foreach" c:identifier="annotation_object_foreach">
+      <method name="foreach"
+              c:identifier="annotation_object_foreach"
+              doc="Test taking a call-scoped callback">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
@@ -253,7 +326,8 @@
           <parameter name="func"
                      transfer-ownership="none"
                      scope="call"
-                     closure="2">
+                     closure="2"
+                     doc="Callback to invoke">
             <type name="ForeachFunc" c:type="AnnotationForeachFunc"/>
           </parameter>
           <parameter name="user_data" transfer-ownership="none">
@@ -261,12 +335,14 @@
           </parameter>
         </parameters>
       </method>
-      <method name="set_data" c:identifier="annotation_object_set_data">
+      <method name="set_data"
+              c:identifier="annotation_object_set_data"
+              doc="Test taking a guchar * with a length.">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="data" transfer-ownership="none">
+          <parameter name="data" transfer-ownership="none" doc="The data">
             <array length="2" c:type="guchar*">
               <type name="uint8"/>
             </array>
@@ -276,12 +352,14 @@
           </parameter>
         </parameters>
       </method>
-      <method name="set_data2" c:identifier="annotation_object_set_data2">
+      <method name="set_data2"
+              c:identifier="annotation_object_set_data2"
+              doc="Test taking a gchar * with a length.">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="data" transfer-ownership="none">
+          <parameter name="data" transfer-ownership="none" doc="The data">
             <array length="2" c:type="gchar*">
               <type name="int8"/>
             </array>
@@ -291,12 +369,15 @@
           </parameter>
         </parameters>
       </method>
-      <method name="set_data3" c:identifier="annotation_object_set_data3">
+      <method name="set_data3"
+              c:identifier="annotation_object_set_data3"
+              doc="Test taking a gchar * with a length, overriding the array element
+type.">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="data" transfer-ownership="none">
+          <parameter name="data" transfer-ownership="none" doc="The data">
             <array length="2" c:type="gpointer">
               <type name="uint8"/>
             </array>
@@ -319,13 +400,16 @@
                 deprecated="Use better-string-property instead"
                 deprecated-version="1.2"
                 writable="1"
-                construct="1">
+                construct="1"
+                doc="This is a property which is a string">
         <type name="utf8" c:type="gchararray"/>
       </property>
       <field name="parent_instance">
         <type name="GObject.Object" c:type="GObject"/>
       </field>
       <glib:signal name="string-signal"
+                   doc="This is a signal which has a broken signal handler,
+it says it&apos;s pointer but it&apos;s actually a string."
                    version="1.0"
                    deprecated="Use other-signal instead"
                    deprecated-version="1.2">
@@ -333,17 +417,21 @@
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="string" transfer-ownership="none">
+          <parameter name="string" transfer-ownership="none" doc="a string">
             <type name="utf8" c:type="gpointer"/>
           </parameter>
         </parameters>
       </glib:signal>
-      <glib:signal name="list-signal">
+      <glib:signal name="list-signal"
+                   doc="This is a signal which takes a list of strings, but it&apos;s not
+known by GObject as it&apos;s only marked as G_TYPE_POINTER">
         <return-value transfer-ownership="full">
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="list" transfer-ownership="container">
+          <parameter name="list"
+                     transfer-ownership="container"
+                     doc="a list of strings">
             <type name="GLib.List" c:type="gpointer">
               <type name="utf8"/>
             </type>
@@ -377,10 +465,16 @@
         <type name="none" c:type="void"/>
       </return-value>
       <parameters>
-        <parameter name="argc" direction="inout" transfer-ownership="full">
+        <parameter name="argc"
+                   direction="inout"
+                   transfer-ownership="full"
+                   doc="The number of args.">
           <type name="int" c:type="int*"/>
         </parameter>
-        <parameter name="argv" direction="inout" transfer-ownership="none">
+        <parameter name="argv"
+                   direction="inout"
+                   transfer-ownership="none"
+                   doc="The arguments.">
           <array length="0" c:type="char***">
             <type name="utf8"/>
           </array>
@@ -388,13 +482,16 @@
       </parameters>
     </function>
     <function name="return_array" c:identifier="annotation_return_array">
-      <return-value transfer-ownership="none">
+      <return-value transfer-ownership="none" doc="The return value">
         <array length="0" c:type="char**">
           <type name="utf8"/>
         </array>
       </return-value>
       <parameters>
-        <parameter name="length" direction="out" transfer-ownership="full">
+        <parameter name="length"
+                   direction="out"
+                   transfer-ownership="full"
+                   doc="Number of return values">
           <type name="int" c:type="int*"/>
         </parameter>
       </parameters>
@@ -406,7 +503,9 @@
         <type name="none" c:type="void"/>
       </return-value>
     </function>
-    <record name="Struct" c:type="_AnnotationStruct">
+    <record name="Struct"
+            c:type="AnnotationStruct"
+            doc="This is a test of an array of object in an field of a struct.">
       <field name="objects" writable="1">
         <array zero-terminated="0" c:type="AnnotationObject*" fixed-size="10">
           <type name="Object"/>

Modified: trunk/tests/scanner/annotation.h
==============================================================================
--- trunk/tests/scanner/annotation.h	(original)
+++ trunk/tests/scanner/annotation.h	Tue Jan 13 21:13:00 2009
@@ -7,6 +7,7 @@
  * AnnotationCallback:
  * @in: (in) (transfer none): array of ints
  *
+ * This is a callback.
  * Return value: (transfer none): array of ints
  */
 typedef const gint* (*AnnotationCallback) (const gint *in);
@@ -15,10 +16,16 @@
  * AnnotationListCallback:
  * @in: (in) (transfer none) (element-type utf8): list of strings
  *
+ * This is a callback taking a list.
  * Return value: (transfer container) (element-type utf8): list of strings
  */
 typedef GList* (*AnnotationListCallback) (GList *in);
 
+/**
+ * AnnotationObject:
+ *
+ * This is an object used to test annotations.
+ */
 typedef struct _AnnotationObject          AnnotationObject;
 typedef struct _AnnotationObjectClass     AnnotationObjectClass;
 
@@ -100,7 +107,12 @@
 char **  annotation_return_array        (int             *length);
 void     annotation_versioned           (void);
 
-struct _AnnotationStruct
+/**
+ * AnnotationStruct:
+ *
+ * This is a test of an array of object in an field of a struct.
+ */
+struct AnnotationStruct
 {
   AnnotationObject *objects[10];
 };

Modified: trunk/tests/scanner/foo-1.0-expected.gir
==============================================================================
--- trunk/tests/scanner/foo-1.0-expected.gir	(original)
+++ trunk/tests/scanner/foo-1.0-expected.gir	Tue Jan 13 21:13:00 2009
@@ -401,7 +401,10 @@
         <type name="none" c:type="void"/>
       </return-value>
       <parameters>
-        <parameter name="r1" direction="inout" transfer-ownership="full">
+        <parameter name="r1"
+                   direction="inout"
+                   transfer-ownership="full"
+                   doc="add to this rect">
           <type name="Rectangle" c:type="FooRectangle*"/>
         </parameter>
         <parameter name="r2" transfer-ownership="none">



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