rubysl-irb 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +25 -0
  6. data/README.md +29 -0
  7. data/Rakefile +1 -0
  8. data/lib/irb/cmd/chws.rb +33 -0
  9. data/lib/irb/cmd/fork.rb +39 -0
  10. data/lib/irb/cmd/help.rb +31 -0
  11. data/lib/irb/cmd/load.rb +67 -0
  12. data/lib/irb/cmd/nop.rb +39 -0
  13. data/lib/irb/cmd/pushws.rb +39 -0
  14. data/lib/irb/cmd/subirb.rb +43 -0
  15. data/lib/irb/completion.rb +205 -0
  16. data/lib/irb/context.rb +255 -0
  17. data/lib/irb/ext/change-ws.rb +62 -0
  18. data/lib/irb/ext/history.rb +110 -0
  19. data/lib/irb/ext/loader.rb +120 -0
  20. data/lib/irb/ext/math-mode.rb +37 -0
  21. data/lib/irb/ext/multi-irb.rb +241 -0
  22. data/lib/irb/ext/save-history.rb +70 -0
  23. data/lib/irb/ext/tracer.rb +61 -0
  24. data/lib/irb/ext/use-loader.rb +65 -0
  25. data/lib/irb/ext/workspaces.rb +56 -0
  26. data/lib/irb/extend-command.rb +264 -0
  27. data/lib/irb/frame.rb +67 -0
  28. data/lib/irb/help.rb +35 -0
  29. data/lib/irb/init.rb +258 -0
  30. data/lib/irb/input-method.rb +120 -0
  31. data/lib/irb/lc/error.rb +30 -0
  32. data/lib/irb/lc/help-message.rb +37 -0
  33. data/lib/irb/lc/ja/error.rb +27 -0
  34. data/lib/irb/lc/ja/help-message +36 -0
  35. data/lib/irb/locale.rb +184 -0
  36. data/lib/irb/notifier.rb +145 -0
  37. data/lib/irb/output-method.rb +85 -0
  38. data/lib/irb/rubinius.rb +55 -0
  39. data/lib/irb/ruby-lex.rb +1149 -0
  40. data/lib/irb/ruby-token.rb +273 -0
  41. data/lib/irb/slex.rb +285 -0
  42. data/lib/irb/version.rb +16 -0
  43. data/lib/irb/workspace.rb +107 -0
  44. data/lib/irb/ws-for-case-2.rb +15 -0
  45. data/lib/irb/xmp.rb +86 -0
  46. data/lib/irb.rb +1 -0
  47. data/lib/rubysl/irb/irb.rb +356 -0
  48. data/lib/rubysl/irb/version.rb +5 -0
  49. data/lib/rubysl/irb.rb +2 -0
  50. data/rubysl-irb.gemspec +31 -0
  51. metadata +219 -0
@@ -0,0 +1,56 @@
1
+ #
2
+ # push-ws.rb -
3
+ # $Release Version: 0.9.5$
4
+ # $Revision: 11708 $
5
+ # $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
6
+ # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
+ #
8
+ # --
9
+ #
10
+ #
11
+ #
12
+
13
+ module IRB
14
+ class Context
15
+
16
+ def irb_level
17
+ workspace_stack.size
18
+ end
19
+
20
+ def workspaces
21
+ if defined? @workspaces
22
+ @workspaces
23
+ else
24
+ @workspaces = []
25
+ end
26
+ end
27
+
28
+ def push_workspace(*_main)
29
+ if _main.empty?
30
+ if workspaces.empty?
31
+ print "No other workspace\n"
32
+ return nil
33
+ end
34
+ ws = workspaces.pop
35
+ workspaces.push @workspace
36
+ @workspace = ws
37
+ return workspaces
38
+ end
39
+
40
+ workspaces.push @workspace
41
+ @workspace = WorkSpace.new(@workspace.binding, _main[0])
42
+ if !(class<<main;ancestors;end).include?(ExtendCommandBundle)
43
+ main.extend ExtendCommandBundle
44
+ end
45
+ end
46
+
47
+ def pop_workspace
48
+ if workspaces.empty?
49
+ print "workspace stack empty\n"
50
+ return
51
+ end
52
+ @workspace = workspaces.pop
53
+ end
54
+ end
55
+ end
56
+
@@ -0,0 +1,264 @@
1
+ #
2
+ # irb/extend-command.rb - irb extend command
3
+ # $Release Version: 0.9.5$
4
+ # $Revision: 11708 $
5
+ # $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
6
+ # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
+ #
8
+ # --
9
+ #
10
+ #
11
+ #
12
+ module IRB
13
+ #
14
+ # IRB extended command
15
+ #
16
+ module ExtendCommandBundle
17
+ EXCB = ExtendCommandBundle
18
+
19
+ NO_OVERRIDE = 0
20
+ OVERRIDE_PRIVATE_ONLY = 0x01
21
+ OVERRIDE_ALL = 0x02
22
+
23
+ def irb_exit(ret = 0)
24
+ irb_context.exit(ret)
25
+ end
26
+
27
+ def irb_context
28
+ IRB.CurrentContext
29
+ end
30
+
31
+ @ALIASES = [
32
+ [:context, :irb_context, NO_OVERRIDE],
33
+ [:conf, :irb_context, NO_OVERRIDE],
34
+ [:irb_quit, :irb_exit, OVERRIDE_PRIVATE_ONLY],
35
+ [:exit, :irb_exit, OVERRIDE_PRIVATE_ONLY],
36
+ [:quit, :irb_exit, OVERRIDE_PRIVATE_ONLY],
37
+ ]
38
+
39
+ @EXTEND_COMMANDS = [
40
+ [:irb_current_working_workspace, :CurrentWorkingWorkspace, "irb/cmd/chws",
41
+ [:irb_print_working_workspace, OVERRIDE_ALL],
42
+ [:irb_cwws, OVERRIDE_ALL],
43
+ [:irb_pwws, OVERRIDE_ALL],
44
+ # [:irb_cww, OVERRIDE_ALL],
45
+ # [:irb_pww, OVERRIDE_ALL],
46
+ [:cwws, NO_OVERRIDE],
47
+ [:pwws, NO_OVERRIDE],
48
+ # [:cww, NO_OVERRIDE],
49
+ # [:pww, NO_OVERRIDE],
50
+ [:irb_current_working_binding, OVERRIDE_ALL],
51
+ [:irb_print_working_binding, OVERRIDE_ALL],
52
+ [:irb_cwb, OVERRIDE_ALL],
53
+ [:irb_pwb, OVERRIDE_ALL],
54
+ # [:cwb, NO_OVERRIDE],
55
+ # [:pwb, NO_OVERRIDE]
56
+ ],
57
+ [:irb_change_workspace, :ChangeWorkspace, "irb/cmd/chws",
58
+ [:irb_chws, OVERRIDE_ALL],
59
+ # [:irb_chw, OVERRIDE_ALL],
60
+ [:irb_cws, OVERRIDE_ALL],
61
+ # [:irb_cw, OVERRIDE_ALL],
62
+ [:chws, NO_OVERRIDE],
63
+ # [:chw, NO_OVERRIDE],
64
+ [:cws, NO_OVERRIDE],
65
+ # [:cw, NO_OVERRIDE],
66
+ [:irb_change_binding, OVERRIDE_ALL],
67
+ [:irb_cb, OVERRIDE_ALL],
68
+ [:cb, NO_OVERRIDE]],
69
+
70
+ [:irb_workspaces, :Workspaces, "irb/cmd/pushws",
71
+ [:workspaces, NO_OVERRIDE],
72
+ [:irb_bindings, OVERRIDE_ALL],
73
+ [:bindings, NO_OVERRIDE]],
74
+ [:irb_push_workspace, :PushWorkspace, "irb/cmd/pushws",
75
+ [:irb_pushws, OVERRIDE_ALL],
76
+ # [:irb_pushw, OVERRIDE_ALL],
77
+ [:pushws, NO_OVERRIDE],
78
+ # [:pushw, NO_OVERRIDE],
79
+ [:irb_push_binding, OVERRIDE_ALL],
80
+ [:irb_pushb, OVERRIDE_ALL],
81
+ [:pushb, NO_OVERRIDE]],
82
+ [:irb_pop_workspace, :PopWorkspace, "irb/cmd/pushws",
83
+ [:irb_popws, OVERRIDE_ALL],
84
+ # [:irb_popw, OVERRIDE_ALL],
85
+ [:popws, NO_OVERRIDE],
86
+ # [:popw, NO_OVERRIDE],
87
+ [:irb_pop_binding, OVERRIDE_ALL],
88
+ [:irb_popb, OVERRIDE_ALL],
89
+ [:popb, NO_OVERRIDE]],
90
+
91
+ [:irb_load, :Load, "irb/cmd/load"],
92
+ [:irb_require, :Require, "irb/cmd/load"],
93
+ [:irb_source, :Source, "irb/cmd/load",
94
+ [:source, NO_OVERRIDE]],
95
+
96
+ [:irb, :IrbCommand, "irb/cmd/subirb"],
97
+ [:irb_jobs, :Jobs, "irb/cmd/subirb",
98
+ [:jobs, NO_OVERRIDE]],
99
+ [:irb_fg, :Foreground, "irb/cmd/subirb",
100
+ [:fg, NO_OVERRIDE]],
101
+ [:irb_kill, :Kill, "irb/cmd/subirb",
102
+ [:kill, OVERRIDE_PRIVATE_ONLY]],
103
+
104
+ [:irb_help, :Help, "irb/cmd/help",
105
+ [:help, NO_OVERRIDE]],
106
+
107
+ ]
108
+
109
+ def self.install_extend_commands
110
+ for args in @EXTEND_COMMANDS
111
+ def_extend_command(*args)
112
+ end
113
+ end
114
+
115
+ # aliases = [commans_alias, flag], ...
116
+ def self.def_extend_command(cmd_name, cmd_class, load_file = nil, *aliases)
117
+ case cmd_class
118
+ when Symbol
119
+ cmd_class = cmd_class.id2name
120
+ when String
121
+ when Class
122
+ cmd_class = cmd_class.name
123
+ end
124
+
125
+ if load_file
126
+ eval %[
127
+ def #{cmd_name}(*opts, &b)
128
+ require "#{load_file}"
129
+ eval %[
130
+ def #{cmd_name}(*opts, &b)
131
+ ExtendCommand::#{cmd_class}.execute(irb_context, *opts, &b)
132
+ end
133
+ ]
134
+ send :#{cmd_name}, *opts, &b
135
+ end
136
+ ]
137
+ else
138
+ eval %[
139
+ def #{cmd_name}(*opts, &b)
140
+ ExtendCommand::#{cmd_class}.execute(irb_context, *opts, &b)
141
+ end
142
+ ]
143
+ end
144
+
145
+ for ali, flag in aliases
146
+ @ALIASES.push [ali, cmd_name, flag]
147
+ end
148
+ end
149
+
150
+ # override = {NO_OVERRIDE, OVERRIDE_PRIVATE_ONLY, OVERRIDE_ALL}
151
+ def install_alias_method(to, from, override = NO_OVERRIDE)
152
+ to = to.id2name unless to.kind_of?(String)
153
+ from = from.id2name unless from.kind_of?(String)
154
+
155
+ if override == OVERRIDE_ALL or
156
+ (override == OVERRIDE_PRIVATE_ONLY) && !respond_to?(to) or
157
+ (override == NO_OVERRIDE) && !respond_to?(to, true)
158
+ target = self
159
+ (class<<self;self;end).instance_eval{
160
+ if target.respond_to?(to, true) &&
161
+ !target.respond_to?(EXCB.irb_original_method_name(to), true)
162
+ alias_method(EXCB.irb_original_method_name(to), to)
163
+ end
164
+ alias_method to, from
165
+ }
166
+ else
167
+ print "irb: warn: can't alias #{to} from #{from}.\n"
168
+ end
169
+ end
170
+
171
+ def self.irb_original_method_name(method_name)
172
+ "irb_" + method_name + "_org"
173
+ end
174
+
175
+ def self.extend_object(obj)
176
+ unless (class<<obj;ancestors;end).include?(EXCB)
177
+ super
178
+ for ali, com, flg in @ALIASES
179
+ obj.install_alias_method(ali, com, flg)
180
+ end
181
+ end
182
+ end
183
+
184
+ install_extend_commands
185
+ end
186
+
187
+ # extension support for Context
188
+ module ContextExtender
189
+ CE = ContextExtender
190
+
191
+ @EXTEND_COMMANDS = [
192
+ [:eval_history=, "irb/ext/history.rb"],
193
+ [:use_tracer=, "irb/ext/tracer.rb"],
194
+ [:math_mode=, "irb/ext/math-mode.rb"],
195
+ [:use_loader=, "irb/ext/use-loader.rb"],
196
+ [:save_history=, "irb/ext/save-history.rb"],
197
+ ]
198
+
199
+ def self.install_extend_commands
200
+ for args in @EXTEND_COMMANDS
201
+ def_extend_command(*args)
202
+ end
203
+ end
204
+
205
+ def self.def_extend_command(cmd_name, load_file, *aliases)
206
+ Context.module_eval %[
207
+ def #{cmd_name}(*opts, &b)
208
+ Context.module_eval {remove_method(:#{cmd_name})}
209
+ require "#{load_file}"
210
+ send :#{cmd_name}, *opts, &b
211
+ end
212
+ for ali in aliases
213
+ alias_method ali, cmd_name
214
+ end
215
+ ]
216
+ end
217
+
218
+ CE.install_extend_commands
219
+ end
220
+
221
+ module MethodExtender
222
+ def def_pre_proc(base_method, extend_method)
223
+ base_method = base_method.to_s
224
+ extend_method = extend_method.to_s
225
+
226
+ alias_name = new_alias_name(base_method)
227
+ module_eval %[
228
+ alias_method alias_name, base_method
229
+ def #{base_method}(*opts)
230
+ send :#{extend_method}, *opts
231
+ send :#{alias_name}, *opts
232
+ end
233
+ ]
234
+ end
235
+
236
+ def def_post_proc(base_method, extend_method)
237
+ base_method = base_method.to_s
238
+ extend_method = extend_method.to_s
239
+
240
+ alias_name = new_alias_name(base_method)
241
+ module_eval %[
242
+ alias_method alias_name, base_method
243
+ def #{base_method}(*opts)
244
+ send :#{alias_name}, *opts
245
+ send :#{extend_method}, *opts
246
+ end
247
+ ]
248
+ end
249
+
250
+ # return #{prefix}#{name}#{postfix}<num>
251
+ def new_alias_name(name, prefix = "__alias_of__", postfix = "__")
252
+ base_name = "#{prefix}#{name}#{postfix}"
253
+ all_methods = instance_methods(true) + private_instance_methods(true)
254
+ same_methods = all_methods.grep(/^#{Regexp.quote(base_name)}[0-9]*$/)
255
+ return base_name if same_methods.empty?
256
+ no = same_methods.size
257
+ while !same_methods.include?(alias_name = base_name + no)
258
+ no += 1
259
+ end
260
+ alias_name
261
+ end
262
+ end
263
+ end
264
+
data/lib/irb/frame.rb ADDED
@@ -0,0 +1,67 @@
1
+ #
2
+ # frame.rb -
3
+ # $Release Version: 0.9$
4
+ # $Revision: 11708 $
5
+ # $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
6
+ # by Keiju ISHITSUKA(Nihon Rational Software Co.,Ltd)
7
+ #
8
+ # --
9
+ #
10
+ #
11
+ #
12
+
13
+ require "e2mmap"
14
+
15
+ module IRB
16
+ class Frame
17
+ extend Exception2MessageMapper
18
+ def_exception :FrameOverflow, "frame overflow"
19
+ def_exception :FrameUnderflow, "frame underflow"
20
+
21
+ INIT_STACK_TIMES = 3
22
+ CALL_STACK_OFFSET = 3
23
+
24
+ def initialize
25
+ @frames = [TOPLEVEL_BINDING] * INIT_STACK_TIMES
26
+ end
27
+
28
+ def trace_func(event, file, line, id, binding)
29
+ case event
30
+ when 'call', 'class'
31
+ @frames.push binding
32
+ when 'return', 'end'
33
+ @frames.pop
34
+ end
35
+ end
36
+
37
+ def top(n = 0)
38
+ bind = @frames[-(n + CALL_STACK_OFFSET)]
39
+ Fail FrameUnderflow unless bind
40
+ bind
41
+ end
42
+
43
+ def bottom(n = 0)
44
+ bind = @frames[n]
45
+ Fail FrameOverflow unless bind
46
+ bind
47
+ end
48
+
49
+ # singleton functions
50
+ def Frame.bottom(n = 0)
51
+ @backtrace.bottom(n)
52
+ end
53
+
54
+ def Frame.top(n = 0)
55
+ @backtrace.top(n)
56
+ end
57
+
58
+ def Frame.sender
59
+ eval "self", @backtrace.top
60
+ end
61
+
62
+ @backtrace = Frame.new
63
+ set_trace_func proc{|event, file, line, id, binding, klass|
64
+ @backtrace.trace_func(event, file, line, id, binding)
65
+ }
66
+ end
67
+ end
data/lib/irb/help.rb ADDED
@@ -0,0 +1,35 @@
1
+ #
2
+ # irb/help.rb - print usage module
3
+ # $Release Version: 0.9.5$
4
+ # $Revision: 16857 $
5
+ # $Date: 2008-06-06 01:05:24 -0700 (Fri, 06 Jun 2008) $
6
+ # by Keiju ISHITSUKA(keiju@ishitsuka.com)
7
+ #
8
+ # --
9
+ #
10
+ #
11
+ #
12
+
13
+ module IRB
14
+ def IRB.print_usage
15
+ lc = IRB.conf[:LC_MESSAGES]
16
+ path = lc.find("irb/help-message.rb")
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
+ l.sub!(/<<HELP/, "")
29
+ l.sub!(/HELP/, "")
30
+ next if /^\s*$/ =~ l
31
+ lc.puts l
32
+ end
33
+ end
34
+ end
35
+
data/lib/irb/init.rb ADDED
@@ -0,0 +1,258 @@
1
+ #
2
+ # irb/init.rb - irb initialize module
3
+ # $Release Version: 0.9.5$
4
+ # $Revision: 11708 $
5
+ # $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
6
+ # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
+ #
8
+ # --
9
+ #
10
+ #
11
+ #
12
+
13
+ module IRB
14
+
15
+ # initialize config
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
27
+
28
+ # @CONF default setting
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
+
38
+ @CONF[:AP_NAME] = File::basename(ap_path, ".rb")
39
+
40
+ @CONF[:IRB_NAME] = "irb"
41
+ @CONF[:IRB_LIB_PATH] = File.dirname(__FILE__)
42
+
43
+ @CONF[:RC] = true
44
+ @CONF[:LOAD_MODULES] = []
45
+ @CONF[:IRB_RC] = nil
46
+
47
+ @CONF[:MATH_MODE] = false
48
+ @CONF[:USE_READLINE] = false unless defined?(ReadlineInputMethod)
49
+ @CONF[:INSPECT_MODE] = nil
50
+ @CONF[:USE_TRACER] = false
51
+ @CONF[:USE_LOADER] = false
52
+ @CONF[:IGNORE_SIGINT] = true
53
+ @CONF[:IGNORE_EOF] = false
54
+ @CONF[:ECHO] = nil
55
+ @CONF[:VERBOSE] = nil
56
+
57
+ @CONF[:EVAL_HISTORY] = nil
58
+ @CONF[:SAVE_HISTORY] = nil
59
+
60
+ @CONF[:BACK_TRACE_LIMIT] = 16
61
+
62
+ @CONF[:PROMPT] = {
63
+ :NULL => {
64
+ :PROMPT_I => nil,
65
+ :PROMPT_N => nil,
66
+ :PROMPT_S => nil,
67
+ :PROMPT_C => nil,
68
+ :RETURN => "%s\n"
69
+ },
70
+ :DEFAULT => {
71
+ :PROMPT_I => "%N(%m):%03n:%i> ",
72
+ :PROMPT_N => "%N(%m):%03n:%i> ",
73
+ :PROMPT_S => "%N(%m):%03n:%i%l ",
74
+ :PROMPT_C => "%N(%m):%03n:%i* ",
75
+ :RETURN => "=> %s\n"
76
+ },
77
+ :CLASSIC => {
78
+ :PROMPT_I => "%N(%m):%03n:%i> ",
79
+ :PROMPT_N => "%N(%m):%03n:%i> ",
80
+ :PROMPT_S => "%N(%m):%03n:%i%l ",
81
+ :PROMPT_C => "%N(%m):%03n:%i* ",
82
+ :RETURN => "%s\n"
83
+ },
84
+ :SIMPLE => {
85
+ :PROMPT_I => ">> ",
86
+ :PROMPT_N => ">> ",
87
+ :PROMPT_S => nil,
88
+ :PROMPT_C => "?> ",
89
+ :RETURN => "=> %s\n"
90
+ },
91
+ :INF_RUBY => {
92
+ :PROMPT_I => "%N(%m):%03n:%i> ",
93
+ # :PROMPT_N => "%N(%m):%03n:%i> ",
94
+ :PROMPT_N => nil,
95
+ :PROMPT_S => nil,
96
+ :PROMPT_C => nil,
97
+ :RETURN => "%s\n",
98
+ :AUTO_INDENT => true
99
+ },
100
+ :XMP => {
101
+ :PROMPT_I => nil,
102
+ :PROMPT_N => nil,
103
+ :PROMPT_S => nil,
104
+ :PROMPT_C => nil,
105
+ :RETURN => " ==>%s\n"
106
+ }
107
+ }
108
+
109
+ @CONF[:PROMPT_MODE] = (STDIN.tty? ? :DEFAULT : :NULL)
110
+ @CONF[:AUTO_INDENT] = false
111
+
112
+ @CONF[:CONTEXT_MODE] = 3 # use binding in function on TOPLEVEL_BINDING
113
+ @CONF[:SINGLE_IRB] = false
114
+
115
+ # @CONF[:LC_MESSAGES] = "en"
116
+ @CONF[:LC_MESSAGES] = Locale.new
117
+
118
+ @CONF[:DEBUG_LEVEL] = 1
119
+ end
120
+
121
+ def IRB.init_error
122
+ @CONF[:LC_MESSAGES].load("irb/error.rb")
123
+ end
124
+
125
+ FEATURE_IOPT_CHANGE_VERSION = "1.9.0"
126
+
127
+ # option analyzing
128
+ def IRB.parse_opts
129
+ load_path = []
130
+ while opt = ARGV.shift
131
+ case opt
132
+ when "-f"
133
+ @CONF[:RC] = false
134
+ when "-m"
135
+ @CONF[:MATH_MODE] = true
136
+ when "-d"
137
+ $DEBUG = true
138
+ when /^-r(.+)?/
139
+ opt = $1 || ARGV.shift
140
+ @CONF[:LOAD_MODULES].push opt if opt
141
+ when /^-I(.+)?/
142
+ opt = $1 || ARGV.shift
143
+ load_path.concat(opt.split(File::PATH_SEPARATOR)) if opt
144
+ when /^-K(.)/
145
+ $KCODE = $1
146
+ when "--inspect"
147
+ @CONF[:INSPECT_MODE] = true
148
+ when "--noinspect"
149
+ @CONF[:INSPECT_MODE] = false
150
+ when "--readline"
151
+ @CONF[:USE_READLINE] = true
152
+ when "--noreadline"
153
+ @CONF[:USE_READLINE] = false
154
+ when "--echo"
155
+ @CONF[:ECHO] = true
156
+ when "--noecho"
157
+ @CONF[:ECHO] = false
158
+ when "--verbose"
159
+ @CONF[:VERBOSE] = true
160
+ when "--noverbose"
161
+ @CONF[:VERBOSE] = false
162
+ when "--prompt-mode", "--prompt"
163
+ prompt_mode = ARGV.shift.upcase.tr("-", "_").intern
164
+ @CONF[:PROMPT_MODE] = prompt_mode
165
+ when "--noprompt"
166
+ @CONF[:PROMPT_MODE] = :NULL
167
+ when "--inf-ruby-mode"
168
+ @CONF[:PROMPT_MODE] = :INF_RUBY
169
+ when "--sample-book-mode", "--simple-prompt"
170
+ @CONF[:PROMPT_MODE] = :SIMPLE
171
+ when "--tracer"
172
+ @CONF[:USE_TRACER] = true
173
+ when "--back-trace-limit"
174
+ @CONF[:BACK_TRACE_LIMIT] = ARGV.shift.to_i
175
+ when "--context-mode"
176
+ @CONF[:CONTEXT_MODE] = ARGV.shift.to_i
177
+ when "--single-irb"
178
+ @CONF[:SINGLE_IRB] = true
179
+ when "--irb_debug"
180
+ @CONF[:DEBUG_LEVEL] = ARGV.shift.to_i
181
+ when "-v", "--version"
182
+ print IRB.version, "\n"
183
+ exit 0
184
+ when "-h", "--help"
185
+ require "irb/help"
186
+ IRB.print_usage
187
+ exit 0
188
+ when /^-/
189
+ IRB.fail UnrecognizedSwitch, opt
190
+ else
191
+ @CONF[:SCRIPT] = opt
192
+ $0 = opt
193
+ break
194
+ end
195
+ end
196
+
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
204
+
205
+ # running config
206
+ def IRB.run_config
207
+ if @CONF[:RC]
208
+ begin
209
+ load rc_file
210
+ rescue LoadError, Errno::ENOENT
211
+ rescue => e
212
+ print "load error: #{rc_file}\n"
213
+ raise e
214
+ end
215
+ end
216
+ end
217
+
218
+ IRBRC_EXT = "rc"
219
+ def IRB.rc_file(ext = IRBRC_EXT)
220
+ if !@CONF[:RC_NAME_GENERATOR]
221
+ rc_file_generators do |rcgen|
222
+ @CONF[:RC_NAME_GENERATOR] ||= rcgen
223
+ if File.exist?(rcgen.call(IRBRC_EXT))
224
+ @CONF[:RC_NAME_GENERATOR] = rcgen
225
+ break
226
+ end
227
+ end
228
+ end
229
+ @CONF[:RC_NAME_GENERATOR].call ext
230
+ end
231
+
232
+ # enumerate possible rc-file base name generators
233
+ def IRB.rc_file_generators
234
+ if irbrc = ENV["IRBRC"]
235
+ yield proc{|rc| rc == "rc" ? irbrc : irbrc+rc}
236
+ end
237
+ if home = ENV["HOME"]
238
+ yield proc{|rc| home+"/.irb#{rc}"}
239
+ end
240
+ home = Dir.pwd
241
+ yield proc{|rc| home+"/.irb#{rc}"}
242
+ yield proc{|rc| home+"/irb#{rc.sub(/\A_?/, '.')}"}
243
+ yield proc{|rc| home+"/_irb#{rc}"}
244
+ yield proc{|rc| home+"/$irb#{rc}"}
245
+ end
246
+
247
+ # loading modules
248
+ def IRB.load_modules
249
+ for m in @CONF[:LOAD_MODULES]
250
+ begin
251
+ require m
252
+ rescue
253
+ print $@[0], ":", $!.class, ": ", $!, "\n"
254
+ end
255
+ end
256
+ end
257
+
258
+ end