diff options
Diffstat (limited to 'lib/irb/workspace.rb')
-rw-r--r-- | lib/irb/workspace.rb | 114 |
1 files changed, 57 insertions, 57 deletions
diff --git a/lib/irb/workspace.rb b/lib/irb/workspace.rb index a627e7f3c2..e05c3bbc96 100644 --- a/lib/irb/workspace.rb +++ b/lib/irb/workspace.rb @@ -16,61 +16,61 @@ module IRB # :nodoc: # inherit main from TOPLEVEL_BINDING. def initialize(*main) if main[0].kind_of?(Binding) - @binding = main.shift + @binding = main.shift elsif IRB.conf[:SINGLE_IRB] - @binding = TOPLEVEL_BINDING + @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 + 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 + f.close + load f.path + @binding = $binding - when 2 # binding in loaded file(thread use) - unless defined? BINDING_QUEUE - require "thread" + 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 + 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 + 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) + @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 + @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 @@ -90,20 +90,20 @@ EOF def filter_backtrace(bt) case IRB.conf[:CONTEXT_MODE] when 0 - return nil if bt =~ /\(irb_local_binding\)/ + return nil if bt =~ /\(irb_local_binding\)/ when 1 - if(bt =~ %r!/tmp/irb-binding! or - bt =~ %r!irb/.*\.rb! or - bt =~ /irb\.rb/) - return nil - end + if(bt =~ %r!/tmp/irb-binding! or + bt =~ %r!irb/.*\.rb! or + bt =~ /irb\.rb/) + return nil + end when 2 - return nil if bt =~ /irb\/.*\.rb/ - return nil if bt =~ /irb\.rb/ + 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'/, '') + return nil if bt =~ /irb\/.*\.rb/ + return nil if bt =~ /irb\.rb/ + bt = bt.sub(/:\s*in `irb_binding'/, '') end bt end |