update_cache (LineCache)

    # File lib/linecache.rb, line 308
      def update_cache(filename, use_script_lines=false)

        return nil unless filename

        @@file_cache.delete(filename)
        path = File.expand_path(filename)

        if use_script_lines
          list = [filename]
          list << @@file2file_remap[path] if @@file2file_remap[path]
          list.each do |name|
            if !SCRIPT_LINES__[name].nil? && SCRIPT_LINES__[name] != true
              begin
                stat = File.stat(name)
              rescue
                stat = nil
              end
              lines = SCRIPT_LINES__[name]
              @@file_cache[filename] = LineCacheInfo.new(stat, nil, lines, path, nil)
              @@file2file_remap[path] = filename
              return true
            end
          end
        end

        if File.exist?(path)
          stat = File.stat(path)
        elsif File.basename(filename) == filename
          # try looking through the search path.
          stat = nil
          for dirname in $:
            path = File.join(dirname, filename)
            if File.exist?(path)
                stat = File.stat(path)
                break
            end
          end
          return false unless stat
        end
        begin
          fp = File.open(path, 'r')
          lines = fp.readlines()
          fp.close()
        rescue
          ##  print '*** cannot open', path, ':', msg
          return nil
        end
        @@file_cache[filename] = LineCacheInfo.new(File.stat(path), nil, lines,
                                                   path, nil)
        @@file2file_remap[path] = filename
        return true
      end