code: def updatecache(filename, module_globals=None):
      
  
      if filename in cache:
          del cache[filename]
      if not filename or (filename.startswith('<') and filename.endswith('>')):
          return []
  
      fullname = filename
      try:
          stat = os.stat(fullname)
      except OSError:
          basename = filename
  
          # Try for a __loader__, if available
          if module_globals and '__loader__' in module_globals:
              name = module_globals.get('__name__')
              loader = module_globals['__loader__']
              get_source = getattr(loader, 'get_source', None)
  
              if name and get_source:
                  try:
                      data = get_source(name)
                  except (ImportError, IOError):
                      pass
                  else:
                      if data is None:
                          # No luck, the PEP302 loader cannot find the source
                          # for this module.
                          return []
                      cache[filename] = (
                          len(data), None,
                          [line+'\n' for line in data.splitlines()], fullname
                      )
                      return cache[filename][2]
  
          # Try looking through the module search path, which is only useful
          # when handling a relative filename.
          if os.path.isabs(filename):
              return []
  
          for dirname in sys.path:
              # When using imputil, sys.path may contain things other than
              # strings; ignore them when it happens.
              try:
                  fullname = os.path.join(dirname, basename)
              except (TypeError, AttributeError):
                  # Not sufficiently string-like to do anything useful with.
                  continue
              try:
                  stat = os.stat(fullname)
                  break
              except os.error:
                  pass
          else:
              return []
      try:
          with open(fullname, 'rU') as fp:
              lines = fp.readlines()
      except IOError:
          return []
      if lines and not lines[-1].endswith('\n'):
          lines[-1] += '\n'
      size, mtime = stat.st_size, stat.st_mtime
      cache[filename] = size, mtime, lines, fullname
      return lines
docs: Update a cache entry and return its list of lines.
      If something's wrong, print a message, discard the cache entry,
      and return an empty list.