Sha256: f9c883bdba38cb3eed236d451d369430f0dde55f2923edb89545d91774a9170b

Contents?: true

Size: 1.45 KB

Versions: 4

Compression:

Stored size: 1.45 KB

Contents

class Exception
  begin
    # We share the same exception binding extraction mechanism as better_errors,
    # so try to use it if it is already available. It also solves problems like
    # charliesome/better_errors#272, caused by an infinite recursion.
    require 'better_errors'

    # The bindings in which the exception originated in.
    def bindings
      @bindings || __better_errors_bindings_stack
    end
  rescue LoadError
    # The bindings in which the exception originated in.
    def bindings
      @bindings || []
    end

    # CRuby calls #set_backtrace every time it raises an exception. Overriding
    # it to assign the #bindings.
    def set_backtrace_with_binding_of_caller(*args)
      # Thanks to @charliesome who wrote this bit for better_errors.
      unless Thread.current[:__web_console_exception_lock]
        Thread.current[:__web_console_exception_lock] = true
        begin
          # Raising an exception here will cause all of the rubies to go into a
          # stack overflow. Some rubies may even segfault. See
          # https://bugs.ruby-lang.org/issues/10164 for details.
          @bindings = binding.callers.drop(1)
        ensure
          Thread.current[:__web_console_exception_lock] = false
        end
      end

      set_backtrace_without_binding_of_caller(*args)
    end

    alias_method :set_backtrace_without_binding_of_caller, :set_backtrace
    alias_method :set_backtrace, :set_backtrace_with_binding_of_caller
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
web-console-2.3.0 lib/web_console/integration/cruby.rb
sc_core-0.0.7 test/dummy/vendor/bundle/ruby/2.2.0/gems/web-console-2.2.1/lib/web_console/integration/cruby.rb
web-console-2.2.1 lib/web_console/integration/cruby.rb
web-console-2.2.0 lib/web_console/integration/cruby.rb