def get_container_or_none(self, type): """returns reference to the class declaration or None""" type = type_traits.remove_alias(type) type = type_traits.remove_cv(type) cls = None if isinstance(type, cpptypes.declarated_t): cls = type_traits.remove_alias(type.declaration) elif isinstance(type, class_declaration.class_t): cls = type elif isinstance(type, class_declaration.class_declaration_t): cls = type else: return if not cls.name.startswith(self.name + '<'): return for ns in std_namespaces: if type_traits.impl_details.is_defined_in_xxx(ns, cls): return cls
def get_container_or_none( self, type ): """returns reference to the class declaration or None""" type = type_traits.remove_alias( type ) type = type_traits.remove_cv( type ) cls = None if isinstance( type, cpptypes.declarated_t ): cls = type_traits.remove_alias( type.declaration ) elif isinstance( type, class_declaration.class_t ): cls = type elif isinstance( type, class_declaration.class_declaration_t ): cls = type else: return if not cls.name.startswith( self.name() + '<' ): return for ns in std_namespaces: if type_traits.impl_details.is_defined_in_xxx( ns, cls ): return cls
def _get_demangled_name(self): if not self.demangled: self._demangled_name = '' if self._demangled_name: return self._demangled_name if self._demangled_name == '': return self.name demangled = self.demangled if self.return_type: return_type = type_traits.remove_alias( self.return_type).decl_string if return_type.startswith( '::') and not self.demangled.startswith('::'): return_type = return_type[2:] demangled = self.demangled if demangled.startswith(return_type): demangled = demangled[len(return_type):] demangled = demangled.strip() #removing scope demangled_name = call_invocation.name( self.__remove_parent_fname(demangled)) if demangled_name.startswith('::'): demangled_name = demangled_name[2:] #to be on the safe side if demangled_name.startswith(self.name): self._demangled_name = demangled_name return self._demangled_name #well, I am going to try an other strategy fname = algorithm.full_name(self) found = self.demangled.find(fname) if -1 == found: if fname.startswith('::'): fname = fname[2:] found = self.demangled.find(fname) if -1 == found: self._demangled_name = '' return self.name demangled_name = call_invocation.name(self.demangled[found:]) demangled_name = self.__remove_parent_fname(demangled_name) if demangled_name.startswith('::'): demangled_name = demangled_name[2:] #to be on the safe side if demangled_name.startswith(self.name): self._demangled_name = demangled_name return self._demangled_name #if -1 == found: self._demangled_name = '' return self.name
def _get_demangled_name( self ): if not self.demangled: self._demangled_name = '' if self._demangled_name: return self._demangled_name if self._demangled_name == '': return self.name demangled = self.demangled if self.return_type: return_type = type_traits.remove_alias( self.return_type ).decl_string if return_type.startswith( '::' ) and not self.demangled.startswith( '::' ): return_type = return_type[2:] demangled = self.demangled if demangled.startswith( return_type ): demangled = demangled[ len( return_type ): ] demangled = demangled.strip() #removing scope demangled_name = call_invocation.name( self.__remove_parent_fname( demangled ) ) if demangled_name.startswith( '::' ): demangled_name = demangled_name[2:] #to be on the safe side if demangled_name.startswith( self.name ): self._demangled_name = demangled_name return self._demangled_name #well, I am going to try an other strategy fname = algorithm.full_name( self ) found = self.demangled.find( fname ) if -1 == found: if fname.startswith( '::' ): fname = fname[2:] found = self.demangled.find( fname ) if -1 == found: self._demangled_name = '' return self.name demangled_name = call_invocation.name( self.demangled[ found: ] ) demangled_name = self.__remove_parent_fname( demangled_name ) if demangled_name.startswith( '::' ): demangled_name = demangled_name[2:] #to be on the safe side if demangled_name.startswith( self.name ): self._demangled_name = demangled_name return self._demangled_name #if -1 == found: self._demangled_name = '' return self.name
def _get_is_copy_constructor(self): args = self.arguments if 1 != len( args ): return False arg = args[0] if not type_traits.is_reference( arg.type ): return False if not type_traits.is_const( arg.type.base ): return False unaliased = type_traits.remove_alias( arg.type.base ) #unaliased now refers to const_t instance if not isinstance( unaliased.base, cpptypes.declarated_t ): return False return id(unaliased.base.declaration) == id(self.parent)
def is_copy_constructor(self): """returns True if described declaration is copy constructor, otherwise False""" args = self.arguments if 1 != len( args ): return False arg = args[0] if not type_traits.is_reference( arg.type ): return False if not type_traits.is_const( arg.type.base ): return False unaliased = type_traits.remove_alias( arg.type.base ) #unaliased now refers to const_t instance if not isinstance( unaliased.base, cpptypes.declarated_t ): return False return id(unaliased.base.declaration) == id(self.parent)
def is_copy_constructor(self): """returns True if described declaration is copy constructor, otherwise False""" args = self.arguments if 1 != len(args): return False arg = args[0] if not type_traits.is_reference(arg.type): return False if not type_traits.is_const(arg.type.base): return False unaliased = type_traits.remove_alias(arg.type.base) #unaliased now refers to const_t instance if not isinstance(unaliased.base, cpptypes.declarated_t): return False return id(unaliased.base.declaration) == id(self.parent)