class Sentry::Backtrace

def self.source_location(&backtrace_cleaner)

def self.source_location(&backtrace_cleaner)
  Thread.each_caller_location do |location|
    frame_key = [location.absolute_path, location.lineno]
    cached_value = line_cache[frame_key]
    next if cached_value == :skip
    if cached_value
      return cached_value
    else
      if cleaned_frame = backtrace_cleaner.(location)
        line = Line.from_source_location(location)
        line_cache[frame_key] = line
        return line
      else
        line_cache[frame_key] = :skip
        next
      end
    end
  end
end