Class | IRB::WorkSpace |
In: |
lib/irb/ext/tracer.rb
lib/irb/workspace.rb |
Parent: | Object |
evaluate | -> | __evaluate__ |
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/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
# 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
# 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