code: def has_type(type, names):
      
      if type.arg in names:
          return type
      for t in type.search('type'): # check all union's member types
          r = has_type(t, names)
          if r is not None:
              return r
      if not hasattr(type, 'i_typedef'):
          return None
      if (type.i_typedef is not None and
          hasattr(type.i_typedef, 'i_is_circular') and
          type.i_typedef.i_is_circular == False):
          t = type.i_typedef.search_one('type')
          if t is not None:
              return has_type(t, names)
      return None
docs: Return type with name if `type` has name as one of its base types,
      and name is in the `names` list.  otherwise, return None.