summaryrefslogtreecommitdiff
path: root/giscanner/girparser.py
diff options
context:
space:
mode:
authorStef Walter <stefw@gnome.org>2013-10-28 22:13:47 +0100
committerColin Walters <walters@verbum.org>2013-10-28 17:32:27 -0400
commit288b339edf262f1dba4e87a9faef46cc79749bd5 (patch)
tree665063f59d802db644f8496f8295d2478443ab08 /giscanner/girparser.py
parent95cd591fb7e855d280505168444894e729bb39f8 (diff)
downloadgobject-introspection-288b339edf262f1dba4e87a9faef46cc79749bd5.tar.gz
giscanner: Test fixups for field annotations and documentation
Related to: https://bugzilla.gnome.org/show_bug.cgi?id=710561
Diffstat (limited to 'giscanner/girparser.py')
-rw-r--r--giscanner/girparser.py19
1 files changed, 12 insertions, 7 deletions
diff --git a/giscanner/girparser.py b/giscanner/girparser.py
index d01e753c..25e9035d 100644
--- a/giscanner/girparser.py
+++ b/giscanner/girparser.py
@@ -331,7 +331,7 @@ class GIRParser(object):
for i, paramnode in enumerate(self._find_children(parameters_node,
_corens('parameter'))):
param = parameters[i]
- self._parse_type_second_pass(func, paramnode, param.type)
+ self._parse_type_array_length(parameters, paramnode, param.type)
closure = paramnode.attrib.get('closure')
if closure:
idx = int(closure)
@@ -343,7 +343,7 @@ class GIRParser(object):
assert idx < len(parameters), "%d >= %d" % (idx, len(parameters))
param.destroy_name = parameters[idx].argname
- self._parse_type_second_pass(func, returnnode, retval.type)
+ self._parse_type_array_length(parameters, returnnode, retval.type)
self._parse_generic_attribs(node, func)
@@ -375,6 +375,9 @@ class GIRParser(object):
func = self._parse_function_common(method, ast.Function, compound)
func.is_method = True
compound.methods.append(func)
+ for i, fieldnode in enumerate(self._find_children(node, _corens('field'))):
+ field = compound.fields[i]
+ self._parse_type_array_length(compound.fields, fieldnode, field.type)
for func in self._find_children(node, _corens('function')):
compound.static_methods.append(
self._parse_function_common(func, ast.Function, compound))
@@ -456,8 +459,8 @@ class GIRParser(object):
return self._parse_type_simple(typenode)
assert False, "Failed to parse toplevel type"
- def _parse_type_second_pass(self, parent, node, typeval):
- """A hack necessary to handle the integer parameter indexes on
+ def _parse_type_array_length(self, siblings, node, typeval):
+ """A hack necessary to handle the integer parameter/field indexes on
array types."""
typenode = node.find(_corens('array'))
if typenode is None:
@@ -465,9 +468,11 @@ class GIRParser(object):
lenidx = typenode.attrib.get('length')
if lenidx is not None:
idx = int(lenidx)
- assert idx < len(parent.parameters), "%r %d >= %d" % (parent, idx,
- len(parent.parameters))
- typeval.length_param_name = parent.parameters[idx].argname
+ assert idx < len(siblings), "%r %d >= %d" % (parent, idx, len(siblings))
+ if isinstance(siblings[idx], ast.Field):
+ typeval.length_param_name = siblings[idx].name
+ else:
+ typeval.length_param_name = siblings[idx].argname
def _parse_boxed(self, node):
obj = ast.Boxed(node.attrib[_glibns('name')],