From 53b4da85dcb49d1fd3dc5e4033e476119653b214 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Tue, 14 Sep 2010 12:23:59 -0400 Subject: scanner: Parse annotations for typedefs * Explicitly check for ast.Alias in annotation pass * Add "generic" attribs handling for aliases like docs, introspectable=0 etc. https://bugzilla.gnome.org/show_bug.cgi?id=629668 --- giscanner/girparser.py | 1 + giscanner/girwriter.py | 2 ++ giscanner/maintransformer.py | 8 +++++++- 3 files changed, 10 insertions(+), 1 deletion(-) (limited to 'giscanner') diff --git a/giscanner/girparser.py b/giscanner/girparser.py index ab2b29d..582dcc0 100644 --- a/giscanner/girparser.py +++ b/giscanner/girparser.py @@ -179,6 +179,7 @@ class GIRParser(object): alias = ast.Alias(node.attrib['name'], typeval, node.attrib.get(_cns('type'))) + self._parse_generic_attribs(node, alias) self._namespace.append(alias) def _parse_generic_attribs(self, node, obj): diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py index a450bb1..d3b023a 100644 --- a/giscanner/girwriter.py +++ b/giscanner/girwriter.py @@ -154,7 +154,9 @@ and/or use gtk-doc annotations. ''') attrs = [('name', alias.name)] if alias.ctype is not None: attrs.append(('c:type', alias.ctype)) + self._append_node_generic(alias, attrs) with self.tagcontext('alias', attrs): + self._write_generic(alias) self._write_type(alias.target) def _write_callable(self, callable, tag_name, extra_attrs): diff --git a/giscanner/maintransformer.py b/giscanner/maintransformer.py index 74873a3..a7f2b61 100644 --- a/giscanner/maintransformer.py +++ b/giscanner/maintransformer.py @@ -176,7 +176,7 @@ usage is void (*_gtk_reserved1)(void);""" def _get_annotation_name(self, node): if isinstance(node, (ast.Class, ast.Interface, ast.Record, ast.Union, ast.Enum, ast.Bitfield, - ast.Callback)): + ast.Callback, ast.Alias)): if node.ctype is not None: return node.ctype elif isinstance(node, ast.Registered) and node.gtype_name is not None: @@ -190,6 +190,8 @@ usage is void (*_gtk_reserved1)(void);""" def _pass_read_annotations(self, node, chain): if not node.namespace: return False + if isinstance(node, ast.Alias): + self._apply_annotations_alias(node, chain) if isinstance(node, ast.Function): self._apply_annotations_function(node, chain) if isinstance(node, ast.Callback): @@ -500,6 +502,10 @@ usage is void (*_gtk_reserved1)(void);""" if OPT_FOREIGN in block.options: node.foreign = True + def _apply_annotations_alias(self, node, chain): + block = self._get_block(node) + self._apply_annotations_annotated(node, block) + def _apply_annotations_param(self, parent, param, tag): if tag: options = tag.options -- cgit v1.2.3