summaryrefslogtreecommitdiff
path: root/giscanner/girparser.py
diff options
context:
space:
mode:
Diffstat (limited to 'giscanner/girparser.py')
-rw-r--r--giscanner/girparser.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/giscanner/girparser.py b/giscanner/girparser.py
index 1db5c6e4..852874d9 100644
--- a/giscanner/girparser.py
+++ b/giscanner/girparser.py
@@ -280,17 +280,29 @@ class GIRParser(object):
if typenode is not None:
return Type(typenode.attrib['name'],
typenode.attrib.get(_cns('type')))
+
typenode = node.find(_corens('array'))
if typenode is not None:
- ret = Array(typenode.attrib.get(_cns('type')),
- self._parse_type(typenode))
+
+ array_type = typenode.attrib.get(_cns('type'))
+ if array_type.startswith('GArray*') or \
+ array_type.startswith('GPtrArray*') or \
+ array_type.startswith('GByteArray*'):
+ element_type = None
+ else:
+ element_type = self._parse_type(typenode)
+
+ ret = Array(None, array_type, element_type)
+
lenidx = typenode.attrib.get('length')
if lenidx:
ret.length_param_index = int(lenidx)
return ret
+
typenode = node.find(_corens('varargs'))
if typenode is not None:
return Varargs()
+
raise ValueError("Couldn't parse type of node %r; children=%r",
node, list(node))