diff options
author | Mathieu Duponchelle <mathieu.duponchelle@opencreed.com> | 2015-07-15 13:11:45 +0200 |
---|---|---|
committer | Mathieu Duponchelle <mathieu@centricular.com> | 2019-07-19 01:21:38 +0200 |
commit | 0f3efc9058e2f249e84c02840fd96b6a413a9201 (patch) | |
tree | ea4628119b6573901c3426a16a74fced1c9c7822 /giscanner/girparser.py | |
parent | a62855702c3bc0b10370ef25d622a32e227283bd (diff) | |
download | gobject-introspection-0f3efc9058e2f249e84c02840fd96b6a413a9201.tar.gz |
scanner: parse and expose function macros
This is useful for documentation tools, and other utilities that
rely on full introspection of the C API of a given library.
Diffstat (limited to 'giscanner/girparser.py')
-rw-r--r-- | giscanner/girparser.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/giscanner/girparser.py b/giscanner/girparser.py index 9ea408b4..7687c35c 100644 --- a/giscanner/girparser.py +++ b/giscanner/girparser.py @@ -142,6 +142,7 @@ class GIRParser(object): if not self._types_only: parser_methods[_corens('constant')] = self._parse_constant + parser_methods[_corens('function-macro')] = self._parse_function_macro parser_methods[_corens('function')] = self._parse_function for node in ns.getchildren(): @@ -310,6 +311,23 @@ class GIRParser(object): function = self._parse_function_common(node, ast.Function) self._namespace.append(function) + def _parse_function_macro(self, node): + name = node.attrib['name'] + symbol = node.attrib.get(_cns('identifier')) + parameters = [] + parameters_node = node.find(_corens('parameters')) + if (parameters_node is not None): + for paramnode in self._find_children(parameters_node, _corens('parameter')): + param = ast.Parameter(paramnode.attrib.get('name'), None) + parameters.append(param) + self._parse_generic_attribs(paramnode, param) + + func = ast.FunctionMacro(name, parameters, symbol) + self._parse_generic_attribs(node, func) + + self._namespace.track(func) + self._namespace.append(func) + def _parse_parameter(self, node): typeval = self._parse_type(node) param = ast.Parameter(node.attrib.get('name'), |