示例#1
0
 def _get_name_impl( self ):
     if not self._name: #class with empty name
         return self._name
     elif class_t.USE_DEMANGLED_AS_NAME and self.demangled and 'GCC' in self.compiler:
         if not self.cache.demangled_name:
             fname = algorithm.full_name( self.parent )
             if fname.startswith( '::' ) and not self.demangled.startswith( '::' ):
                 fname = fname[2:]
             if self.demangled.startswith( fname ):
                 tmp = self.demangled[ len( fname ): ] #demangled::name
                 if tmp.startswith( '::' ):
                     tmp = tmp[2:]
                 if '<' not in tmp and '<' in self._name:
                     #we have template class, but for some reason demangled
                     #name doesn't contain any template
                     #This happens for std::string class, but this breaks
                     #other cases, because this behaviour is not consistent
                     self.cache.demangled_name = self._name
                     return self.cache.demangled_name
                 else:
                     self.cache.demangled_name = tmp
                     return tmp
             else:
                 self.cache.demangled_name = self._name
                 return self._name
         else:
             return self.cache.demangled_name
     else:
         return self._name
示例#2
0
 def _get_name_impl(self):
     if not self._name:  #class with empty name
         return self._name
     elif class_t.USE_DEMANGLED_AS_NAME and self.demangled and 'GCC' in self.compiler:
         if not self.cache.demangled_name:
             fname = algorithm.full_name(self.parent)
             if fname.startswith(
                     '::') and not self.demangled.startswith('::'):
                 fname = fname[2:]
             if self.demangled.startswith(fname):
                 tmp = self.demangled[len(fname):]  #demangled::name
                 if tmp.startswith('::'):
                     tmp = tmp[2:]
                 if '<' not in tmp and '<' in self._name:
                     #we have template class, but for some reason demangled
                     #name doesn't contain any template
                     #This happens for std::string class, but this breaks
                     #other cases, because this behaviour is not consistent
                     self.cache.demangled_name = self._name
                     return self.cache.demangled_name
                 else:
                     self.cache.demangled_name = tmp
                     return tmp
             else:
                 self.cache.demangled_name = self._name
                 return self._name
         else:
             return self.cache.demangled_name
     else:
         return self._name
示例#3
0
 def __remove_parent_fname(self, demangled):
     """implementation details"""
     demangled = demangled.strip()
     parent_fname = algorithm.full_name(self.parent)
     if parent_fname.startswith('::') and not demangled.startswith('::'):
         parent_fname = parent_fname[2:]
     demangled = demangled[len(parent_fname):]
     return demangled
示例#4
0
文件: calldef.py 项目: TLKline/ITK
 def __remove_parent_fname( self, demangled ):
     """implementation details"""
     demangled = demangled.strip()
     parent_fname = algorithm.full_name( self.parent )
     if parent_fname.startswith( '::' ) and not demangled.startswith( '::' ):
         parent_fname = parent_fname[2:]
     demangled = demangled[ len( parent_fname ): ]
     return demangled
示例#5
0
    def check_name( self, decl ):
        assert not None is self.name

        if self.__opt_is_tmpl_inst:
            if not self.__opt_is_full_name:
                if self.name != decl.name:
                    return False
            else:
                if self.name != algorithm.full_name( decl ):
                    return False
        else:
            if not self.__opt_is_full_name:
                if decl.name != self.name:
                    return False
            else:
                if self.name != algorithm.full_name( decl ):
                    return False
        return True
示例#6
0
 def check_name( self, decl ):
     assert not None is self.name
     if self.__opt_is_tmpl_inst:
         if not self.__opt_is_full_name:
             if self.name != decl.name and self.name != decl.partial_name:
                 return False
         else:
             if self.name != algorithm.full_name( decl, with_defaults=True ) \
                and self.name != algorithm.full_name( decl, with_defaults=False ):
                 return False
     else:
         if not self.__opt_is_full_name:
             if self.name != decl.name and self.name != decl.partial_name:
                 return False
         else:
             if self.name != algorithm.full_name( decl, with_defaults=True ) \
                and self.name != algorithm.full_name( decl, with_defaults=False ):
                 return False
     return True
示例#7
0
    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
示例#8
0
文件: calldef.py 项目: TLKline/ITK
 def __str__(self):
     # Get the full name of the calldef...
     name = algorithm.full_name(self)
     if name[:2]=="::":
         name = name[2:]
     # Add the arguments...
     args = map(lambda a: str(a), self.arguments)
     res = "%s(%s)"%(name, ", ".join(args))
     # Append the declaration class
     cls = 'constructor'
     if self.is_copy_constructor:
         cls = 'copy ' + cls
     return "%s [%s]"%(res, cls)
示例#9
0
 def __str__(self):
     # Get the full name of the calldef...
     name = algorithm.full_name(self)
     if name[:2] == "::":
         name = name[2:]
     # Add the arguments...
     args = map(lambda a: str(a), self.arguments)
     res = "%s(%s)" % (name, ", ".join(args))
     # Append the declaration class
     cls = 'constructor'
     if self.is_copy_constructor:
         cls = 'copy ' + cls
     return "%s [%s]" % (res, cls)
示例#10
0
文件: calldef.py 项目: TLKline/ITK
    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
示例#11
0
 def __str__(self):
     # Get the full name of the calldef...
     name = algorithm.full_name(self)
     if name[:2]=="::":
         name = name[2:]
     # Add the arguments...
     args = map(lambda a: str(a), self.arguments)
     res = "%s(%s)"%(name, ", ".join(args))
     # Add the return type...
     if self.return_type!=None:
         res = "%s %s"%(self.return_type, res)
     # extern?
     if self.has_extern:
         res = "extern "+res
     # Append the declaration class
     cls = self.__class__.__name__
     if cls[-2:]=="_t":
         cls = cls[:-2]
     return "%s [%s]"%(res, cls)
示例#12
0
 def __str__(self):
     # Get the full name of the calldef...
     name = algorithm.full_name(self)
     if name[:2] == "::":
         name = name[2:]
     # Add the arguments...
     args = map(lambda a: str(a), self.arguments)
     res = "%s(%s)" % (name, ", ".join(args))
     # Add the return type...
     if self.return_type != None:
         res = "%s %s" % (self.return_type, res)
     # extern?
     if self.has_extern:
         res = "extern " + res
     # Append the declaration class
     cls = self.__class__.__name__
     if cls[-2:] == "_t":
         cls = cls[:-2]
     cls = cls.replace('_', ' ')
     return "%s [%s]" % (res, cls)
示例#13
0
 def _get_name_impl( self ):
     if not self._name: #class with empty name
         return self._name
     elif class_t.USE_DEMANGLED_AS_NAME and self.demangled:
         if not self.cache.demangled_name:
             fname = algorithm.full_name( self.parent )
             if fname.startswith( '::' ) and not self.demangled.startswith( '::' ):
                 fname = fname[2:]
             if self.demangled.startswith( fname ):
                 tmp = self.demangled[ len( fname ): ] #demangled::name
                 if tmp.startswith( '::' ):
                     tmp = tmp[2:]
                 self.cache.demangled_name = tmp
                 return tmp
             else:
                 self.cache.demangled_name = self._name
                 return self._name
         else:
             return self.cache.demangled_name
     else:
         return self._name
 def _get_name_impl( self ):
     if not self._name: #class with empty name
         return self._name
     elif class_t.USE_DEMANGLED_AS_NAME and self.demangled:
         if not self.cache.demangled_name:
             fname = algorithm.full_name( self.parent )
             if fname.startswith( '::' ) and not self.demangled.startswith( '::' ):
                 fname = fname[2:]
             if self.demangled.startswith( fname ):
                 tmp = self.demangled[ len( fname ): ] #demangled::name
                 if tmp.startswith( '::' ):
                     tmp = tmp[2:]
                 self.cache.demangled_name = tmp
                 return tmp
             else:
                 self.cache.demangled_name = self._name
                 return self._name
         else:
             return self.cache.demangled_name
     else:
         return self._name
示例#15
0
 def __str__(self):
     name = algorithm.full_name(self)
     if name[:2] == "::":
         name = name[2:]
     return "%s [%s]" % (name, self.class_type)
示例#16
0
 def _create_decl_string(self):
     return algorithm.full_name( self )
示例#17
0
 def __str__(self):
     name = algorithm.full_name(self)
     if name!="::" and name[:2]=="::":
         name = name[2:]
     return "%s [namespace]"%name
示例#18
0
 def __str__(self):
     name = algorithm.full_name(self)
     if name[:2]=="::":
         name = name[2:]
     return "%s [%s]"%(name, self.class_type)
示例#19
0
 def __str__(self):
     name = algorithm.full_name(self)
     if name!="::" and name[:2]=="::":
         name = name[2:]
     return "%s [namespace]"%name
示例#20
0
 def create_decl_string(self, with_defaults=True):
     return algorithm.full_name( self, with_defaults )
示例#21
0
 def create_decl_string(self, with_defaults=True):
     return algorithm.full_name(self, with_defaults)