From 38dad4bdbf57895d21b20681b1f3ca71ed8f18ac Mon Sep 17 00:00:00 2001 From: Johan Bilien Date: Fri, 17 Oct 2008 09:29:34 +0000 Subject: [PATCH] =?utf8?q?Bug=20556610=20=E2=80=93=20giscanner/girparser.p?= =?utf8?q?y=20drops=20parameter=20options?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2008-10-16 Johan Bilien Bug 556610 – giscanner/girparser.py drops parameter options * tests/scanner/drawable-injected-1.0-expected.gir, tests/scanner/DrawableAdditions.xml: added simple test for injection. * giscanner/ast.py: allow Parameter to take options in the constructor * giscanner/girparser.py: parse parameter options (transfer, direction, allow-none) svn path=/trunk/; revision=738 --- ChangeLog | 10 ++++++++++ giscanner/ast.py | 23 +++++++++++++++++++---- giscanner/girparser.py | 8 ++++++-- tests/scanner/Makefile.am | 5 +++++ 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index da8e574..55d3789 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-10-16 Johan Bilien + + Bug 556610 – giscanner/girparser.py drops parameter options + + * tests/scanner/drawable-injected-1.0-expected.gir, + tests/scanner/DrawableAdditions.xml: added simple test for injection. + * giscanner/ast.py: allow Parameter to take options in the constructor + * giscanner/girparser.py: parse parameter options (transfer, + direction, allow-none) + 2008-10-16 Colin Walters Bug 556185 - segfault on g_callable_info_get_return_type diff --git a/giscanner/ast.py b/giscanner/ast.py index f4bc05c..588387d 100644 --- a/giscanner/ast.py +++ b/giscanner/ast.py @@ -78,6 +78,10 @@ PARAM_DIRECTION_IN = 'in' PARAM_DIRECTION_OUT = 'out' PARAM_DIRECTION_INOUT = 'inout' +PARAM_TRANSFER_NONE = 'none' +PARAM_TRANSFER_CONTAINER = 'container' +PARAM_TRANSFER_FULL = 'full' + type_names = {} for name in GIR_TYPES: type_names[name] = name @@ -260,12 +264,23 @@ class Alias(Node): class Parameter(Node): - def __init__(self, name, typenode): + def __init__(self, name, typenode, direction=PARAM_DIRECTION_IN, + transfer=None, allow_none=False): Node.__init__(self, name) self.type = typenode - self.direction = PARAM_DIRECTION_IN - self.transfer = None - self.allow_none = False + 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 + + self.allow_none = not not allow_none def __repr__(self): return 'Parameter(%r, %r)' % (self.name, self.type) diff --git a/giscanner/girparser.py b/giscanner/girparser.py index 5649e03..933bb97 100644 --- a/giscanner/girparser.py +++ b/giscanner/girparser.py @@ -162,8 +162,12 @@ class GIRParser(object): parameters = [] if (parameters_node is not None): for paramnode in parameters_node.findall(_corens('parameter')): - parameters.append(Parameter(paramnode.attrib.get('name'), - self._parse_type(paramnode))) + param = Parameter(paramnode.attrib.get('name'), + self._parse_type(paramnode), + paramnode.attrib.get('direction'), + paramnode.attrib.get('transfer'), + paramnode.attrib.get('allow-none') == '1') + parameters.append(param) if klass is Callback: return klass(name, retval, parameters, node.attrib.get(_cns('type'))) diff --git a/tests/scanner/Makefile.am b/tests/scanner/Makefile.am index 78b2a62..019feae 100644 --- a/tests/scanner/Makefile.am +++ b/tests/scanner/Makefile.am @@ -59,6 +59,11 @@ drawable-1.0.gir: libdrawable.la drawable.c drawable.h utility-1.0.gir $(SCANNER --output $@ GIRS += drawable-1.0.gir +drawable-injected-1.0.gir: drawable-1.0.gir $(SCANNER) $(SCANNER_LIBS) Makefile + PYTHONPATH=$(top_builddir):$$PYTHONPATH $(CHECK_DEBUG) $(SCANNER) -v \ + --inject drawable-1.0.gir DrawableAdditions.xml $@ +GIRS += drawable-injected-1.0.gir + foo-1.0.gir: libfoo.la foo.c foo.h utility-1.0.gir $(SCANNER) $(SCANNER_LIBS) Makefile PYTHONPATH=$(top_builddir):$$PYTHONPATH $(CHECK_DEBUG) $(SCANNER) -v \ --add-include-path=$(top_builddir)/gir --add-include-path=. \ -- 2.39.2