Module IRB
In: lib/irb/workspace.rb
lib/irb/locale.rb
lib/irb/lc/error.rb
lib/irb/lc/ja/error.rb
lib/irb/extend-command.rb
lib/irb/output-method.rb
lib/irb/version.rb
lib/irb/cmd/chws.rb
lib/irb/cmd/nop.rb
lib/irb/cmd/subirb.rb
lib/irb/cmd/help.rb
lib/irb/cmd/pushws.rb
lib/irb/cmd/load.rb
lib/irb/cmd/fork.rb
lib/irb/ext/multi-irb.rb
lib/irb/ext/tracer.rb
lib/irb/ext/history.rb
lib/irb/ext/change-ws.rb
lib/irb/ext/workspaces.rb
lib/irb/ext/use-loader.rb
lib/irb/ext/save-history.rb
lib/irb/ext/math-mode.rb
lib/irb/ext/loader.rb
lib/irb/help.rb
lib/irb/context.rb
lib/irb/input-method.rb
lib/irb/slex.rb
lib/irb/completion.rb
lib/irb/frame.rb
lib/irb/init.rb
lib/irb/notifier.rb
lib/irb.rb
  irb/init.rb - irb initialize module
      $Release Version: 0.9.5$
      $Revision: 24483 $
      $Date: 2009-08-09 17:44:15 +0900 (Sun, 09 Aug 2009) $
      by Keiju ISHITSUKA(keiju@ruby-lang.org)

Methods

Classes and Modules

Module IRB::ContextExtender
Module IRB::ExtendCommand
Module IRB::ExtendCommandBundle
Module IRB::HistorySavingAbility
Module IRB::InputCompletor
Module IRB::IrbLoader
Module IRB::MethodExtender
Module IRB::Notifier
Class IRB::Abort
Class IRB::Context
Class IRB::FileInputMethod
Class IRB::Frame
Class IRB::History
Class IRB::InputMethod
Class IRB::Irb
Class IRB::JobManager
Class IRB::LoadAbort
Class IRB::Locale
Class IRB::OutputMethod
Class IRB::ReadlineInputMethod
Class IRB::SLex
Class IRB::StdioInputMethod
Class IRB::StdioOutputMethod
Class IRB::WorkSpace

Constants

STDIN_FILE_NAME = "(line)"   InputMethod
    StdioInputMethod
    FileInputMethod
    (ReadlineInputMethod)
FEATURE_IOPT_CHANGE_VERSION = "1.9.0"
IRBRC_EXT = "rc"

Public Class methods

[Source]

    # File lib/irb.rb, line 46
46:   def IRB.CurrentContext
47:     IRB.conf[:MAIN_CONTEXT]
48:   end

[Source]

     # File lib/irb/ext/multi-irb.rb, line 143
143:   def IRB.CurrentContext
144:     IRB.JobManager.irb(Thread.current).context
145:   end

[Source]

     # File lib/irb/ext/multi-irb.rb, line 139
139:   def IRB.JobManager
140:     @JobManager
141:   end

[Source]

    # File lib/irb.rb, line 33
33:   def IRB.conf
34:     @CONF
35:   end

[Source]

     # File lib/irb/workspace.rb, line 105
105:     def IRB.delete_caller
106:     end

@CONF default setting

[Source]

     # File lib/irb/init.rb, line 29
 29:   def IRB.init_config(ap_path)
 30:     # class instance variables
 31:     @TRACER_INITIALIZED = false
 32: 
 33:     # default configurations
 34:     unless ap_path and @CONF[:AP_NAME]
 35:       ap_path = File.join(File.dirname(File.dirname(__FILE__)), "irb.rb")
 36:     end
 37:     @CONF[:AP_NAME] = File::basename(ap_path, ".rb")
 38: 
 39:     @CONF[:IRB_NAME] = "irb"
 40:     @CONF[:IRB_LIB_PATH] = File.dirname(__FILE__)
 41: 
 42:     @CONF[:RC] = true
 43:     @CONF[:LOAD_MODULES] = []
 44:     @CONF[:IRB_RC] = nil
 45: 
 46:     @CONF[:MATH_MODE] = false
 47:     @CONF[:USE_READLINE] = false unless defined?(ReadlineInputMethod)
 48:     @CONF[:INSPECT_MODE] = nil
 49:     @CONF[:USE_TRACER] = false
 50:     @CONF[:USE_LOADER] = false
 51:     @CONF[:IGNORE_SIGINT] = true
 52:     @CONF[:IGNORE_EOF] = false
 53:     @CONF[:ECHO] = nil
 54:     @CONF[:VERBOSE] = nil
 55: 
 56:     @CONF[:EVAL_HISTORY] = nil
 57:     @CONF[:SAVE_HISTORY] = nil
 58: 
 59:     @CONF[:BACK_TRACE_LIMIT] = 16
 60: 
 61:     @CONF[:PROMPT] = {
 62:       :NULL => {
 63:         :PROMPT_I => nil,
 64:         :PROMPT_N => nil,
 65:         :PROMPT_S => nil,
 66:         :PROMPT_C => nil,
 67:         :RETURN => "%s\n"
 68:       },
 69:       :DEFAULT => {
 70:         :PROMPT_I => "%N(%m):%03n:%i> ",
 71:         :PROMPT_N => "%N(%m):%03n:%i> ",
 72:         :PROMPT_S => "%N(%m):%03n:%i%l ",
 73:         :PROMPT_C => "%N(%m):%03n:%i* ",
 74:         :RETURN => "=> %s\n"
 75:       },
 76:       :CLASSIC => {
 77:         :PROMPT_I => "%N(%m):%03n:%i> ",
 78:         :PROMPT_N => "%N(%m):%03n:%i> ",
 79:         :PROMPT_S => "%N(%m):%03n:%i%l ",
 80:         :PROMPT_C => "%N(%m):%03n:%i* ",
 81:         :RETURN => "%s\n"
 82:       },
 83:       :SIMPLE => {
 84:         :PROMPT_I => ">> ",
 85:         :PROMPT_N => ">> ",
 86:         :PROMPT_S => nil,
 87:         :PROMPT_C => "?> ",
 88:         :RETURN => "=> %s\n"
 89:       },
 90:       :INF_RUBY => {
 91:         :PROMPT_I => "%N(%m):%03n:%i> ",
 92: #       :PROMPT_N => "%N(%m):%03n:%i> ",
 93:         :PROMPT_N => nil,
 94:         :PROMPT_S => nil,
 95:         :PROMPT_C => nil,
 96:         :RETURN => "%s\n",
 97:         :AUTO_INDENT => true
 98:       },
 99:       :XMP => {
100:         :PROMPT_I => nil,
101:         :PROMPT_N => nil,
102:         :PROMPT_S => nil,
103:         :PROMPT_C => nil,
104:         :RETURN => "    ==>%s\n"
105:       }
106:     }
107: 
108:     @CONF[:PROMPT_MODE] = (STDIN.tty? ? :DEFAULT : :NULL)
109:     @CONF[:AUTO_INDENT] = false
110: 
111:     @CONF[:CONTEXT_MODE] = 3 # use binding in function on TOPLEVEL_BINDING
112:     @CONF[:SINGLE_IRB] = false
113: 
114: #    @CONF[:LC_MESSAGES] = "en"
115:     @CONF[:LC_MESSAGES] = Locale.new
116:     
117:     @CONF[:AT_EXIT] = []
118:     
119:     @CONF[:DEBUG_LEVEL] = 1
120:   end

[Source]

     # File lib/irb/init.rb, line 122
122:   def IRB.init_error
123:     @CONF[:LC_MESSAGES].load("irb/error.rb")
124:   end

initialize tracing function

[Source]

    # File lib/irb/ext/tracer.rb, line 17
17:   def IRB.initialize_tracer
18:     Tracer.verbose = false
19:     Tracer.add_filter {
20:       |event, file, line, id, binding, *rests|
21:       /^#{Regexp.quote(@CONF[:IRB_LIB_PATH])}/ !~ file and
22:         File::basename(file) != "irb.rb"
23:     }
24:   end

invoke multi-irb

[Source]

     # File lib/irb/ext/multi-irb.rb, line 148
148:   def IRB.irb(file = nil, *main)
149:     workspace = WorkSpace.new(*main)
150:     parent_thread = Thread.current
151:     Thread.start do
152:       begin
153:         irb = Irb.new(workspace, file)
154:       rescue 
155:         print "Subirb can't start with context(self): ", workspace.main.inspect, "\n"
156:         print "return to main irb\n"
157:         Thread.pass
158:         Thread.main.wakeup
159:         Thread.exit
160:       end
161:       @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
162:       @JobManager.insert(irb)
163:       @JobManager.current_job = irb
164:       begin
165:         system_exit = false
166:         catch(:IRB_EXIT) do
167:           irb.eval_input
168:         end
169:       rescue SystemExit
170:         system_exit = true
171:         raise
172:         #fail
173:       ensure
174:         unless system_exit
175:           @JobManager.delete(irb)
176:           if parent_thread.alive?
177:             @JobManager.current_job = @JobManager.irb(parent_thread)
178:             parent_thread.run
179:           else
180:             @JobManager.current_job = @JobManager.main_irb
181:             @JobManager.main_thread.run
182:           end
183:         end
184:       end
185:     end
186:     Thread.stop
187:     @JobManager.current_job = @JobManager.irb(Thread.current)
188:   end

[Source]

    # File lib/irb.rb, line 87
87:   def IRB.irb_abort(irb, exception = Abort)
88:     if defined? Thread
89:       irb.context.thread.raise exception, "abort then interrupt!!"
90:     else
91:       raise exception, "abort then interrupt!!"
92:     end
93:   end

[Source]

    # File lib/irb.rb, line 79
79:   def IRB.irb_at_exit
80:     @CONF[:AT_EXIT].each{|hook| hook.call}
81:   end

[Source]

    # File lib/irb.rb, line 83
83:   def IRB.irb_exit(irb, ret)
84:     throw :IRB_EXIT, ret
85:   end

loading modules

[Source]

     # File lib/irb/init.rb, line 251
251:   def IRB.load_modules
252:     for m in @CONF[:LOAD_MODULES]
253:       begin
254:         require m
255:       rescue
256:         print $@[0], ":", $!.class, ": ", $!, "\n"
257:       end
258:     end
259:   end

option analyzing

[Source]

     # File lib/irb/init.rb, line 129
129:   def IRB.parse_opts
130:     load_path = []
131:     while opt = ARGV.shift
132:       case opt
133:       when "-f"
134:         @CONF[:RC] = false
135:       when "-m"
136:         @CONF[:MATH_MODE] = true
137:       when "-d"
138:         $DEBUG = true
139:       when /^-r(.+)?/
140:         opt = $1 || ARGV.shift
141:         @CONF[:LOAD_MODULES].push opt if opt
142:       when /^-I(.+)?/
143:         opt = $1 || ARGV.shift
144:         load_path.concat(opt.split(File::PATH_SEPARATOR)) if opt
145:       when /^-K(.)/
146:         $KCODE = $1
147:       when "--inspect"
148:         @CONF[:INSPECT_MODE] = true
149:       when "--noinspect"
150:         @CONF[:INSPECT_MODE] = false
151:       when "--readline"
152:         @CONF[:USE_READLINE] = true
153:       when "--noreadline"
154:         @CONF[:USE_READLINE] = false
155:       when "--echo"
156:         @CONF[:ECHO] = true
157:       when "--noecho"
158:         @CONF[:ECHO] = false
159:       when "--verbose"
160:         @CONF[:VERBOSE] = true
161:       when "--noverbose"
162:         @CONF[:VERBOSE] = false
163:       when "--prompt-mode", "--prompt"
164:         prompt_mode = ARGV.shift.upcase.tr("-", "_").intern
165:         @CONF[:PROMPT_MODE] = prompt_mode
166:       when "--noprompt"
167:         @CONF[:PROMPT_MODE] = :NULL
168:       when "--inf-ruby-mode"
169:         @CONF[:PROMPT_MODE] = :INF_RUBY
170:       when "--sample-book-mode", "--simple-prompt"
171:         @CONF[:PROMPT_MODE] = :SIMPLE
172:       when "--tracer"
173:         @CONF[:USE_TRACER] = true
174:       when "--back-trace-limit"
175:         @CONF[:BACK_TRACE_LIMIT] = ARGV.shift.to_i
176:       when "--context-mode"
177:         @CONF[:CONTEXT_MODE] = ARGV.shift.to_i
178:       when "--single-irb"
179:         @CONF[:SINGLE_IRB] = true
180:       when "--irb_debug"
181:         @CONF[:DEBUG_LEVEL] = ARGV.shift.to_i
182:       when "-v", "--version"
183:         print IRB.version, "\n"
184:         exit 0
185:       when "-h", "--help"
186:         require "irb/help"
187:         IRB.print_usage
188:         exit 0
189:       when /^-/
190:         IRB.fail UnrecognizedSwitch, opt
191:       else
192:         @CONF[:SCRIPT] = opt
193:         $0 = opt
194:         break
195:       end
196:     end
197:     if RUBY_VERSION >= FEATURE_IOPT_CHANGE_VERSION
198:       load_path.collect! do |path|
199:         /\A\.\// =~ path ? path : File.expand_path(path)
200:       end
201:     end
202:     $LOAD_PATH.unshift(*load_path)
203:   end

[Source]

    # File lib/irb/help.rb, line 14
14:   def IRB.print_usage
15:     lc = IRB.conf[:LC_MESSAGES]
16:     path = lc.find("irb/help-message")
17:     space_line = false
18:     File.foreach(path) do
19:       |l|
20:       if /^\s*$/ =~ l
21:         lc.puts l unless space_line
22:         space_line = true
23:         next
24:       end
25:       space_line = false
26:       
27:       l.sub!(/#.*$/, "")
28:       next if /^\s*$/ =~ l
29:       lc.puts l
30:     end
31:   end

[Source]

     # File lib/irb/init.rb, line 222
222:   def IRB.rc_file(ext = IRBRC_EXT)
223:     if !@CONF[:RC_NAME_GENERATOR]
224:       rc_file_generators do |rcgen|
225:         @CONF[:RC_NAME_GENERATOR] ||= rcgen
226:         if File.exist?(rcgen.call(IRBRC_EXT))
227:           @CONF[:RC_NAME_GENERATOR] = rcgen
228:           break
229:         end
230:       end
231:     end
232:     @CONF[:RC_NAME_GENERATOR].call ext
233:   end

enumerate possible rc-file base name generators

[Source]

     # File lib/irb/init.rb, line 236
236:   def IRB.rc_file_generators
237:     if irbrc = ENV["IRBRC"]
238:       yield proc{|rc|  rc == "rc" ? irbrc : irbrc+rc}
239:     end
240:     if home = ENV["HOME"]
241:       yield proc{|rc| home+"/.irb#{rc}"} 
242:     end
243:     home = Dir.pwd
244:     yield proc{|rc| home+"/.irb#{rc}"}
245:     yield proc{|rc| home+"/irb#{rc.sub(/\A_?/, '.')}"}
246:     yield proc{|rc| home+"/_irb#{rc}"}
247:     yield proc{|rc| home+"/$irb#{rc}"}
248:   end

running config

[Source]

     # File lib/irb/init.rb, line 206
206:   def IRB.run_config
207:     if @CONF[:RC]
208:       begin
209:         load rc_file
210:       rescue LoadError, Errno::ENOENT
211:       rescue
212:         print "load error: #{rc_file}\n"
213:         print $!.class, ": ", $!, "\n"
214:         for err in $@[0, $@.size - 2]
215:           print "\t", err, "\n"
216:         end
217:       end
218:     end
219:   end

initialize config

[Source]

    # File lib/irb/init.rb, line 16
16:   def IRB.setup(ap_path)
17:     IRB.init_config(ap_path)
18:     IRB.init_error
19:     IRB.parse_opts
20:     IRB.run_config
21:     IRB.load_modules
22: 
23:     unless @CONF[:PROMPT][@CONF[:PROMPT_MODE]]
24:       IRB.fail(UndefinedPromptMode, @CONF[:PROMPT_MODE]) 
25:     end
26:   end

initialize IRB and start TOP_LEVEL irb

[Source]

    # File lib/irb.rb, line 51
51:   def IRB.start(ap_path = nil)
52:     $0 = File::basename(ap_path, ".rb") if ap_path
53: 
54:     IRB.setup(ap_path)
55: 
56:     if @CONF[:SCRIPT]
57:       irb = Irb.new(nil, @CONF[:SCRIPT])
58:     else
59:       irb = Irb.new
60:     end
61: 
62:     @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
63:     @CONF[:MAIN_CONTEXT] = irb.context
64: 
65:     trap("SIGINT") do
66:       irb.signal_handle
67:     end
68: 
69:     begin
70:       catch(:IRB_EXIT) do
71:         irb.eval_input
72:       end
73:     ensure
74:       irb_at_exit
75:     end
76: #    print "\n"
77:   end

IRB version method

[Source]

    # File lib/irb.rb, line 38
38:   def IRB.version
39:     if v = @CONF[:VERSION] then return v end
40: 
41:     require "irb/version"
42:     rv = @RELEASE_VERSION.sub(/\.0/, "")
43:     @CONF[:VERSION] = format("irb %s(%s)", rv, @LAST_UPDATE_DATE)
44:   end

[Validate]