In Files

  • irb/ext/tracer.rb
  • irb/workspace.rb

IRB::WorkSpace

Attributes

binding[R]

The Binding of this workspace

main[R]

The top-level workspace of this context, also available as IRB.conf[:__MAIN__]

Public Class Methods

new(*main) click to toggle source

Creates a new workspace.

set self to main if specified, otherwise inherit main from TOPLEVEL_BINDING.

 
               # File irb/workspace.rb, line 17
    def initialize(*main)
      if main[0].kind_of?(Binding)
        @binding = main.shift
      elsif IRB.conf[:SINGLE_IRB]
        @binding = TOPLEVEL_BINDING
      else
        case IRB.conf[:CONTEXT_MODE]
        when 0 # binding in proc on TOPLEVEL_BINDING
          @binding = eval("proc{binding}.call",
                      TOPLEVEL_BINDING,
                      __FILE__,
                      __LINE__)
        when 1 # binding in loaded file
          require "tempfile"
          f = Tempfile.open("irb-binding")
          f.print <<EOF
          $binding = binding
EOF
          f.close
          load f.path
          @binding = $binding

        when 2 # binding in loaded file(thread use)
          unless defined? BINDING_QUEUE
            require "thread"

            IRB.const_set(:BINDING_QUEUE, SizedQueue.new(1))
            Thread.abort_on_exception = true
            Thread.start do
              eval "require \"irb/ws-for-case-2\"", TOPLEVEL_BINDING, __FILE__, __LINE__
            end
            Thread.pass
          end
          @binding = BINDING_QUEUE.pop

        when 3 # binding in function on TOPLEVEL_BINDING(default)
          @binding = eval("def irb_binding; private; binding; end; irb_binding",
                      TOPLEVEL_BINDING,
                      __FILE__,
                      __LINE__ - 3)
        end
      end
      if main.empty?
        @main = eval("self", @binding)
      else
        @main = main[0]
        IRB.conf[:__MAIN__] = @main
        case @main
        when Module
          @binding = eval("IRB.conf[:__MAIN__].module_eval('binding', __FILE__, __LINE__)", @binding, __FILE__, __LINE__)
        else
          begin
            @binding = eval("IRB.conf[:__MAIN__].instance_eval('binding', __FILE__, __LINE__)", @binding, __FILE__, __LINE__)
          rescue TypeError
            IRB.fail CantChangeBinding, @main.inspect
          end
        end
      end
      eval("_=nil", @binding)
    end
            

Public Instance Methods

__evaluate__(context, statements, file = nil, line = nil) click to toggle source
Alias for: evaluate
evaluate(context, statements, file = nil, line = nil) click to toggle source

Evaluate the context of this workspace and use the Tracer library to output the exact lines of code are being executed in chronological order.

See lib/tracer.rb for more information.

 
               # File irb/ext/tracer.rb, line 55
def evaluate(context, statements, file = nil, line = nil)
  if context.use_tracer? && file != nil && line != nil
    Tracer.on
    begin
      __evaluate__(context, statements, file, line)
    ensure
      Tracer.off
    end
  else
    __evaluate__(context, statements, file || __FILE__, line || __LINE__)
  end
end
            
Also aliased as: __evaluate__
filter_backtrace(bt) click to toggle source

error message manipulator

 
               # File irb/workspace.rb, line 90
def filter_backtrace(bt)
  case IRB.conf[:CONTEXT_MODE]
  when 0
    return nil if bt =~ /\(irb_local_binding\)/
  when 1
    if(bt =~ %r/tmp/irb-binding! or
       bt =~ %rirb/.*\.rb! or
       bt =~ /irb\.rb/)
      return nil
    end
  when 2
    return nil if bt =~ /irb\/.*\.rb/
    return nil if bt =~ /irb\.rb/
  when 3
    return nil if bt =~ /irb\/.*\.rb/
    return nil if bt =~ /irb\.rb/
    bt = bt.sub(/:\s*in `irb_binding'/, '')
  end
  bt
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus