diff options
author | Colin Walters <walters@src.gnome.org> | 2008-10-23 12:37:10 +0000 |
---|---|---|
committer | Colin Walters <walters@src.gnome.org> | 2008-10-23 12:37:10 +0000 |
commit | 6191922f4e176af844a8a4f883e0b25ce74ad43b (patch) | |
tree | f64bc49fbd404267793dfef9a6a47466b6f99f34 | |
parent | 7553fc1f909054a1606fb852e26d4631079ddec4 (diff) | |
download | gobject-introspection-6191922f4e176af844a8a4f883e0b25ce74ad43b.tar.gz |
Always write out transfer-ownership attribute
svn path=/trunk/; revision=787
-rw-r--r-- | giscanner/ast.py | 35 | ||||
-rw-r--r-- | giscanner/glibtransformer.py | 2 | ||||
-rw-r--r-- | giscanner/transformer.py | 113 | ||||
-rw-r--r-- | tests/scanner/GtkFrob-1.0-expected.gir | 2 | ||||
-rw-r--r-- | tests/scanner/annotation-1.0-expected.gir | 47 | ||||
-rw-r--r-- | tests/scanner/drawable-1.0-expected.gir | 20 | ||||
-rw-r--r-- | tests/scanner/drawable-injected-1.0-expected.gir | 20 | ||||
-rw-r--r-- | tests/scanner/foo-1.0-expected.gir | 132 | ||||
-rw-r--r-- | tests/scanner/foo.c | 11 |
9 files changed, 227 insertions, 155 deletions
diff --git a/giscanner/ast.py b/giscanner/ast.py index a66c3654..6ee98c1f 100644 --- a/giscanner/ast.py +++ b/giscanner/ast.py @@ -264,24 +264,32 @@ class Alias(Node): return 'Alias(%r, %r)' % (self.name, self.target) -class Parameter(Node): +class TypeContainer(Node): - def __init__(self, name, typenode, direction=PARAM_DIRECTION_IN, - transfer=None, allow_none=False): + def __init__(self, name, typenode, transfer): Node.__init__(self, name) self.type = typenode - if direction in [PARAM_DIRECTION_IN, PARAM_DIRECTION_OUT, - PARAM_DIRECTION_INOUT]: - self.direction = direction - else: - self.direction = PARAM_DIRECTION_IN - if transfer in [PARAM_TRANSFER_NONE, PARAM_TRANSFER_CONTAINER, PARAM_TRANSFER_FULL]: self.transfer = transfer else: self.transfer = None + # transformer.py overrides this as needed + self.transfer_inferred = False + + +class Parameter(TypeContainer): + + def __init__(self, name, typenode, direction=PARAM_DIRECTION_IN, + transfer=None, allow_none=False): + TypeContainer.__init__(self, name, typenode, transfer) + if direction in [PARAM_DIRECTION_IN, PARAM_DIRECTION_OUT, + PARAM_DIRECTION_INOUT]: + self.direction = direction + else: + self.direction = PARAM_DIRECTION_IN + self.allow_none = not not allow_none def __repr__(self): @@ -336,15 +344,10 @@ class Field(Node): return 'Field(%r, %r)' % (self.name, self.type) -class Return(Node): +class Return(TypeContainer): def __init__(self, rtype, transfer=None): - Node.__init__(self) - self.type = rtype - if transfer is None and rtype.name in ['utf8', 'filename']: - self.transfer = 'full' - else: - self.transfer = transfer + TypeContainer.__init__(self, None, rtype, transfer) def __repr__(self): return 'Return(%r)' % (self.type, ) diff --git a/giscanner/glibtransformer.py b/giscanner/glibtransformer.py index 856db225..a2c8f43a 100644 --- a/giscanner/glibtransformer.py +++ b/giscanner/glibtransformer.py @@ -784,7 +784,7 @@ class GLibTransformer(object): else: is_out = True if (is_out and - param.transfer is None and + (param.transfer is None or param.transfer_inferred) and (param.type.name == 'GObject.Object' or (self._namespace_name == 'GObject' and param.type.name == 'Object'))): diff --git a/giscanner/transformer.py b/giscanner/transformer.py index 7e74f4d8..ef15eff8 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -26,7 +26,7 @@ from giscanner.ast import (Callback, Enum, Function, Namespace, Member, Type, Alias, Interface, Class, Node, Union, List, Map, Varargs, Constant, type_name_from_ctype, type_names, default_array_types, default_out_types, - TYPE_STRING) + TYPE_STRING, BASIC_GIR_TYPES, TYPE_NONE) from giscanner.config import DATADIR from .glibast import GLibBoxed from giscanner.sourcescanner import ( @@ -311,7 +311,7 @@ class Transformer(object): symbol.base_type.base_type.type == CTYPE_FUNCTION): node = self._create_callback(symbol) else: - ftype = self._create_type(symbol.base_type, {}) + ftype = self._create_type(symbol.base_type, {}, True) # Fields are assumed to be read-write # (except for Objects, see also glibtransformer.py) node = Field(symbol.ident, ftype, symbol.ident, @@ -361,7 +361,7 @@ class Transformer(object): # this ensures we turn e.g. plain "guint" => "int" return type_name_from_ctype(derefed) - def _create_type(self, source_type, options): + def _create_type(self, source_type, options, is_param): ctype = self._create_source_type(source_type) if ctype == 'va_list': raise SkipError() @@ -377,9 +377,10 @@ class Transformer(object): contained_type = self._parse_ctype(param[0]) else: contained_type = None - return List(ctype.replace('*', ''), - ctype, - contained_type) + derefed_name = self._parse_ctype(ctype) + rettype = List(derefed_name, + ctype, + contained_type) elif ctype in self._map_ctypes: param = options.get('element-type') if param: @@ -388,31 +389,26 @@ class Transformer(object): else: key_type = None value_type = None - return Map(ctype.replace('*', ''), - ctype, - key_type, value_type) + derefed_name = self._parse_ctype(ctype) + rettype = Map(derefed_name, + ctype, + key_type, value_type) elif (ctype in default_array_types) or ('array' in options): - derefed = ctype[:-1] # strip the * - result = Array(ctype, - self._parse_ctype(derefed)) + derefed_name = ctype[:-1] # strip the * + rettype = Array(ctype, + self._parse_ctype(derefed_name)) array_opts = options.get('array') if array_opts: (_, len_name) = array_opts[0].split('=') - result.length_param_name = len_name - return result - - # string memory management - we just look at 'const' - if (type_name_from_ctype(ctype) == TYPE_STRING - and 'transfer' not in options): - if source_type.base_type.type_qualifier & TYPE_QUALIFIER_CONST: - options['transfer'] = ['none'] - else: - options['transfer'] = ['full'] - - derefed_name = self._parse_ctype(ctype) + rettype.length_param_name = len_name + else: + derefed_name = self._parse_ctype(ctype) + rettype = Type(derefed_name, ctype) - # deduce direction for some types passed by reference - if (not ('out' in options or + # Deduce direction for some types passed by reference that + # aren't arrays; modifies the options array. + if ('array' not in options and + not ('out' in options or 'in' in options or 'inout' in options or 'in-out' in options) and @@ -420,7 +416,57 @@ class Transformer(object): derefed_name in default_out_types): options['out'] = [] - return Type(derefed_name, ctype) + if 'transfer' in options: + # Transfer is specified, we don't question it. + return rettype + + canontype = type_name_from_ctype(ctype) + + # Since no transfer is specified, we drop into a bunch of + # heuristics to guess it. This mutates the options array to + # set the 'transfer' option. + # Note that we inferred the transfer + options['transfer-inferred'] = [] + stype = source_type + if canontype == TYPE_STRING: + # It's a string - we just look at 'const' + if source_type.base_type.type_qualifier & TYPE_QUALIFIER_CONST: + options['transfer'] = ['none'] + else: + options['transfer'] = ['full'] + elif 'array' in options or stype.type == CTYPE_ARRAY: + # It's rare to mutate arrays in public GObject APIs + options['transfer'] = ['none'] + elif (canontype in BASIC_GIR_TYPES or + canontype == TYPE_NONE or + stype.type == CTYPE_ENUM): + # Basic types default to 'none' + options['transfer'] = ['none'] + elif (stype.type == CTYPE_POINTER and + stype.base_type.type_qualifier & TYPE_QUALIFIER_CONST): + # Anything with 'const' gets none + options['transfer'] = ['none'] + elif is_param and stype.type == CTYPE_POINTER: + # For generic pointer types, let's look at the argument + # direction. An out/inout argument gets full, everything + # else none. + if ('out' in options or + 'inout' in options or + 'in-out' in options): + options['transfer'] = ['full'] + else: + options['transfer'] = ['none'] + else: + # For anything else we default to none for parameters; + # this covers enums and possibly some other corner cases. + # Return values of structures and the like will end up + # full. + if is_param: + options['transfer'] = ['none'] + else: + options['transfer'] = ['full'] + + return rettype def _handle_generic_param_options(self, param, options): for option, data in options.iteritems(): @@ -432,13 +478,17 @@ class Transformer(object): else: depth = 'full' param.transfer = depth + elif option == 'transfer-inferred': + # This is a purely internal flag; we don't expect + # people to write it + param.transfer_inferred = True def _create_parameter(self, symbol, options): options = self._parse_options(options) if symbol.type == CSYMBOL_TYPE_ELLIPSIS: ptype = Varargs() else: - ptype = self._create_type(symbol.base_type, options) + ptype = self._create_type(symbol.base_type, options, True) param = Parameter(symbol.ident, ptype) for option, data in options.iteritems(): if option in ['in-out', 'inout']: @@ -451,7 +501,7 @@ class Transformer(object): param.allow_none = True elif option.startswith(('element-type', 'array')): pass - elif option == 'transfer': + elif option in ('transfer', 'transfer-inferred'): pass else: print 'Unhandled parameter annotation option: %r' % ( @@ -464,12 +514,13 @@ class Transformer(object): options_map = {} else: options_map = self._parse_options(options) - rtype = self._create_type(source_type, options_map) + rtype = self._create_type(source_type, options_map, False) rtype = self.resolve_param_type(rtype) return_ = Return(rtype) self._handle_generic_param_options(return_, options_map) for option, data in options_map.iteritems(): - if option in ('transfer', 'element-type', 'out'): + if option in ('transfer', 'transfer-inferred', + 'element-type', 'out'): pass else: print 'Unhandled return type annotation option: %r' % ( diff --git a/tests/scanner/GtkFrob-1.0-expected.gir b/tests/scanner/GtkFrob-1.0-expected.gir index 8d7c3329..96a7f204 100644 --- a/tests/scanner/GtkFrob-1.0-expected.gir +++ b/tests/scanner/GtkFrob-1.0-expected.gir @@ -8,7 +8,7 @@ <namespace name="GtkFrob" version="1.0" shared-library="gtkfrob"> <function name="language_manager_get_default" c:identifier="gtk_frob_language_manager_get_default"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> </function> diff --git a/tests/scanner/annotation-1.0-expected.gir b/tests/scanner/annotation-1.0-expected.gir index 0bd230f0..4f080dc0 100644 --- a/tests/scanner/annotation-1.0-expected.gir +++ b/tests/scanner/annotation-1.0-expected.gir @@ -37,16 +37,16 @@ glib:type-name="AnnotationObject" glib:get-type="annotation_object_get_type"> <method name="method" c:identifier="annotation_object_method"> - <return-value> + <return-value transfer-ownership="none"> <type name="int" c:type="gint"/> </return-value> </method> <method name="out" c:identifier="annotation_object_out"> - <return-value> + <return-value transfer-ownership="none"> <type name="int" c:type="gint"/> </return-value> <parameters> - <parameter name="outarg" direction="out"> + <parameter name="outarg" direction="out" transfer-ownership="full"> <type name="int" c:type="int*"/> </parameter> </parameters> @@ -73,47 +73,54 @@ </return-value> </method> <method name="inout" c:identifier="annotation_object_inout"> - <return-value> + <return-value transfer-ownership="none"> <type name="int" c:type="gint"/> </return-value> <parameters> - <parameter name="inoutarg" direction="inout"> + <parameter name="inoutarg" + direction="inout" + transfer-ownership="full"> <type name="int" c:type="int*"/> </parameter> </parameters> </method> <method name="inout2" c:identifier="annotation_object_inout2"> - <return-value> + <return-value transfer-ownership="none"> <type name="int" c:type="gint"/> </return-value> <parameters> - <parameter name="inoutarg" direction="inout"> + <parameter name="inoutarg" + direction="inout" + transfer-ownership="full"> <type name="int" c:type="int*"/> </parameter> </parameters> </method> <method name="inout3" c:identifier="annotation_object_inout3"> - <return-value> + <return-value transfer-ownership="none"> <type name="int" c:type="gint"/> </return-value> <parameters> - <parameter name="inoutarg" direction="inout" allow-none="1"> + <parameter name="inoutarg" + direction="inout" + transfer-ownership="full" + allow-none="1"> <type name="int" c:type="int*"/> </parameter> </parameters> </method> <method name="in" c:identifier="annotation_object_in"> - <return-value> + <return-value transfer-ownership="none"> <type name="int" c:type="gint"/> </return-value> <parameters> - <parameter name="inarg"> + <parameter name="inarg" transfer-ownership="none"> <type name="int" c:type="int*"/> </parameter> </parameters> </method> <method name="calleeowns" c:identifier="annotation_object_calleeowns"> - <return-value> + <return-value transfer-ownership="none"> <type name="int" c:type="gint"/> </return-value> <parameters> @@ -123,7 +130,7 @@ </parameters> </method> <method name="calleesowns" c:identifier="annotation_object_calleesowns"> - <return-value> + <return-value transfer-ownership="none"> <type name="int" c:type="gint"/> </return-value> <parameters> @@ -150,11 +157,11 @@ </return-value> </method> <method name="use_buffer" c:identifier="annotation_object_use_buffer"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="bytes"> + <parameter name="bytes" transfer-ownership="none"> <array c:type="guchar*"> <type name="uint8"/> </array> @@ -162,11 +169,11 @@ </parameters> </method> <method name="compute_sum" c:identifier="annotation_object_compute_sum"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="nums"> + <parameter name="nums" transfer-ownership="none"> <array c:type="int*"> <type name="int"/> </array> @@ -175,16 +182,16 @@ </method> <method name="compute_sum_n" c:identifier="annotation_object_compute_sum_n"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="nums"> + <parameter name="nums" transfer-ownership="none"> <array length="2" c:type="int*"> <type name="int"/> </array> </parameter> - <parameter name="n_nums"> + <parameter name="n_nums" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> </parameters> diff --git a/tests/scanner/drawable-1.0-expected.gir b/tests/scanner/drawable-1.0-expected.gir index 0e87a928..f66d6d03 100644 --- a/tests/scanner/drawable-1.0-expected.gir +++ b/tests/scanner/drawable-1.0-expected.gir @@ -14,37 +14,37 @@ glib:type-name="TestDrawable" glib:get-type="test_drawable_get_type"> <method name="do_foo" c:identifier="test_drawable_do_foo"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="x"> + <parameter name="x" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> </parameters> </method> <method name="get_origin" c:identifier="test_drawable_get_origin"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="x" direction="out"> + <parameter name="x" direction="out" transfer-ownership="full"> <type name="int" c:type="int*"/> </parameter> - <parameter name="y" direction="out"> + <parameter name="y" direction="out" transfer-ownership="full"> <type name="int" c:type="int*"/> </parameter> </parameters> </method> <method name="get_size" c:identifier="test_drawable_get_size"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="width" direction="out"> + <parameter name="width" direction="out" transfer-ownership="full"> <type name="uint" c:type="guint*"/> </parameter> - <parameter name="height" direction="out"> + <parameter name="height" direction="out" transfer-ownership="full"> <type name="uint" c:type="guint*"/> </parameter> </parameters> @@ -52,11 +52,11 @@ <method name="do_foo_maybe_throw" c:identifier="test_drawable_do_foo_maybe_throw" throws="1"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="x"> + <parameter name="x" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> </parameters> diff --git a/tests/scanner/drawable-injected-1.0-expected.gir b/tests/scanner/drawable-injected-1.0-expected.gir index cf343275..e4d46840 100644 --- a/tests/scanner/drawable-injected-1.0-expected.gir +++ b/tests/scanner/drawable-injected-1.0-expected.gir @@ -14,37 +14,37 @@ glib:type-name="TestDrawable" glib:get-type="test_drawable_get_type"> <method name="do_foo" c:identifier="test_drawable_do_foo"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="x"> + <parameter name="x" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> </parameters> </method> <method name="get_origin" c:identifier="test_drawable_get_origin"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="x" direction="out"> + <parameter name="x" direction="out" transfer-ownership="full"> <type name="int" c:type="int*"/> </parameter> - <parameter name="y" direction="out"> + <parameter name="y" direction="out" transfer-ownership="full"> <type name="int" c:type="int*"/> </parameter> </parameters> </method> <method name="get_size" c:identifier="test_drawable_get_size"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="width" direction="out"> + <parameter name="width" direction="out" transfer-ownership="full"> <type name="uint" c:type="guint*"/> </parameter> - <parameter name="height" direction="out"> + <parameter name="height" direction="out" transfer-ownership="full"> <type name="uint" c:type="guint*"/> </parameter> </parameters> @@ -52,11 +52,11 @@ <method name="do_foo_maybe_throw" c:identifier="test_drawable_do_foo_maybe_throw" throws="1"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="x"> + <parameter name="x" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> </parameters> diff --git a/tests/scanner/foo-1.0-expected.gir b/tests/scanner/foo-1.0-expected.gir index 88da1460..9b4f9bf3 100644 --- a/tests/scanner/foo-1.0-expected.gir +++ b/tests/scanner/foo-1.0-expected.gir @@ -15,11 +15,11 @@ glib:type-name="FooInterface" glib:get-type="foo_interface_get_type"> <callback name="do_foo" c:type="do_foo"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="self"> + <parameter name="self" transfer-ownership="none"> <type name="Interface" c:type="FooInterface*"/> </parameter> </parameters> @@ -30,11 +30,11 @@ <type name="GObject.TypeInterface" c:type="GTypeInterface"/> </field> <callback name="do_foo" c:type="do_foo"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="self"> + <parameter name="self" transfer-ownership="none"> <type name="Interface" c:type="FooInterface*"/> </parameter> </parameters> @@ -47,34 +47,34 @@ glib:get-type="foo_object_get_type"> <implements name="Interface"/> <constructor name="new" c:identifier="foo_object_new"> - <return-value> + <return-value transfer-ownership="full"> <type name="Object" c:type="FooObject*"/> </return-value> </constructor> <method name="external_type" c:identifier="foo_object_external_type"> - <return-value> + <return-value transfer-ownership="full"> <type name="utility.Object" c:type="UtilityObject*"/> </return-value> </method> <method name="various" c:identifier="foo_object_various"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="data"> + <parameter name="data" transfer-ownership="none"> <type name="any" c:type="void*"/> </parameter> - <parameter name="some_type"> + <parameter name="some_type" transfer-ownership="none"> <type name="GType" c:type="GType"/> </parameter> </parameters> </method> <method name="take_all" c:identifier="foo_object_take_all"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="x"> + <parameter name="x" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> <parameter> @@ -84,17 +84,17 @@ </parameters> </method> <method name="with_tdef" c:identifier="foo_object_with_tdef"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="blah"> + <parameter name="blah" transfer-ownership="none"> <type name="List" c:type="FooList*"/> </parameter> </parameters> </method> <method name="new_cookie" c:identifier="foo_object_new_cookie"> - <return-value> + <return-value transfer-ownership="full"> <type name="ObjectCookie" c:type="FooObjectCookie"/> </return-value> <parameters> @@ -104,11 +104,11 @@ </parameters> </method> <method name="is_it_time_yet" c:identifier="foo_object_is_it_time_yet"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="time"> + <parameter name="time" transfer-ownership="none"> <type name="time_t" c:type="time_t"/> </parameter> </parameters> @@ -124,11 +124,11 @@ </return-value> </method> <method name="handle_glyph" c:identifier="foo_object_handle_glyph"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="glyph"> + <parameter name="glyph" transfer-ownership="none"> <type name="utility.Glyph" c:type="UtilityGlyph"/> </parameter> </parameters> @@ -140,20 +140,20 @@ <type name="GObject.Object" c:type="GObject"/> </field> <callback name="virtual_method" c:type="virtual_method"> - <return-value> + <return-value transfer-ownership="none"> <type name="boolean" c:type="gboolean"/> </return-value> <parameters> - <parameter name="object"> + <parameter name="object" transfer-ownership="none"> <type name="Object" c:type="FooObject*"/> </parameter> - <parameter name="first_param"> + <parameter name="first_param" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> </parameters> </callback> <glib:signal name="signal"> - <return-value transfer-ownership="full"> + <return-value> <type name="utf8" c:type="gchararray"/> </return-value> <parameters> @@ -171,14 +171,14 @@ <type name="GObject.ObjectClass" c:type="GObjectClass"/> </field> <callback name="virtual_method" c:type="virtual_method"> - <return-value> + <return-value transfer-ownership="none"> <type name="boolean" c:type="gboolean"/> </return-value> <parameters> - <parameter name="object"> + <parameter name="object" transfer-ownership="none"> <type name="Object" c:type="FooObject*"/> </parameter> - <parameter name="first_param"> + <parameter name="first_param" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> </parameters> @@ -192,7 +192,7 @@ glib:get-type="foo_subobject_get_type"> <implements name="Interface"/> <constructor name="new" c:identifier="foo_subobject_new"> - <return-value> + <return-value transfer-ownership="full"> <type name="Subobject" c:type="FooSubobject*"/> </return-value> </constructor> @@ -206,7 +206,7 @@ </field> </record> <function name="init" c:identifier="foo_init"> - <return-value> + <return-value transfer-ownership="none"> <type name="int" c:type="gint"/> </return-value> </function> @@ -228,21 +228,21 @@ glib:nick="delta"/> </enumeration> <function name="enum_type_method" c:identifier="foo_enum_type_method"> - <return-value> + <return-value transfer-ownership="none"> <type name="int" c:type="int"/> </return-value> <parameters> - <parameter name="foo_enum"> + <parameter name="foo_enum" transfer-ownership="none"> <type name="EnumType" c:type="FooEnumType"/> </parameter> </parameters> </function> <function name="enum_type_returnv" c:identifier="foo_enum_type_returnv"> - <return-value> + <return-value transfer-ownership="full"> <type name="EnumType" c:type="FooEnumType"/> </return-value> <parameters> - <parameter name="x"> + <parameter name="x" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> </parameters> @@ -280,12 +280,12 @@ glib:type-name="FooBoxed" glib:get-type="foo_boxed_get_type"> <constructor name="new" c:identifier="foo_boxed_new"> - <return-value> + <return-value transfer-ownership="full"> <type name="Boxed" c:type="FooBoxed*"/> </return-value> </constructor> <method name="method" c:identifier="foo_boxed_method"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> </method> @@ -295,23 +295,23 @@ glib:type-name="FooDBusData" glib:get-type="foo_dbus_data_get_type"> <method name="method" c:identifier="foo_dbus_data_method"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> </method> </record> <callback name="Callback" c:type="FooCallback"> - <return-value> + <return-value transfer-ownership="none"> <type name="boolean" c:type="gboolean"/> </return-value> <parameters> - <parameter name="foo"> + <parameter name="foo" transfer-ownership="none"> <type name="Object" c:type="FooObject*"/> </parameter> - <parameter name="b"> + <parameter name="b" transfer-ownership="none"> <type name="boolean" c:type="gboolean"/> </parameter> - <parameter name="data"> + <parameter name="data" transfer-ownership="none"> <type name="any" c:type="gpointer"/> </parameter> </parameters> @@ -342,52 +342,52 @@ </record> <function name="method_external_references" c:identifier="foo_method_external_references"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="object"> + <parameter name="object" transfer-ownership="none"> <type name="utility.Object" c:type="UtilityObject*"/> </parameter> - <parameter name="e"> + <parameter name="e" transfer-ownership="none"> <type name="utility.EnumType" c:type="UtilityEnumType"/> </parameter> - <parameter name="f"> + <parameter name="f" transfer-ownership="none"> <type name="utility.FlagType" c:type="UtilityFlagType"/> </parameter> - <parameter name="s"> + <parameter name="s" transfer-ownership="none"> <type name="utility.Struct" c:type="UtilityStruct"/> </parameter> </parameters> </function> <function name="rectangle_add" c:identifier="foo_rectangle_add"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="r1"> + <parameter name="r1" direction="inout" transfer-ownership="full"> <type name="Rectangle" c:type="FooRectangle*"/> </parameter> - <parameter name="r2"> + <parameter name="r2" transfer-ownership="none"> <type name="Rectangle" c:type="FooRectangle*"/> </parameter> </parameters> </function> <function name="rectangle_new" c:identifier="foo_rectangle_new"> - <return-value> + <return-value transfer-ownership="full"> <type name="Rectangle" c:type="FooRectangle*"/> </return-value> <parameters> - <parameter name="x"> + <parameter name="x" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> - <parameter name="y"> + <parameter name="y" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> - <parameter name="width"> + <parameter name="width" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> - <parameter name="height"> + <parameter name="height" transfer-ownership="none"> <type name="int" c:type="int"/> </parameter> </parameters> @@ -427,24 +427,24 @@ <type name="double" c:type="double"/> </field> <constructor name="new" c:identifier="foo_brect_new"> - <return-value> + <return-value transfer-ownership="full"> <type name="BRect" c:type="FooBRect*"/> </return-value> <parameters> - <parameter name="x"> + <parameter name="x" transfer-ownership="none"> <type name="double" c:type="double"/> </parameter> - <parameter name="y"> + <parameter name="y" transfer-ownership="none"> <type name="double" c:type="double"/> </parameter> </parameters> </constructor> <method name="add" c:identifier="foo_brect_add"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="b2"> + <parameter name="b2" transfer-ownership="none"> <type name="BRect" c:type="FooBRect*"/> </parameter> </parameters> @@ -464,13 +464,13 @@ <type name="BRect" c:type="FooBRect*"/> </field> <constructor name="new" c:identifier="foo_bunion_new"> - <return-value> + <return-value transfer-ownership="full"> <type name="BUnion" c:type="FooBUnion*"/> </return-value> </constructor> <method name="get_contained_type" c:identifier="foo_bunion_get_contained_type"> - <return-value> + <return-value transfer-ownership="none"> <type name="int" c:type="int"/> </return-value> </method> @@ -482,31 +482,31 @@ </union> <function name="test_unsigned_qualifier" c:identifier="foo_test_unsigned_qualifier"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="unsigned_param"> + <parameter name="unsigned_param" transfer-ownership="none"> <type name="uint" c:type="unsigned int"/> </parameter> </parameters> </function> <function name="test_unsigned_type" c:identifier="foo_test_unsigned_type"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="unsigned_param"> + <parameter name="unsigned_param" transfer-ownership="none"> <type name="uint" c:type="unsigned"/> </parameter> </parameters> </function> <function name="test_string_array" c:identifier="foo_test_string_array"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="array"> + <parameter name="array" transfer-ownership="none"> <array c:type="char**"> <type name="utf8"/> </array> @@ -515,11 +515,11 @@ </function> <function name="test_string_array_with_g" c:identifier="foo_test_string_array_with_g"> - <return-value> + <return-value transfer-ownership="none"> <type name="none" c:type="void"/> </return-value> <parameters> - <parameter name="array"> + <parameter name="array" transfer-ownership="none"> <array c:type="gchar**"> <type name="utf8"/> </array> diff --git a/tests/scanner/foo.c b/tests/scanner/foo.c index b60988b0..f28e3410 100644 --- a/tests/scanner/foo.c +++ b/tests/scanner/foo.c @@ -385,3 +385,14 @@ void foo_test_string_array (char **array) { } + +/** + * foo_rectangle_add: + * @r1: (inout): add to this rect + * @r2: source rectangle + */ +void +foo_rectangle_add(FooRectangle *r1, const FooRectangle *r2) +{ + +} |