diff options
author | Colin Walters <walters@verbum.org> | 2011-08-29 22:17:02 -0400 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2011-08-29 22:17:02 -0400 |
commit | cef390f65ffe9e51b103fcb29ee177882f762a0e (patch) | |
tree | 930904227ee8c35adf28300195f5567859b5e65b /giscanner/maintransformer.py | |
parent | 198bbaf8589dc2106a92050e74ad643a9411d047 (diff) | |
download | gobject-introspection-cef390f65ffe9e51b103fcb29ee177882f762a0e.tar.gz |
scanner: Don't try to copy c:type if we're parsing (element-type)
Commit 81abc2eb63317003a11d1484e84698a37e8ec035 tries harder to keep
the c:type if it was overriden by a (type) annotation. However, the
_resolve() function was also called for (element-type), which had
undesirable effects - we'd copy the container c:type to the element
type.
Fix this by splitting out the c:type preservation to only happen when
processing toplevel types.
https://bugzilla.gnome.org/show_bug.cgi?id=656931
Diffstat (limited to 'giscanner/maintransformer.py')
-rw-r--r-- | giscanner/maintransformer.py | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index 3eba1e7a..29d9229d 100644 --- a/giscanner/maintransformer.py +++ b/giscanner/maintransformer.py @@ -300,6 +300,11 @@ usage is void (*_gtk_reserved1)(void);""" text = type_str message.warn_node(parent, "%s: Unknown type: %r" % (text, result.ctype), positions=position) + return result + + def _resolve_toplevel(self, type_str, type_node=None, node=None, parent=None): + """Like _resolve(), but attempt to preserve more attributes of original type.""" + result = self._resolve(type_str, type_node=type_node, node=node, parent=parent) # If we replace a node with a new type (such as an annotated) we # might lose the ctype from the original node. if type_node is not None: @@ -525,8 +530,8 @@ usage is void (*_gtk_reserved1)(void);""" param_type = options.get(OPT_TYPE) if param_type: - node.type = self._resolve(param_type.one(), - node.type, node, parent) + node.type = self._resolve_toplevel(param_type.one(), + node.type, node, parent) caller_allocates = False annotated_direction = None @@ -753,7 +758,7 @@ usage is void (*_gtk_reserved1)(void);""" prop.transfer = self._get_transfer_default(parent, prop) type_tag = block.get(TAG_TYPE) if type_tag: - prop.type = self._resolve(type_tag.value, prop.type, prop, parent) + prop.type = self._resolve_toplevel(type_tag.value, prop.type, prop, parent) def _apply_annotations_signal(self, parent, signal): prefix = self._get_annotation_name(parent) @@ -776,8 +781,8 @@ usage is void (*_gtk_reserved1)(void);""" options = getattr(tag, 'options', {}) param_type = options.get(OPT_TYPE) if param_type: - param.type = self._resolve(param_type.one(), param.type, - param, parent) + param.type = self._resolve_toplevel(param_type.one(), param.type, + param, parent) else: tag = None self._apply_annotations_param(signal, param, tag) |