summaryrefslogtreecommitdiff
path: root/giscanner/maintransformer.py
diff options
context:
space:
mode:
Diffstat (limited to 'giscanner/maintransformer.py')
-rw-r--r--giscanner/maintransformer.py15
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)