Class IRB::WorkSpace
In: lib/irb/ext/tracer.rb
lib/irb/workspace.rb
Parent: Object

Methods

External Aliases

evaluate -> __evaluate__

Attributes

binding  [R] 
main  [R] 

Public Class methods

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

[Source]

    # File lib/irb/workspace.rb, line 16
16:     def initialize(*main)
17:       if main[0].kind_of?(Binding)
18:         @binding = main.shift
19:       elsif IRB.conf[:SINGLE_IRB]
20:         @binding = TOPLEVEL_BINDING
21:       else
22:         case IRB.conf[:CONTEXT_MODE]
23:         when 0 # binding in proc on TOPLEVEL_BINDING
24:           @binding = eval("proc{binding}.call",
25:                       TOPLEVEL_BINDING, 
26:                       __FILE__,
27:                       __LINE__)
28:         when 1 # binding in loaded file
29:           require "tempfile"
30:           f = Tempfile.open("irb-binding")
31:           f.print "          $binding = binding\n"
32:           f.close
33:           load f.path
34:           @binding = $binding
35: 
36:         when 2 # binding in loaded file(thread use)
37:           unless defined? BINDING_QUEUE
38:             require "thread"
39:             
40:             IRB.const_set("BINDING_QUEUE", SizedQueue.new(1))
41:             Thread.abort_on_exception = true
42:             Thread.start do
43:               eval "require \"irb/ws-for-case-2\"", TOPLEVEL_BINDING, __FILE__, __LINE__
44:             end
45:             Thread.pass
46:           end
47:           @binding = BINDING_QUEUE.pop
48: 
49:         when 3 # binging in function on TOPLEVEL_BINDING(default)
50:           @binding = eval("def irb_binding; binding; end; irb_binding",
51:                       TOPLEVEL_BINDING, 
52:                       __FILE__,
53:                       __LINE__ - 3)
54:         end
55:       end
56:       if main.empty?
57:         @main = eval("self", @binding)
58:       else
59:         @main = main[0]
60:         IRB.conf[:__MAIN__] = @main
61:         case @main
62:         when Module
63:           @binding = eval("IRB.conf[:__MAIN__].module_eval('binding', __FILE__, __LINE__)", @binding, __FILE__, __LINE__)
64:         else
65:           begin 
66:             @binding = eval("IRB.conf[:__MAIN__].instance_eval('binding', __FILE__, __LINE__)", @binding, __FILE__, __LINE__)
67:           rescue TypeError
68:             IRB.fail CantChangeBinding, @main.inspect
69:           end
70:         end
71:       end
72:       eval("_=nil", @binding)
73:     end

Public Instance methods

[Source]

    # File lib/irb/ext/tracer.rb, line 45
45:     def evaluate(context, statements, file = nil, line = nil)
46:       if context.use_tracer? && file != nil && line != nil
47:         Tracer.on 
48:         begin
49:           __evaluate__(context, statements, file, line)
50:         ensure
51:           Tracer.off
52:         end
53:       else
54:         __evaluate__(context, statements, file || __FILE__, line || __LINE__)
55:       end
56:     end

[Source]

    # File lib/irb/workspace.rb, line 81
81:     def evaluate(context, statements, file = __FILE__, line = __LINE__)
82:       eval(statements, @binding, file, line)
83:     end

error message manipulator

[Source]

     # File lib/irb/workspace.rb, line 86
 86:     def filter_backtrace(bt)
 87:       case IRB.conf[:CONTEXT_MODE]
 88:       when 0
 89:         return nil if bt =~ /\(irb_local_binding\)/
 90:       when 1
 91:         if(bt =~ %r!/tmp/irb-binding! or
 92:            bt =~ %r!irb/.*\.rb! or
 93:            bt =~ /irb\.rb/)
 94:           return nil
 95:         end
 96:       when 2
 97:         return nil if bt =~ /irb\/.*\.rb/
 98:       when 3
 99:         return nil if bt =~ /irb\/.*\.rb/
100:         bt.sub!(/:\s*in `irb_binding'/){""} 
101:       end
102:       bt
103:     end

[Validate]