summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/irb/init.rb2
-rw-r--r--lib/irb/workspace.rb4
2 files changed, 4 insertions, 2 deletions
diff --git a/lib/irb/init.rb b/lib/irb/init.rb
index 48b669f211..73ef420e60 100644
--- a/lib/irb/init.rb
+++ b/lib/irb/init.rb
@@ -108,7 +108,7 @@ module IRB # :nodoc:
@CONF[:PROMPT_MODE] = (STDIN.tty? ? :DEFAULT : :NULL)
@CONF[:AUTO_INDENT] = true
- @CONF[:CONTEXT_MODE] = 3 # use binding in function on TOPLEVEL_BINDING
+ @CONF[:CONTEXT_MODE] = 4 # use a copy of TOPLEVEL_BINDING
@CONF[:SINGLE_IRB] = false
@CONF[:LC_MESSAGES] = Locale.new
diff --git a/lib/irb/workspace.rb b/lib/irb/workspace.rb
index 97d3c5f84e..5a3a4bc020 100644
--- a/lib/irb/workspace.rb
+++ b/lib/irb/workspace.rb
@@ -51,11 +51,13 @@ EOF
end
@binding = BINDING_QUEUE.pop
- when 3 # binding in function on TOPLEVEL_BINDING(default)
+ when 3 # binding in function on TOPLEVEL_BINDING
@binding = eval("self.class.remove_method(:irb_binding) if defined?(irb_binding); private; def irb_binding; binding; end; irb_binding",
TOPLEVEL_BINDING,
__FILE__,
__LINE__ - 3)
+ when 4 # binding is a copy of TOPLEVEL_BINDING (default)
+ @binding = TOPLEVEL_BINDING.dup
end
end