summaryrefslogtreecommitdiff
path: root/giscanner
diff options
context:
space:
mode:
authorJohan Bilien <jobi@via.ecp.fr>2008-10-15 17:47:08 +0000
committerJohan Bilien <jobi@src.gnome.org>2008-10-15 17:47:08 +0000
commita658109407ab33222584b93ae00aaf135807a456 (patch)
treedb70989e2d19a2647322d5f941dead3a4e0b6e26 /giscanner
parent85dd1cd58ef71a368f52abcb0bf8c4cc4ce0c572 (diff)
downloadgobject-introspection-a658109407ab33222584b93ae00aaf135807a456.tar.gz
Bug 556433 – assume direction = out for int * parameters
2008-10-15 Johan Bilien <jobi@via.ecp.fr> Bug 556433 – assume direction = out for int * parameters * giscanner/ast.py: define a list of types for which, if passed as reference, we assume a default direction of 'out' * giscanner/transformer.py: if a type has type pointer to one of the previously defined types, and no direction is set, assume out. * tests/scanner/drawable.[ch]: added tests for guessed direction=out svn path=/trunk/; revision=710
Diffstat (limited to 'giscanner')
-rw-r--r--giscanner/ast.py4
-rw-r--r--giscanner/transformer.py12
2 files changed, 15 insertions, 1 deletions
diff --git a/giscanner/ast.py b/giscanner/ast.py
index 3d2c76cb..8ee6f7a8 100644
--- a/giscanner/ast.py
+++ b/giscanner/ast.py
@@ -123,6 +123,10 @@ default_array_types = {}
default_array_types['uint8*'] = TYPE_UINT8
default_array_types['char**'] = TYPE_STRING
+# These types, when seen by reference, are interpreted as out parameters
+default_out_types = (TYPE_INT, TYPE_UINT, TYPE_LONG, TYPE_ULONG,
+ TYPE_FLOAT, TYPE_DOUBLE)
+
def type_name_from_ctype(ctype):
return type_names.get(ctype, ctype)
diff --git a/giscanner/transformer.py b/giscanner/transformer.py
index 94181959..c1609aa4 100644
--- a/giscanner/transformer.py
+++ b/giscanner/transformer.py
@@ -25,7 +25,8 @@ from giscanner.ast import (Callback, Enum, Function, Namespace, Member,
Parameter, Return, Array, Struct, Field,
Type, Alias, Interface, Class, Node, Union,
List, Map, Varargs, Constant, type_name_from_ctype,
- type_names, default_array_types, TYPE_STRING)
+ type_names, default_array_types, default_out_types,
+ TYPE_STRING)
from giscanner.config import DATADIR
from .glibast import GLibBoxed
from giscanner.sourcescanner import (
@@ -402,6 +403,15 @@ class Transformer(object):
else:
options['transfer'] = ['full']
+ # deduce direction for some types passed by reference
+ if (not ('out' in options or
+ 'in' in options or
+ 'inout' in options or
+ 'in-out' in options) and
+ source_type.type == CTYPE_POINTER and
+ type_name_from_ctype(resolved_type_name) in default_out_types):
+ options['out'] = []
+
return Type(resolved_type_name, ctype)
def _handle_generic_param_options(self, param, options):