parameters: (self, tokens)
return_statement: return result
docstring: Convert [Token,...] to [Class(...), ] useful for base classes.
          For example, code like class Foo : public Bar<x, y> { ... };
          the "Bar<x, y>" portion gets converted to an AST.
  
          Returns:
            [Class(...), ...]
docstring_summary: Convert [Token,...] to [Class(...), ] useful for base classes.
          For example, code like class Foo : public Bar<x, y> { ... };
          the "Bar<x, y>" portion gets converted to an AST.
docstring_tokens: Convert [ Token ... ] to [ Class ( ... ) ] useful for base classes . For example code like class Foo : public Bar<x y > { ... } ; the Bar<x y > portion gets converted to an AST .
function: def ToType(self, tokens):
          """Convert [Token,...] to [Class(...), ] useful for base classes.
          For example, code like class Foo : public Bar<x, y> { ... };
          the "Bar<x, y>" portion gets converted to an AST.
  
          Returns:
            [Class(...), ...]
          """
          result = []
          name_tokens = []
          reference = pointer = array = False
  
          def AddType(templated_types):
              # Partition tokens into name and modifier tokens.
              names = []
              modifiers = []
              for t in name_tokens:
                  if keywords.IsKeyword(t.name):
                      modifiers.append(t.name)
                  else:
                      names.append(t.name)
              name = ''.join(names)
              result.append(Type(name_tokens[0].start, name_tokens[-1].end,
                                 name, templated_types, modifiers,
                                 reference, pointer, array))
              del name_tokens[:]
  
          i = 0
          end = len(tokens)
          while i < end:
              token = tokens[i]
              if token.name == '<':
                  new_tokens, new_end = self._GetTemplateEnd(tokens, i+1)
                  AddType(self.ToType(new_tokens))
                  # If there is a comma after the template, we need to consume
                  # that here otherwise it becomes part of the name.
                  i = new_end
                  reference = pointer = array = False
              elif token.name == ',':
                  AddType([])
                  reference = pointer = array = False
              elif token.name == '*':
                  pointer = True
              elif token.name == '&':
                  reference = True
              elif token.name == '[':
                 pointer = True
              elif token.name == ']':
                  pass
              else:
                  name_tokens.append(token)
              i += 1
  
          if name_tokens:
              # No '<' in the tokens, just a simple name and no template.
              AddType([])
          return result
function_tokens: def ToType ( self , tokens ) : result = [ ] name_tokens = [ ] reference = pointer = array = False def AddType ( templated_types ) : # Partition tokens into name and modifier tokens. names = [ ] modifiers = [ ] for t in name_tokens : if keywords . IsKeyword ( t . name ) : modifiers . append ( t . name ) else : names . append ( t . name ) name = '' . join ( names ) result . append ( Type ( name_tokens [ 0 ] . start , name_tokens [ - 1 ] . end , name , templated_types , modifiers , reference , pointer , array ) ) del name_tokens [ : ] i = 0 end = len ( tokens ) while i < end : token = tokens [ i ] if token . name == '<' : new_tokens , new_end = self . _GetTemplateEnd ( tokens , i + 1 ) AddType ( self . ToType ( new_tokens ) ) # If there is a comma after the template, we need to consume # that here otherwise it becomes part of the name. i = new_end reference = pointer = array = False elif token . name == ',' : AddType ( [ ] ) reference = pointer = array = False elif token . name == '*' : pointer = True elif token . name == '&' : reference = True elif token . name == '[' : pointer = True elif token . name == ']' : pass else : name_tokens . append ( token ) i += 1 if name_tokens : # No '<' in the tokens, just a simple name and no template. AddType ( [ ] ) return result