code: def parse_tl(file_path, layer, methods=None, ignored_ids=CORE_TYPES):
      
      method_info = {m.name: m for m in (methods or [])}
      obj_all = []
      obj_by_name = {}
      obj_by_type = collections.defaultdict(list)
      with file_path.open() as file:
          is_function = False
          for line in file:
              comment_index = line.find('//')
              if comment_index != -1:
                  line = line[:comment_index]
  
              line = line.strip()
              if not line:
                  continue
  
              match = re.match('---(\w+)---', line)
              if match:
                  following_types = match.group(1)
                  is_function = following_types == 'functions'
                  continue
  
              try:
                  result = _from_line(
                      line, is_function, method_info, layer=layer)
  
                  if result.id in ignored_ids:
                      continue
  
                  obj_all.append(result)
                  if not result.is_function:
                      obj_by_name[result.fullname] = result
                      obj_by_type[result.result].append(result)
              except ValueError as e:
                  if 'vector#1cb5c415' not in str(e):
                      raise
  
      # Once all objects have been parsed, replace the
      # string type from the arguments with references
      for obj in obj_all:
          if obj.id in AUTH_KEY_TYPES:
              for arg in obj.args:
                  if arg.type == 'string':
                      arg.type = 'bytes'
  
          for arg in obj.args:
              arg.cls = obj_by_type.get(arg.type) or (
                  [obj_by_name[arg.type]] if arg.type in obj_by_name else []
              )
  
      yield from obj_all
docs: This method yields TLObjects from a given .tl file.
  
      Note that the file is parsed completely before the function yields
      because references to other objects may appear later in the file.