Bug 556610 – giscanner/girparser.py drops parameter options
authorJohan Bilien <jobi@via.ecp.fr>
Fri, 17 Oct 2008 09:29:34 +0000 (09:29 +0000)
committerJohan Bilien <jobi@src.gnome.org>
Fri, 17 Oct 2008 09:29:34 +0000 (09:29 +0000)
2008-10-16  Johan Bilien  <jobi@via.ecp.fr>

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
giscanner/ast.py
giscanner/girparser.py
tests/scanner/Makefile.am

index da8e574..55d3789 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-10-16  Johan Bilien  <jobi@via.ecp.fr>
+
+       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  <walters@verbum.org>
 
        Bug 556185 - segfault on g_callable_info_get_return_type
index f4bc05c..588387d 100644 (file)
@@ -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)
index 5649e03..933bb97 100644 (file)
@@ -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')))
index 78b2a62..019feae 100644 (file)
@@ -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=. \