summaryrefslogtreecommitdiff
path: root/giscanner/girparser.py
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu.duponchelle@opencreed.com>2015-07-15 13:11:45 +0200
committerMathieu Duponchelle <mathieu@centricular.com>2019-07-19 01:21:38 +0200
commit0f3efc9058e2f249e84c02840fd96b6a413a9201 (patch)
treeea4628119b6573901c3426a16a74fced1c9c7822 /giscanner/girparser.py
parenta62855702c3bc0b10370ef25d622a32e227283bd (diff)
downloadgobject-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.py18
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'),