From 8cf274317b437717f7e114e463de0652b973841b Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 13 Jan 2017 18:06:28 +0000 Subject: Bindings: Add rules engine for typedefs Currently this is rather simple, allowing only matching typedefs by name. If we need more later, we can extend the interface. This will make it possible to add bindings for the K18n framework. --- find-modules/sip_generator.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'find-modules/sip_generator.py') diff --git a/find-modules/sip_generator.py b/find-modules/sip_generator.py index e5e807ed..a8c164b5 100644 --- a/find-modules/sip_generator.py +++ b/find-modules/sip_generator.py @@ -228,7 +228,7 @@ class SipGenerator(object): elif member.kind == CursorKind.CXX_ACCESS_SPEC_DECL: decl = self._get_access_specifier(member, level + 1) elif member.kind == CursorKind.TYPEDEF_DECL: - decl = self._typedef_get(member, level + 1) + decl = self._typedef_get(container, member, level + 1) elif member.kind == CursorKind.CXX_BASE_SPECIFIER: # # Strip off the leading "class". Except for TypeKind.UNEXPOSED... @@ -627,7 +627,7 @@ class SipGenerator(object): return _get_param_value(text, parameterType) return "" - def _typedef_get(self, typedef, level): + def _typedef_get(self, container, typedef, level): """ Generate the translation for a typedef. @@ -637,10 +637,19 @@ class SipGenerator(object): :return: A string. """ - pad = " " * (level * 4) + sip = { + "name": typedef.displayname, + "annotations": set(), + } + + self.rules.typedef_rules().apply(container, typedef, sip) - decl = pad + "typedef {} {}".format(typedef.underlying_typedef_type.spelling, typedef.displayname) - decl += ";\n" + pad = " " * (level * 4) + if sip["name"]: + decl = pad + "typedef {} {}".format(typedef.underlying_typedef_type.spelling, typedef.displayname) + decl += ";\n" + else: + decl = pad + "// Discarded {}\n".format(SipGenerator.describe(typedef)) return decl def _var_get(self, container, variable, level): -- cgit v1.2.1