| Class | IRB::WorkSpace |
| In: |
lib/irb/workspace.rb
lib/irb/ext/tracer.rb |
| Parent: | Object |
| binding | [R] | |
| main | [R] |
create new workspace. set self to main if specified, otherwise inherit main from TOPLEVEL_BINDING.
# 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
# File lib/irb/workspace.rb, line 81
81: def evaluate(context, statements, file = __FILE__, line = __LINE__)
82: eval(statements, @binding, file, line)
83: end
# 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
error message manipulator
# 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