From 2b0d145731ff50a63e8bc7e974591618b3479c77 Mon Sep 17 00:00:00 2001 From: "Gustavo J. A. M. Carneiro" Date: Sun, 6 Jan 2008 11:56:06 +0000 Subject: [PATCH] Register class aliases also in the low level typehandlers.base type registry, in addition to the gccxmlparser one. --- pybindgen/cppclass.py | 33 +++++++++++++++++++-------------- pybindgen/gccxmlparser.py | 1 + 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/pybindgen/cppclass.py b/pybindgen/cppclass.py index c26b0bc..d5ff22a 100644 --- a/pybindgen/cppclass.py +++ b/pybindgen/cppclass.py @@ -508,32 +508,37 @@ class CppClass(object): self.static_attributes.cname = "%s__getsets" % self.metaclass_name ## re-register the class type handlers, now with class full name + self.register_alias(self.full_name) - self.ThisClassParameter.CTYPES.append(self.full_name) + + def register_alias(self, alias): + """Re-register the class with another base name, in addition to any + registrations that might have already been done.""" + self.ThisClassParameter.CTYPES.append(alias) try: - param_type_matcher.register(self.full_name, self.ThisClassParameter) + param_type_matcher.register(alias, self.ThisClassParameter) except ValueError: pass - self.ThisClassRefParameter.CTYPES.append(self.full_name+'&') + self.ThisClassRefParameter.CTYPES.append(alias+'&') try: - param_type_matcher.register(self.full_name+'&', self.ThisClassRefParameter) + param_type_matcher.register(alias+'&', self.ThisClassRefParameter) except ValueError: pass - - self.ThisClassReturn.CTYPES.append(self.full_name) + + self.ThisClassReturn.CTYPES.append(alias) try: - return_type_matcher.register(self.full_name, self.ThisClassReturn) + return_type_matcher.register(alias, self.ThisClassReturn) except ValueError: pass - - self.ThisClassPtrParameter.CTYPES.append(self.full_name+'*') + + self.ThisClassPtrParameter.CTYPES.append(alias+'*') try: - param_type_matcher.register(self.full_name+'*', self.ThisClassPtrParameter) + param_type_matcher.register(alias+'*', self.ThisClassPtrParameter) except ValueError: pass - - self.ThisClassPtrReturn.CTYPES.append(self.full_name+'*') + + self.ThisClassPtrReturn.CTYPES.append(alias+'*') try: - return_type_matcher.register(self.full_name+'*', self.ThisClassPtrReturn) + return_type_matcher.register(alias+'*', self.ThisClassPtrReturn) except ValueError: pass - + def get_module(self): """Get the Module object this class belongs to""" return self._module diff --git a/pybindgen/gccxmlparser.py b/pybindgen/gccxmlparser.py index 8e1d98a..75a1611 100644 --- a/pybindgen/gccxmlparser.py +++ b/pybindgen/gccxmlparser.py @@ -78,6 +78,7 @@ class GccXmlTypeRegistry(object): if alias is not None: alias = normalize_name(alias) self.classes[alias] = cpp_class + cpp_class.register_alias(alias) #print >> sys.stderr, "******** registering class %s also as alias %s" \ # % (cpp_class.gccxml_definition, alias)