diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-05-12 09:07:57 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-05-12 09:07:57 +0000 |
commit | 9da4f78db46764be6dae5e7e83ff48cbecb3fb23 (patch) | |
tree | c0805e6c95d6396e28e6129d88905c4dee085f4e /lib/irb/workspace-binding.rb | |
parent | 014f2164ed7031a1c31604b290d2ab0cf1deacdc (diff) |
2000-05-12
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@687 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/irb/workspace-binding.rb')
-rw-r--r-- | lib/irb/workspace-binding.rb | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/irb/workspace-binding.rb b/lib/irb/workspace-binding.rb new file mode 100644 index 0000000000..d58088d9dd --- /dev/null +++ b/lib/irb/workspace-binding.rb @@ -0,0 +1,77 @@ +# +# workspace-binding.rb - +# $Release Version: $ +# $Revision$ +# $Date$ +# by Keiju ISHITSUKA(Nihon Rational Software Co.,Ltd) +# +# -- +# +# +# + + +module IRB + # create new workspace. + def IRB.workspace_binding(*main) + if @CONF[:SINGLE_IRB] + bind = TOPLEVEL_BINDING + else + case @CONF[:CONTEXT_MODE] + when 0 + bind = eval("proc{binding}.call", + TOPLEVEL_BINDING, + "(irb_local_binding)", + 1) + when 1 + require "tempfile" + f = Tempfile.open("irb-binding") + f.print <<EOF + $binding = binding +EOF + f.close + load f.path + bind = $binding + + when 2 + 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/workspace-binding-2\"", TOPLEVEL_BINDING, __FILE__, __LINE__ + end + Thread.pass + + end + + bind = BINDING_QUEUE.pop + + when 3 + bind = eval("def irb_binding; binding; end; irb_binding", + TOPLEVEL_BINDING, + __FILE__, + __LINE__ - 3) + end + end + unless main.empty? + @CONF[:__MAIN__] = main[0] + case main[0] + when Module + bind = eval("IRB.conf[:__MAIN__].module_eval('binding')", bind) + else + begin + bind = eval("IRB.conf[:__MAIN__].instance_eval('binding')", bind) + rescue TypeError + IRB.fail CanNotChangeBinding, main[0].inspect + end + end + end + eval("_=nil", bind) + bind + end + + def IRB.delete_caller + end +end |