mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Initial revision
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1337 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									e32f6a8269
								
							
						
					
					
						commit
						f8ab487e4d
					
				
					 14 changed files with 2209 additions and 0 deletions
				
			
		
							
								
								
									
										377
									
								
								doc/irb/irb.rd
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										377
									
								
								doc/irb/irb.rd
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,377 @@
 | 
			
		|||
irb -- interactive ruby
 | 
			
		||||
				$Release Version: 0.5 $
 | 
			
		||||
			   	$Revision$
 | 
			
		||||
			   	$Date$
 | 
			
		||||
			   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
				translate from japanese by gotoken-san
 | 
			
		||||
 | 
			
		||||
==begin
 | 
			
		||||
= What is irb?
 | 
			
		||||
 | 
			
		||||
irb stands for `interactive ruby'. irb is a tool to execute interactively
 | 
			
		||||
ruby expressions read from stdin. 
 | 
			
		||||
 | 
			
		||||
= Invoking
 | 
			
		||||
 | 
			
		||||
  % ruby -r irb -e0
 | 
			
		||||
  % irb
 | 
			
		||||
 | 
			
		||||
Either of the aboves. In the former style, options can be specified
 | 
			
		||||
as follows:
 | 
			
		||||
 | 
			
		||||
  % ruby -r irb -e0 -- -v
 | 
			
		||||
 | 
			
		||||
= Usage
 | 
			
		||||
 | 
			
		||||
Use of irb is easy if you know ruby.  Executing irb, prompts are 
 | 
			
		||||
displayed as follows. Then, enter expression of ruby. A input is
 | 
			
		||||
executed when it is syntacticaly completed. 
 | 
			
		||||
 | 
			
		||||
  dim% irb
 | 
			
		||||
  irb(main):001:0> 1+2
 | 
			
		||||
  3
 | 
			
		||||
  irb(main):002:0> class Foo
 | 
			
		||||
  irb(main):003:1>  def foo
 | 
			
		||||
  irb(main):004:2>    print 1
 | 
			
		||||
  irb(main):005:2>  end
 | 
			
		||||
  irb(main):006:1> end
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):007:0> 
 | 
			
		||||
 | 
			
		||||
And, Readline extesion module can be used with irb. Using Readline
 | 
			
		||||
is the standard default action if Readline is installed. 
 | 
			
		||||
 | 
			
		||||
= Command line option
 | 
			
		||||
 | 
			
		||||
  irb.rb [options] file_name opts
 | 
			
		||||
  options:
 | 
			
		||||
  -f		    suppress read ~/.irbrc 
 | 
			
		||||
  -m		    bc mode (fraction or matrix are available)
 | 
			
		||||
  -d                set $DEBUG  to true (same as `ruby -d')
 | 
			
		||||
  -r load-module    same as `ruby -r'
 | 
			
		||||
  --inspect	    uses `inspect' for output (the default except bc mode)
 | 
			
		||||
  --noinspect	    doesn't uses inspect for output
 | 
			
		||||
  --readline	    uses Readline extension module
 | 
			
		||||
  --noreadline	    doesn't use Readline extension module
 | 
			
		||||
  --prompt prompt-mode
 | 
			
		||||
  --prompt-mode prompt-mode
 | 
			
		||||
		    switches prompt mode. Pre-defined prompt modes are
 | 
			
		||||
		    `defalut', `simple', `xmp' and `inf-ruby'
 | 
			
		||||
			    
 | 
			
		||||
  --inf-ruby-mode   uses prompt appreciate for inf-ruby-mode on emacs. 
 | 
			
		||||
		    Suppresses --readline. 
 | 
			
		||||
  --simple-prompt   simple prompt mode
 | 
			
		||||
  --noprompt	    no prompt
 | 
			
		||||
  --tracer	    display trace for each execution of commands.
 | 
			
		||||
  --back-trace-limit n
 | 
			
		||||
		    displayes backtrace top n and tail n. The default
 | 
			
		||||
		    value is 16. 
 | 
			
		||||
  --irb_debug n	    sets internal debug level to n (It shouldn't be used)
 | 
			
		||||
  -v, --version	    prints the version of irb
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
= Configurations
 | 
			
		||||
 | 
			
		||||
irb reads `~/.irbrc' when it is invoked. If `~/.irbrb' doesn't exist
 | 
			
		||||
irb try to read in the order `.irbrc', `irb.rc', `_irbrc' then `$irbrc'. 
 | 
			
		||||
 | 
			
		||||
The following is altanative to the command line option. To use them
 | 
			
		||||
type as follows in an irb session. 
 | 
			
		||||
 | 
			
		||||
  IRB.conf[:IRB_NAME]="irb"
 | 
			
		||||
  IRB.conf[:MATH_MODE]=false
 | 
			
		||||
  IRB.conf[:USE_TRACER]=false
 | 
			
		||||
  IRB.conf[:USE_LOADER]=false
 | 
			
		||||
  IRB.conf[:IGNORE_SIGINT]=true
 | 
			
		||||
  IRB.conf[:IGNORE_EOF]=false
 | 
			
		||||
  IRB.conf[:INSPECT_MODE]=nil
 | 
			
		||||
  IRB.conf[:IRB_RC] = nil
 | 
			
		||||
  IRB.conf[:BACK_TRACE_LIMIT]=16
 | 
			
		||||
  IRB.conf[:USE_LOADER] = false
 | 
			
		||||
  IRB.conf[:USE_READLINE] = nil
 | 
			
		||||
  IRB.conf[:USE_TRACER] = false
 | 
			
		||||
  IRB.conf[:IGNORE_SIGINT] = true
 | 
			
		||||
  IRB.conf[:IGNORE_EOF] = false
 | 
			
		||||
  IRB.conf[:PROMPT_MODE] = :DEFALUT
 | 
			
		||||
  IRB.conf[:PROMPT] = {...}
 | 
			
		||||
  IRB.conf[:DEBUG_LEVEL]=0
 | 
			
		||||
  IRB.conf[:VERBOSE]=true
 | 
			
		||||
 | 
			
		||||
== Customizing prompt
 | 
			
		||||
 | 
			
		||||
To costomize the prompt you set a variable
 | 
			
		||||
 | 
			
		||||
  IRB.conf[:PROMPT]
 | 
			
		||||
 | 
			
		||||
For example, describe as follows in `.irbrc'. 
 | 
			
		||||
 | 
			
		||||
  IRB.conf[:PROMPT][:MY_PROMPT] = { # name of prompt mode
 | 
			
		||||
    :PROMPT_I => nil,		  # normal prompt
 | 
			
		||||
    :PROMPT_S => nil,		  # prompt for continuated strings
 | 
			
		||||
    :PROMPT_C => nil,		  # prompt for continuated statement
 | 
			
		||||
    :RETURN => "    ==>%s\n"	  # format to return value
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
Then, invoke irb with the above prompt mode by
 | 
			
		||||
 | 
			
		||||
  % irb --prompt my-prompt
 | 
			
		||||
 | 
			
		||||
Or add the following in `.irbrc'. 
 | 
			
		||||
 | 
			
		||||
  IRB.conf[:PROMPT_MODE] = :MY_PROMPT
 | 
			
		||||
 | 
			
		||||
Constants PROMPT_I, PROMPT_S and PROMPT_C specifies the format. 
 | 
			
		||||
In the prompt specification, some special strings are available. 
 | 
			
		||||
 | 
			
		||||
  %N	command name which is running
 | 
			
		||||
  %m	to_s of main object (self)
 | 
			
		||||
  %M	inspect of main object (self)
 | 
			
		||||
  %l	type of string(", ', /, ]), `]' is inner %w[...]
 | 
			
		||||
  %NNi	indent level. NN is degits and means as same as printf("%NNd"). 
 | 
			
		||||
        It can be ommited
 | 
			
		||||
  %NNn	line number. 
 | 
			
		||||
  %%    %
 | 
			
		||||
 | 
			
		||||
For instance, the default prompt mode is defined as follows:
 | 
			
		||||
 | 
			
		||||
IRB.conf[:PROMPT_MODE][:DEFAULT] = {
 | 
			
		||||
      :PROMPT_I => "%N(%m):%03n:%i> ",
 | 
			
		||||
      :PROMPT_S => "%N(%m):%03n:%i%l ",
 | 
			
		||||
      :PROMPT_C => "%N(%m):%03n:%i* ",
 | 
			
		||||
      :RETURN => "%s\n"
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
RETURN is used to printf. 
 | 
			
		||||
 | 
			
		||||
== Configurating subirb
 | 
			
		||||
 | 
			
		||||
The command line option or IRB.conf specify the default behavior of
 | 
			
		||||
(sub)irb. On the other hand, each conf of in the next sction `6. Command' 
 | 
			
		||||
is used to individually configurate (sub)irb. 
 | 
			
		||||
 | 
			
		||||
If proc is set to IRB.conf[:IRB_RC], its subirb will be invoked after
 | 
			
		||||
execution of that proc under giving the context of irb as its
 | 
			
		||||
aregument. By this mechanism each subirb can be configurated. 
 | 
			
		||||
 | 
			
		||||
= Command
 | 
			
		||||
 | 
			
		||||
For irb commands, both simple name and `irb_'-prefixed name are prepared. 
 | 
			
		||||
 | 
			
		||||
--- exit, quit, irb_exit	
 | 
			
		||||
    Quits (sub)irb. 
 | 
			
		||||
    if you've done cb (see below), exit from the binding mode.
 | 
			
		||||
 | 
			
		||||
--- conf, irb_context
 | 
			
		||||
    Displays current configuration. Modifing the configuration is
 | 
			
		||||
    achieved by sending message to `conf'. 
 | 
			
		||||
 | 
			
		||||
--- conf.back_trace_limit
 | 
			
		||||
    Sets display lines of backtrace as top n and tail n. 
 | 
			
		||||
    The default value is 16.
 | 
			
		||||
    
 | 
			
		||||
--- conf.debug_level = N
 | 
			
		||||
    Sets debug level of irb. 
 | 
			
		||||
 | 
			
		||||
--- conf.ignore_eof = true/false
 | 
			
		||||
    Whether ^D (control-d) will be ignored or not. 
 | 
			
		||||
    If false is set, ^D means quit. 
 | 
			
		||||
 | 
			
		||||
--- conf.ignore_sigint= true/false
 | 
			
		||||
    Whether ^C (control-c) will be ignored or not. 
 | 
			
		||||
    If false is set, ^D means quit.  If true, 
 | 
			
		||||
      during input:   cancel inputing then return to top level. 
 | 
			
		||||
      during execute: abondon current execution. 
 | 
			
		||||
 | 
			
		||||
--- conf.inf_ruby_mode = true/false
 | 
			
		||||
    Whether inf-ruby-mode or not. The default value is false.
 | 
			
		||||
 | 
			
		||||
--- conf.inspect_mode = true/false/nil
 | 
			
		||||
    Specifies inspect mode. 
 | 
			
		||||
    true:  display inspect
 | 
			
		||||
    false: display to_s
 | 
			
		||||
    nil:   inspect mode in non math mode, 
 | 
			
		||||
           non inspect mode in math mode. 
 | 
			
		||||
 | 
			
		||||
--- conf.irb_level
 | 
			
		||||
    The level of cb. 
 | 
			
		||||
 | 
			
		||||
--- conf.math_mode
 | 
			
		||||
    Whether bc mode or not. 
 | 
			
		||||
 | 
			
		||||
--- conf.use_loader = true/false
 | 
			
		||||
    Whether irb's own file reader method is used when load/require or not. 
 | 
			
		||||
    This mode is globaly affected (irb wide). 
 | 
			
		||||
 | 
			
		||||
--- conf.prompt_c
 | 
			
		||||
    prompt for a continuating statement (e.g, immediately after of `if')
 | 
			
		||||
 | 
			
		||||
--- conf.prompt_i
 | 
			
		||||
    standard prompt
 | 
			
		||||
 | 
			
		||||
--- conf.prompt_s
 | 
			
		||||
    prompt for a continuating string
 | 
			
		||||
 | 
			
		||||
--- conf.rc
 | 
			
		||||
    Whether ~/.irbrc is read or not. 
 | 
			
		||||
 | 
			
		||||
--- conf.use_prompt = true/false
 | 
			
		||||
    Prompting or not. 
 | 
			
		||||
 | 
			
		||||
--- conf.use_readline = true/false/nil
 | 
			
		||||
    Whether readline is used or not. 
 | 
			
		||||
    true: uses 
 | 
			
		||||
    false: doen't use
 | 
			
		||||
    nil: intends to use readline except for inf-reuby-mode (default)
 | 
			
		||||
 | 
			
		||||
--- conf.verbose=T/F
 | 
			
		||||
    Whether verbose messages are display or not. 
 | 
			
		||||
 | 
			
		||||
--- cb, irb_change_binding [obj]
 | 
			
		||||
    Enter new binding which has a distinct scope of local variables. 
 | 
			
		||||
    If obj is given, obj will be self. 
 | 
			
		||||
 | 
			
		||||
--- irb [obj]
 | 
			
		||||
    Invoke subirb. If obj is given, obj will be self. 
 | 
			
		||||
 | 
			
		||||
--- jobs, irb_jobs
 | 
			
		||||
    List of subirb
 | 
			
		||||
 | 
			
		||||
--- fg n, irb_fg n
 | 
			
		||||
    Switch into specified subirb. The following is candidates of n:
 | 
			
		||||
 | 
			
		||||
      irb number
 | 
			
		||||
      thhread
 | 
			
		||||
      irb object
 | 
			
		||||
      self(obj which is specified of irb obj)
 | 
			
		||||
 | 
			
		||||
--- kill n, irb_kill n
 | 
			
		||||
    Kill subirb. The means of n is as same as the case of irb_fg. 
 | 
			
		||||
 | 
			
		||||
= System variable
 | 
			
		||||
 | 
			
		||||
   _  The latest value of evaluation (it is local)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
= Session Example
 | 
			
		||||
 | 
			
		||||
  dim% ruby irb.rb
 | 
			
		||||
  irb(main):001:0> irb                        # invoke subirb
 | 
			
		||||
  irb#1(main):001:0> jobs                     # list of subirbs
 | 
			
		||||
  #0->irb on main (#<Thread:0x400fb7e4> : stop)
 | 
			
		||||
  #1->irb#1 on main (#<Thread:0x40125d64> : running)
 | 
			
		||||
  nil
 | 
			
		||||
  irb#1(main):002:0> fg 0                     # switch job
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):002:0> class Foo;end
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):003:0> irb Foo                    # invoke subirb which has the 
 | 
			
		||||
					      #              context of Foo
 | 
			
		||||
  irb#2(Foo):001:0> def foo                   # define Foo#foo
 | 
			
		||||
  irb#2(Foo):002:1>   print 1
 | 
			
		||||
  irb#2(Foo):003:1> end
 | 
			
		||||
  nil
 | 
			
		||||
  irb#2(Foo):004:0> fg 0                      # switch job
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):004:0> jobs                       # list of job
 | 
			
		||||
  #0->irb on main (#<Thread:0x400fb7e4> : running)
 | 
			
		||||
  #1->irb#1 on main (#<Thread:0x40125d64> : stop)
 | 
			
		||||
  #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):005:0> Foo.instance_methods       # Foo#foo is defined asurely
 | 
			
		||||
  ["foo"]
 | 
			
		||||
  irb(main):006:0> fg 2                       # switch job
 | 
			
		||||
  nil
 | 
			
		||||
  irb#2(Foo):005:0> def bar                   # define Foo#bar
 | 
			
		||||
  irb#2(Foo):006:1>  print "bar"
 | 
			
		||||
  irb#2(Foo):007:1> end
 | 
			
		||||
  nil
 | 
			
		||||
  irb#2(Foo):010:0>  Foo.instance_methods
 | 
			
		||||
  ["bar", "foo"]
 | 
			
		||||
  irb#2(Foo):011:0> fg 0                      
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):007:0> f = Foo.new
 | 
			
		||||
  #<Foo:0x4010af3c>
 | 
			
		||||
  irb(main):008:0> irb f                      # invoke subirb which has the
 | 
			
		||||
					      #  context of f (instance of Foo)
 | 
			
		||||
  irb#3(#<Foo:0x4010af3c>):001:0> jobs
 | 
			
		||||
  #0->irb on main (#<Thread:0x400fb7e4> : stop)
 | 
			
		||||
  #1->irb#1 on main (#<Thread:0x40125d64> : stop)
 | 
			
		||||
  #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
 | 
			
		||||
  #3->irb#3 on #<Foo:0x4010af3c> (#<Thread:0x4010a1e0> : running)
 | 
			
		||||
  nil
 | 
			
		||||
  irb#3(#<Foo:0x4010af3c>):002:0> foo         # evaluate f.foo
 | 
			
		||||
  1nil
 | 
			
		||||
  irb#3(#<Foo:0x4010af3c>):003:0> bar         # evaluate f.bar
 | 
			
		||||
  barnil
 | 
			
		||||
  irb#3(#<Foo:0x4010af3c>):004:0> kill 1, 2, 3# kill job
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):009:0> jobs
 | 
			
		||||
  #0->irb on main (#<Thread:0x400fb7e4> : running)
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):010:0> exit                       # exit
 | 
			
		||||
  dim% 
 | 
			
		||||
 | 
			
		||||
= Restrictions
 | 
			
		||||
 | 
			
		||||
Because irb evaluates the inputs immediately after the imput is
 | 
			
		||||
syntactically completed, irb gives slight different result than
 | 
			
		||||
directly use ruby. Known difference is pointed out here. 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
== Declaration of the local variable
 | 
			
		||||
 | 
			
		||||
The following causes an error in ruby:
 | 
			
		||||
 | 
			
		||||
  eval "foo = 0"
 | 
			
		||||
  foo
 | 
			
		||||
  --
 | 
			
		||||
  -:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError)
 | 
			
		||||
  ---
 | 
			
		||||
  NameError
 | 
			
		||||
 | 
			
		||||
Though, the above will successfully done by irb. 
 | 
			
		||||
 | 
			
		||||
  >> eval "foo = 0"
 | 
			
		||||
 => 0
 | 
			
		||||
 >> foo
 | 
			
		||||
 => 0
 | 
			
		||||
 | 
			
		||||
Ruby evaluates a code after reading entire of code and determination
 | 
			
		||||
of the scope of local variables. On the other hand, irb do
 | 
			
		||||
immediately. More precisely, irb evaluate at first
 | 
			
		||||
 | 
			
		||||
  evel "foo = 0" 
 | 
			
		||||
 | 
			
		||||
then foo is defined on this timing. It is because of this
 | 
			
		||||
incompatibility.
 | 
			
		||||
 | 
			
		||||
If you'd like to detect those differences, begin...end can be used:
 | 
			
		||||
 | 
			
		||||
  >> begin
 | 
			
		||||
  ?>   eval "foo = 0"
 | 
			
		||||
  >>   foo
 | 
			
		||||
  >> end
 | 
			
		||||
  NameError: undefined local variable or method `foo' for #<Object:0x4013d0f0>
 | 
			
		||||
  (irb):3
 | 
			
		||||
  (irb_local_binding):1:in `eval'
 | 
			
		||||
 | 
			
		||||
== Here-document
 | 
			
		||||
 | 
			
		||||
Implementation of Here-document is incomplete. 
 | 
			
		||||
 | 
			
		||||
== Symbol
 | 
			
		||||
 | 
			
		||||
Irb can not always recognize a symbol as to be Symbol. Concretely, an
 | 
			
		||||
expression have completed, however Irb regard it as continuation line.
 | 
			
		||||
 | 
			
		||||
==end
 | 
			
		||||
 | 
			
		||||
% Begin Emacs Environment
 | 
			
		||||
% Local Variables:
 | 
			
		||||
% mode: text
 | 
			
		||||
% comment-column: 0
 | 
			
		||||
% comment-start: "%"
 | 
			
		||||
% comment-end: "\n"
 | 
			
		||||
% End:
 | 
			
		||||
%
 | 
			
		||||
							
								
								
									
										391
									
								
								doc/irb/irb.rd.jp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										391
									
								
								doc/irb/irb.rd.jp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,391 @@
 | 
			
		|||
irb -- interactive ruby
 | 
			
		||||
				$Release Version: 0.6 $
 | 
			
		||||
			   	$Revision$
 | 
			
		||||
			   	$Date$
 | 
			
		||||
			   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
==begin
 | 
			
		||||
= irb$B$H$O(B?
 | 
			
		||||
 | 
			
		||||
irb$B$O(Binteractive ruby$B$NN,$G$9(B. ruby$B$N<0$rI8=`F~NO$+$i4JC1$KF~NO(B/$B<B9T$9(B
 | 
			
		||||
$B$k$?$a$N%D!<%k$G$9(B.
 | 
			
		||||
 | 
			
		||||
= $B5/F0(B
 | 
			
		||||
 | 
			
		||||
  % ruby -r irb -e0
 | 
			
		||||
  % irb
 | 
			
		||||
 | 
			
		||||
$B$N$$$:$l$+$G9T$J$$$^$9(B. $BA0<T$N>l9g(Birb$B$X$N%*%W%7%g%s;XDj$O(B, $B0J2<$N$h$&$K(B
 | 
			
		||||
$B$J$j$^$9(B.
 | 
			
		||||
 | 
			
		||||
  % ruby -r irb -e0 -- -v
 | 
			
		||||
 | 
			
		||||
= $B;H$$J}(B
 | 
			
		||||
 | 
			
		||||
irb$B$N;H$$J}$O(B, Ruby$B$5$(CN$C$F$$$l$P$$$?$C$F4JC1$G$9(B. $B4pK\E*$K$O(B irb $B$H(B
 | 
			
		||||
$B$$$&%3%^%s%I$r<B9T$9$k$@$1$G$9(B. irb$B$r<B9T$9$k$H(B, $B0J2<$N$h$&$J%W%m%s%W(B
 | 
			
		||||
$B%H$,I=$l$F$-$^$9(B. $B8e$O(B, ruby$B$N<0$rF~$l$F2<$5$$(B. $B<0$,407k$7$?;~E@$G<B9T(B
 | 
			
		||||
$B$5$l$^$9(B.
 | 
			
		||||
 | 
			
		||||
  dim% irb
 | 
			
		||||
  irb(main):001:0> 1+2
 | 
			
		||||
  3
 | 
			
		||||
  irb(main):002:0> class Foo
 | 
			
		||||
  irb(main):003:1>  def foo
 | 
			
		||||
  irb(main):004:2>    print 1
 | 
			
		||||
  irb(main):005:2>  end
 | 
			
		||||
  irb(main):006:1> end
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):007:0> 
 | 
			
		||||
 | 
			
		||||
$B$^$?(B, irb$B$O(BReadline$B%b%8%e!<%k$K$bBP1~$7$F$$$^$9(B. Readline$B%b%8%e!<%k$,(B
 | 
			
		||||
$B%$%s%9%H!<%k$5$l$F$$$k;~$K$O(B, $B$=$l$r;H$&$N$,I8=`$NF0:n$K$J$j$^$9(B.
 | 
			
		||||
 | 
			
		||||
= $B%3%^%s%I%*%W%7%g%s(B
 | 
			
		||||
 | 
			
		||||
  irb.rb [options] file_name opts
 | 
			
		||||
  options:
 | 
			
		||||
  -f		    ~/.irbrc $B$rFI$_9~$^$J$$(B.
 | 
			
		||||
  -m		    bc$B%b!<%I(B($BJ,?t(B, $B9TNs$N7W;;$,$G$-$k(B)
 | 
			
		||||
  -d                $DEBUG $B$r(Btrue$B$K$9$k(B(ruby -d $B$HF1$8(B)
 | 
			
		||||
  -r load-module    ruby -r $B$HF1$8(B.
 | 
			
		||||
  --inspect	    $B7k2L=PNO$K(Binspect$B$rMQ$$$k(B(bc$B%b!<%I0J30$O%G%U%)%k%H(B). 
 | 
			
		||||
  --noinspect	    $B7k2L=PNO$K(Binspect$B$rMQ$$$J$$(B.
 | 
			
		||||
  --readline	    readline$B%i%$%V%i%j$rMxMQ$9$k(B.
 | 
			
		||||
  --noreadline	    readline$B%i%$%V%i%j$rMxMQ$7$J$$(B. $B%G%U%)%k%H$NF0:n$O(B,
 | 
			
		||||
		    inf-reuby-mode$B0J30$G(Breadline$B%i%$%V%i%j$rMxMQ$7$h$&(B
 | 
			
		||||
		    $B$H$9$k(B. 
 | 
			
		||||
  --prompt prompt-mode
 | 
			
		||||
  --prompt-mode prompt-mode
 | 
			
		||||
		    $B%W%m%s%W%H%b!<%I$r@ZBX$($^$9(B. $B8=:_Dj5A$5$l$F$$$k%W(B
 | 
			
		||||
		    $B%m%s%W%H%b!<%I$O(B, defalut, simple, xmp, inf-ruby$B$,(B
 | 
			
		||||
		    $BMQ0U$5$l$F$$$^$9(B. $B%G%U%)%k%H$O(Bdefault$B%W%m%s%W%H%b!<(B
 | 
			
		||||
		    $B%I$K$J$C$F$$$^$9(B.
 | 
			
		||||
			    
 | 
			
		||||
  --inf-ruby-mode   emacs$B$N(Binf-ruby-mode$BMQ$N%W%m%s%W%HI=<($r9T$J$&(B. $BFC(B
 | 
			
		||||
		    $B$K;XDj$,$J$$8B$j(B, readline$B%i%$%V%i%j$O;H$o$J$/$J$k(B.
 | 
			
		||||
  --simple-prompt
 | 
			
		||||
		    $BHs>o$K%7%s%W%k$J%W%m%s%W%H$rMQ$$$k%b!<%I$G$9(B.
 | 
			
		||||
  --noprompt	    $B%W%m%s%W%HI=<($r9T$J$o$J$$(B.
 | 
			
		||||
  --tracer	    $B%3%^%s%I<B9T;~$K%H%l!<%9$r9T$J$&(B.
 | 
			
		||||
  --back-trace-limit n
 | 
			
		||||
		    $B%P%C%/%H%l!<%9I=<($r%P%C%/%H%l!<%9$NF,$+$i(B n, $B8e$m(B
 | 
			
		||||
		    $B$+$i(Bn$B$@$19T$J$&(B. $B%G%U%)%k%H$O(B16 
 | 
			
		||||
  --irb_debug n	    irb$B$N%G%P%C%0%G%P%C%0%l%Y%k$r(Bn$B$K@_Dj$9$k(B($BMxMQ$7$J(B
 | 
			
		||||
		    $B$$J}$,L5Fq$G$7$g$&(B).
 | 
			
		||||
  -v, --version	    irb$B$N%P!<%8%g%s$rI=<($9$k(B
 | 
			
		||||
 | 
			
		||||
= $B%3%s%U%#%.%e%l!<%7%g%s(B
 | 
			
		||||
 | 
			
		||||
irb$B5/F0;~$K(B``~/.irbrc''$B$rFI$_9~$_$^$9(B. $B$b$7B8:_$7$J$$>l9g$O(B,
 | 
			
		||||
``.irbrc'', ``irb.rc'', ``_irbrc'', ``$irbrc''$B$N=g$K(Bload$B$r;n$_$^$9(B.
 | 
			
		||||
 | 
			
		||||
$B%*%W%7%g%s$r@_Dj$9$kBe$o$j$K(B, $B0J2<$N%3%^%s%I$G$b%G%U%)%k%H$NF0:n$r@_Dj(B
 | 
			
		||||
$B$G$-$^$9(B.
 | 
			
		||||
 | 
			
		||||
  IRB.conf[:IRB_NAME]="irb"
 | 
			
		||||
  IRB.conf[:MATH_MODE]=false
 | 
			
		||||
  IRB.conf[:USE_TRACER]=false
 | 
			
		||||
  IRB.conf[:USE_LOADER]=false
 | 
			
		||||
  IRB.conf[:IGNORE_SIGINT]=true
 | 
			
		||||
  IRB.conf[:IGNORE_EOF]=false
 | 
			
		||||
  IRB.conf[:INSPECT_MODE]=nil
 | 
			
		||||
  IRB.conf[:IRB_RC] = nil
 | 
			
		||||
  IRB.conf[:BACK_TRACE_LIMIT]=16
 | 
			
		||||
  IRB.conf[:USE_LOADER] = false
 | 
			
		||||
  IRB.conf[:USE_READLINE] = nil
 | 
			
		||||
  IRB.conf[:USE_TRACER] = false
 | 
			
		||||
  IRB.conf[:IGNORE_SIGINT] = true
 | 
			
		||||
  IRB.conf[:IGNORE_EOF] = false
 | 
			
		||||
  IRB.conf[:PROMPT_MODE] = :DEFALUT
 | 
			
		||||
  IRB.conf[:PROMPT] = {...}
 | 
			
		||||
  IRB.conf[:DEBUG_LEVEL]=0
 | 
			
		||||
  IRB.conf[:VERBOSE]=true
 | 
			
		||||
 | 
			
		||||
== $B%W%m%s%W%H$N@_Dj(B
 | 
			
		||||
 | 
			
		||||
$B%W%m%s%W%H$r%+%9%?%^%$%:$7$?$$;~$K$O(B, 
 | 
			
		||||
 | 
			
		||||
   IRB.conf[:PROMPT]
 | 
			
		||||
 | 
			
		||||
$B$rMQ$$$^$9(B. $BNc$($P(B, .irbrc$B$NCf$G2<$N$h$&$J<0$r5-=R$7$^$9(B:
 | 
			
		||||
 | 
			
		||||
   IRB.conf[:PROMPT][:MY_PROMPT] = { # $B%W%m%s%W%H%b!<%I$NL>A0(B
 | 
			
		||||
     :PROMPT_I => nil,		  # $BDL>o$N%W%m%s%W%H(B
 | 
			
		||||
     :PROMPT_S => nil,		  # $BJ8;zNs$J$I$N7QB39T$N%W%m%s%W%H(B
 | 
			
		||||
     :PROMPT_C => nil,		  # $B<0$,7QB3$7$F$$$k;~$N%W%m%s%W%H(B
 | 
			
		||||
     :RETURN => "    ==>%s\n"	  # $B%j%?!<%s;~$N%W%m%s%W%H(B
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
$B%W%m%s%W%H%b!<%I$r;XDj$7$?$$;~$K$O(B,
 | 
			
		||||
 | 
			
		||||
  irb --prompt my-prompt
 | 
			
		||||
 | 
			
		||||
$B$G$=$N%W%m%s%W%H%b!<%I$G5/F0$5$l$^$9(B. $B$^$?$O(B, .irbrc$B$K2<<0$r5-=R$7$F$b(B
 | 
			
		||||
OK$B$G$9(B.
 | 
			
		||||
 | 
			
		||||
  IRB.conf[:PROMPT_MODE] = :MY_PROMPT
 | 
			
		||||
 | 
			
		||||
PROMPT_I, PROMPT_S, PROMPT_C$B$O(B, $B%U%)!<%^%C%H$r;XDj$7$^$9(B.
 | 
			
		||||
 | 
			
		||||
  %N	$B5/F0$7$F$$$k%3%^%s%IL>$,=PNO$5$l$k(B.
 | 
			
		||||
  %m	main$B%*%V%8%'%/%H(B(self)$B$,(Bto_s$B$G=PNO$5$l$k(B.
 | 
			
		||||
  %M	main$B%*%V%8%'%/%H(B(self)$B$,(Binspect$B$5$l$F=PNO$5$l$k(B.
 | 
			
		||||
  %l	$BJ8;zNsCf$N%?%$%W$rI=$9(B(", ', /, ], `]'$B$O(B%w$B$NCf$N;~(B)
 | 
			
		||||
  %NNi	$B%$%s%G%s%H$N%l%Y%k$rI=$9(B. NN$B$O?t;z$,F~$j(Bprintf$B$N(B%NNd$B$HF1$8(B. $B>J(B
 | 
			
		||||
	$BN,2DG=(B
 | 
			
		||||
  %NNn	$B9THV9f$rI=$7$^$9(B.
 | 
			
		||||
  %%    %
 | 
			
		||||
 | 
			
		||||
$BNc$($P(B, $B%G%U%)%k%H$N%W%m%s%W%H%b!<%I$O(B:
 | 
			
		||||
 | 
			
		||||
  IRB.conf[:PROMPT_MODE][:DEFAULT] = {
 | 
			
		||||
      :PROMPT_I => "%N(%m):%03n:%i> ",
 | 
			
		||||
      :PROMPT_S => "%N(%m):%03n:%i%l ",
 | 
			
		||||
      :PROMPT_C => "%N(%m):%03n:%i* ",
 | 
			
		||||
      :RETURN => "%s\n"
 | 
			
		||||
  } 
 | 
			
		||||
 | 
			
		||||
$B$H$J$C$F$$$^$9(B.
 | 
			
		||||
 | 
			
		||||
RETURN$B$O(B, $B8=:_$N$H$3$m(Bprintf$B7A<0$G$9(B. $B>-Mh;EMM$,JQ$o$k$+$bCN$l$^$;$s(B.
 | 
			
		||||
 | 
			
		||||
== $B%5%V(Birb$B$N@_Dj(B
 | 
			
		||||
 | 
			
		||||
$B%3%^%s%I%i%$%s%*%W%7%g%s$*$h$S(BIRB.conf$B$O(B($B%5%V(B)irb$B5/F0;~$N%G%U%)%k%H$N(B
 | 
			
		||||
$B@_Dj$r7h$a$k$b$N$G(B, `5. $B%3%^%s%I(B'$B$K$"$k(Bconf$B$G8DJL$N(B($B%5%V(B)irb$B$N@_Dj$,$G(B
 | 
			
		||||
$B$-$k$h$&$K$J$C$F$$$^$9(B.
 | 
			
		||||
 | 
			
		||||
IRB.conf[:IRB_RC]$B$K(Bproc$B$,@_Dj$5$l$F$$$k$H(B, $B%5%V(Birb$B$r5/F0$9$k;~$K$=$N(B
 | 
			
		||||
proc$B$r(Birb$B$N%3%s%F%-%9%H$r0z?t$H$7$F8F$S=P$7$^$9(B. $B$3$l$K$h$C$F8DJL$N%5(B
 | 
			
		||||
$B%V(Birb$B$4$H$K@_Dj$rJQ$($k$3$H$,$G$-$k$h$&$K$J$j$^$9(B.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
= $B%3%^%s%I(B
 | 
			
		||||
 | 
			
		||||
irb$B3HD%%3%^%s%I$O(B, $B4JC1$JL>A0$HF,$K(B`irb_'$B$r$D$1$?L>A0$HN>J}Dj5A$5$l$F(B
 | 
			
		||||
$B$$$^$9(B. $B$3$l$O(B, $B4JC1$JL>A0$,(Boverride$B$5$l$?;~$N$?$a$G$9(B.
 | 
			
		||||
 | 
			
		||||
--- exit, quit, irb_exit	
 | 
			
		||||
    $B=*N;$9$k(B. 
 | 
			
		||||
    $B%5%V(Birb$B$N>l9g(B, $B$=$N%5%V(Birb$B$r=*N;$9$k(B.
 | 
			
		||||
    cb$B$7$F$$$k>l9g(B, $B$=$N%P%$%s%G%#%s%0$N%b!<%I$r=*N;$9$k(B.
 | 
			
		||||
 | 
			
		||||
--- conf, irb_context
 | 
			
		||||
    irb$B$N8=:_$N@_Dj$rI=<($9$k(B. $B@_Dj$NJQ99$O(B, conf$B$K%a%C%;!<%8$rAw$k$3(B
 | 
			
		||||
    $B$H$K$h$C$F9T$J$($k(B. 
 | 
			
		||||
 | 
			
		||||
--- conf.back_trace_limit
 | 
			
		||||
    $B%P%C%/%H%l!<%9I=<($r%P%C%/%H%l!<%9$NF,$+$i(Bn, $B8e$m$+$i(Bn$B$@$19T$J$&(B.
 | 
			
		||||
    $B%G%U%)%k%H$O(B16
 | 
			
		||||
    
 | 
			
		||||
--- conf.debug_level = N
 | 
			
		||||
    irb$BMQ$N%G%P%C%0%l%Y%k$N@_Dj(B
 | 
			
		||||
 | 
			
		||||
--- conf.ignore_eof = true/false
 | 
			
		||||
    ^D$B$,F~NO$5$l$?;~$NF0:n$r@_Dj$9$k(B. true$B$N;~$O(B^D$B$rL5;k$9$k(B, false$B$N(B
 | 
			
		||||
    $B;~$O(Birb$B$r=*N;$9$k(B. 
 | 
			
		||||
 | 
			
		||||
--- conf.ignore_sigint= true/false
 | 
			
		||||
    ^C$B$,F~NO$5$l$?;~$NF0:n$r@_Dj$9$k(B. false$B;~$O(B, irb$B$r=*N;$9$k(B. true$B$N(B
 | 
			
		||||
    $B;~$NF0:n$O0J2<$N$h$&$K$J$k(B:
 | 
			
		||||
      $BF~NOCf(B: $B$3$l$^$GF~NO$7$?$b$N$r%-%c%s%;%k$7%H%C%W%l%Y%k$KLa$k(B. 
 | 
			
		||||
      $B<B9TCf(B: $B<B9T$rCf;_$9$k(B.
 | 
			
		||||
 | 
			
		||||
--- conf.inf_ruby_mode = true/false
 | 
			
		||||
    inf-ruby-mode$BMQ$N%W%m%s%W%HI=<($r9T$J$&(B. $B%G%U%)%k%H$O(Bfalse.
 | 
			
		||||
 | 
			
		||||
--- conf.inspect_mode = true/false/nil
 | 
			
		||||
    $B%$%s%9%Z%/%H%b!<%I$r@_Dj$9$k(B.
 | 
			
		||||
    true: $B%$%s%9%Z%/%H$7$FI=<($9$k(B.
 | 
			
		||||
    false: $BDL>o$N(Bprint$B$GI=<($9$k(B.
 | 
			
		||||
    nil: $BDL>o%b!<%I$G$"$l$P(B, inspect mode$B$H$J$j(B, math$B%b!<%I$N;~$O(B, non
 | 
			
		||||
	 inspect mode$B$H$J$k(B.   
 | 
			
		||||
 | 
			
		||||
--- conf.irb_level
 | 
			
		||||
    $B;2>H$N$_(B. irb$B$,2?CJ(Bcb$B$7$F$$$k$+(B?
 | 
			
		||||
 | 
			
		||||
--- conf.math_mode
 | 
			
		||||
    $B;2>H$N$_(B. bc$B%b!<%I(B($BJ,?t(B, $B9TNs$N7W;;$,$G$-$^$9(B)$B$+$I$&$+(B?
 | 
			
		||||
 | 
			
		||||
--- conf.use_loader = true/false
 | 
			
		||||
    load/require$B;~$K(Birb$B$N(Bfile$BFI$_9~$_5!G=$rMQ$$$k%b!<%I$N%9%$%C%A(B($B%G%U%)(B
 | 
			
		||||
    $B%k%H$OMQ$$$J$$(B). $B$3$N%b!<%I$O(BIRB$BA4BN$KH?1G$5$l$k(B.
 | 
			
		||||
 | 
			
		||||
--- conf.prompt_c
 | 
			
		||||
    if$B$ND>8e$J$I(B, $B9T$,7QB3$7$F$$$k;~$N%W%m%s%W%H(B.
 | 
			
		||||
 | 
			
		||||
--- conf.prompt_i
 | 
			
		||||
    $BDL>o$N%W%m%s%W%H(B.
 | 
			
		||||
 | 
			
		||||
--- conf.prompt_s
 | 
			
		||||
    $BJ8;zNsCf$J$I$rI=$9%W%m%s%W%H(B.
 | 
			
		||||
 | 
			
		||||
--- conf.rc
 | 
			
		||||
    ~/.irbrc$B$rFI$_9~$s$@$+$I$&$+(B?
 | 
			
		||||
 | 
			
		||||
--- conf.use_prompt = true/false
 | 
			
		||||
    $B%W%m%s%W%HI=<($9$k$+$I$&$+(B? $B%G%U%)%k%H$G$O%W%m%s%W%H$rI=<($9$k(B.
 | 
			
		||||
 | 
			
		||||
--- conf.use_readline = true/false/nil
 | 
			
		||||
    readline$B$r;H$&$+$I$&$+(B?
 | 
			
		||||
    true: readline$B$r;H$&(B.
 | 
			
		||||
    false: readline$B$r;H$o$J$$(B.
 | 
			
		||||
    nil: ($B%G%U%)%k%H(B)inf-reuby-mode$B0J30$G(Breadline$B%i%$%V%i%j$rMxMQ$7$h(B
 | 
			
		||||
         $B$&$H$9$k(B.  
 | 
			
		||||
 | 
			
		||||
--- conf.verbose=T/F
 | 
			
		||||
    irb$B$+$i$$$m$$$m$J%a%C%;!<%8$r=PNO$9$k$+(B?
 | 
			
		||||
 | 
			
		||||
--- cb, irb_change_binding [obj]
 | 
			
		||||
    $B%m!<%+%kJQ?t$N%9%3!<%W$,0c$&?7$?$J(Bbinding$B$K0\$k(B.  obj$B$,;XDj$5$l$?(B
 | 
			
		||||
    $B;~$O(B, $B$=$N(Bobj$B$r(Bself$B$H$9$k(B. 
 | 
			
		||||
 | 
			
		||||
--- irb [obj]
 | 
			
		||||
    $B%5%V(Birb$B$rN)$A$"$2$k(B. obj$B$,;XDj$5$l$?;~$O(B, $B$=$N(Bobj$B$r(Bself$B$H$9$k(B.
 | 
			
		||||
 | 
			
		||||
--- jobs, irb_jobs
 | 
			
		||||
    $B%5%V(Birb$B$N%j%9%H(B
 | 
			
		||||
 | 
			
		||||
--- fg n, irb_fg n
 | 
			
		||||
    $B;XDj$7$?%5%V(Birb$B$K%9%$%C%A$9$k(B. n$B$O(B, $B<!$N$b$N$r;XDj$9$k(B.
 | 
			
		||||
 | 
			
		||||
      irb$BHV9f(B
 | 
			
		||||
      $B%9%l%C%I(B
 | 
			
		||||
      irb$B%*%V%8%'%/%H(B
 | 
			
		||||
      self(irb obj$B$G5/F0$7$?;~$N(Bobj)
 | 
			
		||||
 | 
			
		||||
--- kill n, irb_kill n
 | 
			
		||||
      $B%5%V(Birb$B$r(Bkill$B$9$k(B. n$B$O(Bfg$B$HF1$8(B.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
= $B%7%9%F%`JQ?t(B
 | 
			
		||||
 | 
			
		||||
   _  $BA0$N7W;;$N<B9T7k2L$r3P$($F$$$k(B($B%m!<%+%kJQ?t(B).
 | 
			
		||||
 | 
			
		||||
=  $B;HMQNc(B
 | 
			
		||||
 | 
			
		||||
$B0J2<$N$h$&$J46$8$G$9(B.
 | 
			
		||||
 | 
			
		||||
  dim% ruby irb.rb
 | 
			
		||||
  irb(main):001:0> irb                        # $B%5%V(Birb$B$NN)$A$"$2(B
 | 
			
		||||
  irb#1(main):001:0> jobs                     # $B%5%V(Birb$B$N%j%9%H(B
 | 
			
		||||
  #0->irb on main (#<Thread:0x400fb7e4> : stop)
 | 
			
		||||
  #1->irb#1 on main (#<Thread:0x40125d64> : running)
 | 
			
		||||
  nil
 | 
			
		||||
  irb#1(main):002:0> fg 0                     # job$B$N%9%$%C%A(B
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):002:0> class Foo;end
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):003:0> irb Foo                    # Foo$B$r%3%s%F%-%9%H$7$F(Birb
 | 
			
		||||
					      # $BN)$A$"$2(B
 | 
			
		||||
  irb#2(Foo):001:0> def foo                   # Foo#foo$B$NDj5A(B
 | 
			
		||||
  irb#2(Foo):002:1>   print 1
 | 
			
		||||
  irb#2(Foo):003:1> end
 | 
			
		||||
  nil
 | 
			
		||||
  irb#2(Foo):004:0> fg 0                      # job$B$r%9%$%C%A(B
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):004:0> jobs                       # job$B$N%j%9%H(B
 | 
			
		||||
  #0->irb on main (#<Thread:0x400fb7e4> : running)
 | 
			
		||||
  #1->irb#1 on main (#<Thread:0x40125d64> : stop)
 | 
			
		||||
  #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):005:0> Foo.instance_methods       # Foo#foo$B$,$A$c$s$HDj5A$5(B
 | 
			
		||||
					      # $B$l$F$$$k(B
 | 
			
		||||
  ["foo"]
 | 
			
		||||
  irb(main):006:0> fg 2                       # job$B$r%9%$%C%A(B
 | 
			
		||||
  nil
 | 
			
		||||
  irb#2(Foo):005:0> def bar                   # Foo#bar$B$rDj5A(B
 | 
			
		||||
  irb#2(Foo):006:1>  print "bar"
 | 
			
		||||
  irb#2(Foo):007:1> end
 | 
			
		||||
  nil
 | 
			
		||||
  irb#2(Foo):010:0>  Foo.instance_methods
 | 
			
		||||
  ["bar", "foo"]
 | 
			
		||||
  irb#2(Foo):011:0> fg 0                      
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):007:0> f = Foo.new
 | 
			
		||||
  #<Foo:0x4010af3c>
 | 
			
		||||
  irb(main):008:0> irb f                      # Foo$B$N%$%s%9%?%s%9$G(Birb$B$r(B
 | 
			
		||||
					      # $BN)$A$"$2$k(B.
 | 
			
		||||
  irb#3(#<Foo:0x4010af3c>):001:0> jobs
 | 
			
		||||
  #0->irb on main (#<Thread:0x400fb7e4> : stop)
 | 
			
		||||
  #1->irb#1 on main (#<Thread:0x40125d64> : stop)
 | 
			
		||||
  #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
 | 
			
		||||
  #3->irb#3 on #<Foo:0x4010af3c> (#<Thread:0x4010a1e0> : running)
 | 
			
		||||
  nil
 | 
			
		||||
  irb#3(#<Foo:0x4010af3c>):002:0> foo         # f.foo$B$N<B9T(B
 | 
			
		||||
  nil
 | 
			
		||||
  irb#3(#<Foo:0x4010af3c>):003:0> bar         # f.bar$B$N<B9T(B
 | 
			
		||||
  barnil
 | 
			
		||||
  irb#3(#<Foo:0x4010af3c>):004:0> kill 1, 2, 3# job$B$N(Bkill
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):009:0> jobs
 | 
			
		||||
  #0->irb on main (#<Thread:0x400fb7e4> : running)
 | 
			
		||||
  nil
 | 
			
		||||
  irb(main):010:0> exit                       # $B=*N;(B
 | 
			
		||||
  dim% 
 | 
			
		||||
 | 
			
		||||
= $B;HMQ>e$N@)8B(B
 | 
			
		||||
 | 
			
		||||
irb$B$O(B, $BI>2A$G$-$k;~E@(B($B<0$,JD$8$?;~E@(B)$B$G$NC`<!<B9T$r9T$J$$$^$9(B. $B$7$?$,$C(B
 | 
			
		||||
$B$F(B, ruby$B$rD>@\;H$C$?;~$H(B, $B<c430[$J$kF0:n$r9T$J$&>l9g$,$"$j$^$9(B.
 | 
			
		||||
 | 
			
		||||
$B8=:_L@$i$+$K$J$C$F$$$kLdBjE@$r@bL@$7$^$9(B.
 | 
			
		||||
 | 
			
		||||
== $B%m!<%+%kJQ?t$N@k8@(B
 | 
			
		||||
 | 
			
		||||
ruby$B$G$O(B, $B0J2<$N%W%m%0%i%`$O%(%i!<$K$J$j$^$9(B.
 | 
			
		||||
 | 
			
		||||
  eval "foo = 0"
 | 
			
		||||
  foo
 | 
			
		||||
  --
 | 
			
		||||
  -:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError)
 | 
			
		||||
  ---
 | 
			
		||||
  NameError
 | 
			
		||||
 | 
			
		||||
$B$H$3$m$,(B, irb$B$rMQ$$$k$H(B
 | 
			
		||||
 | 
			
		||||
  >> eval "foo = 0"
 | 
			
		||||
  => 0
 | 
			
		||||
  >> foo
 | 
			
		||||
  => 0
 | 
			
		||||
 | 
			
		||||
$B$H$J$j(B, $B%(%i!<$r5/$3$7$^$;$s(B. $B$3$l$O(B, ruby$B$,:G=i$K%9%/%j%W%HA4BN$r%3%s(B
 | 
			
		||||
$B%Q%$%k$7$F%m!<%+%kJQ?t$r7hDj$9$k$+$i$G$9(B. $B$=$l$KBP$7(B, irb$B$O<B9T2DG=$K(B
 | 
			
		||||
$B$J$k(B($B<0$,JD$8$k(B)$B$H<+F0E*$KI>2A$7$F$$$k$+$i$G$9(B. $B>e5-$NNc$G$O(B, 
 | 
			
		||||
 | 
			
		||||
  evel "foo = 0" 
 | 
			
		||||
 | 
			
		||||
$B$r9T$J$C$?;~E@$GI>2A$r9T$J$$(B, $B$=$N;~E@$GJQ?t$,Dj5A$5$l$k$?$a(B, $B<!<0$G(B 
 | 
			
		||||
$BJQ?t(Bfoo$B$ODj5A$5$l$F$$$k$+$i$G$9(B.
 | 
			
		||||
 | 
			
		||||
$B$3$N$h$&$J(Bruby$B$H(Birb$B$NF0:n$N0c$$$r2r7h$7$?$$>l9g$O(B, begin...end$B$G3g$C$F(B
 | 
			
		||||
$B%P%C%AE*$K<B9T$7$F2<$5$$(B:
 | 
			
		||||
 | 
			
		||||
  >> begin
 | 
			
		||||
  ?>   eval "foo = 0"
 | 
			
		||||
  >>   foo
 | 
			
		||||
  >> end
 | 
			
		||||
  NameError: undefined local variable or method `foo' for #<Object:0x4013d0f0>
 | 
			
		||||
  (irb):3
 | 
			
		||||
  (irb_local_binding):1:in `eval'
 | 
			
		||||
 | 
			
		||||
== $B%R%"%I%-%e%a%s%H(B
 | 
			
		||||
 | 
			
		||||
$B8=:_$N$H$3$m%R%"%I%-%e%a%s%H$N<BAu$OIT40A4$G$9(B. 
 | 
			
		||||
 | 
			
		||||
== $B%7%s%\%k(B
 | 
			
		||||
 | 
			
		||||
$B%7%s%\%k$G$"$k$+$I$&$+$NH=CG$r4V0c$($k$3$H$,$"$j$^$9(B. $B6qBNE*$K$O<0$,40N;(B
 | 
			
		||||
$B$7$F$$$k$N$K7QB39T$H8+$J$9$3$H$,$"$j$^$9(B.
 | 
			
		||||
 | 
			
		||||
==end
 | 
			
		||||
 | 
			
		||||
% Begin Emacs Environment
 | 
			
		||||
% Local Variables:
 | 
			
		||||
% mode: text
 | 
			
		||||
% comment-column: 0
 | 
			
		||||
% comment-start: "%"
 | 
			
		||||
% comment-end: "\n"
 | 
			
		||||
% End:
 | 
			
		||||
%
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										317
									
								
								lib/irb.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										317
									
								
								lib/irb.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,317 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb.rb - irb main module
 | 
			
		||||
#   	$Release Version: 0.7.3 $
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
require "e2mmap"
 | 
			
		||||
 | 
			
		||||
require "irb/init"
 | 
			
		||||
require "irb/context"
 | 
			
		||||
require "irb/extend-command"
 | 
			
		||||
require "irb/workspace"
 | 
			
		||||
 | 
			
		||||
require "irb/ruby-lex"
 | 
			
		||||
require "irb/input-method"
 | 
			
		||||
require "irb/locale"
 | 
			
		||||
 | 
			
		||||
STDOUT.sync = true
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
  @RCS_ID='-$Id$-'
 | 
			
		||||
 | 
			
		||||
  class Abort < Exception;end
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  @CONF = {}
 | 
			
		||||
 | 
			
		||||
  def IRB.conf
 | 
			
		||||
    @CONF
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # IRB version method
 | 
			
		||||
  def IRB.version
 | 
			
		||||
    if v = @CONF[:VERSION] then return v end
 | 
			
		||||
 | 
			
		||||
    require "irb/version"
 | 
			
		||||
    rv = @RELEASE_VERSION.sub(/\.0/, "")
 | 
			
		||||
    @CONF[:VERSION] = format("irb %s(%s)", rv, @LAST_UPDATE_DATE)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # initialize IRB and start TOP_LEVEL irb
 | 
			
		||||
  # (JP: IRB$B=i4|2=$H%H%C%W%l%Y%k(Birb$B5/F0(B)
 | 
			
		||||
  def IRB.start(ap_path = nil)
 | 
			
		||||
    $0 = File::basename(ap_path, ".rb") if ap_path
 | 
			
		||||
 | 
			
		||||
    IRB.initialize(ap_path)
 | 
			
		||||
    IRB.parse_opts
 | 
			
		||||
    IRB.load_modules
 | 
			
		||||
 | 
			
		||||
    if @CONF[:SCRIPT]
 | 
			
		||||
      irb = Irb.new(nil, @CONF[:SCRIPT])
 | 
			
		||||
    else
 | 
			
		||||
      irb = Irb.new
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
 | 
			
		||||
    @CONF[:MAIN_CONTEXT] = irb.context
 | 
			
		||||
 | 
			
		||||
    trap("SIGINT") do
 | 
			
		||||
      irb.signal_handle
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    catch(:IRB_EXIT) do
 | 
			
		||||
      irb.eval_input
 | 
			
		||||
    end
 | 
			
		||||
    print "\n"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def IRB.irb_exit(irb, ret)
 | 
			
		||||
    throw :IRB_EXIT, ret
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def IRB.irb_abort(irb, exception = Abort)
 | 
			
		||||
    if defined? Thread
 | 
			
		||||
      irb.context.thread.raise exception, "abort then interrupt!!"
 | 
			
		||||
    else
 | 
			
		||||
      raise exception, "abort then interrupt!!"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # irb interpriter main routine 
 | 
			
		||||
  # (JP: irb$B%$%s%?%W%j%?K\BN(B)
 | 
			
		||||
  #
 | 
			
		||||
  class Irb
 | 
			
		||||
    def initialize(workspace = nil, input_method = nil)
 | 
			
		||||
      @context = Context.new(self, workspace, input_method)
 | 
			
		||||
      @context.main.extend ExtendCommand
 | 
			
		||||
      @signal_status = :IN_IRB
 | 
			
		||||
 | 
			
		||||
      @scanner = RubyLex.new
 | 
			
		||||
      @scanner.exception_on_syntax_error = false
 | 
			
		||||
    end
 | 
			
		||||
    attr_reader :context
 | 
			
		||||
    attr_accessor :scanner
 | 
			
		||||
 | 
			
		||||
    def eval_input
 | 
			
		||||
      @scanner.set_input(@context.io) do
 | 
			
		||||
	signal_status(:IN_INPUT) do
 | 
			
		||||
	  unless l = @context.io.gets
 | 
			
		||||
	    if @context.ignore_eof? and @context.io.readable_atfer_eof?
 | 
			
		||||
	      l = "\n"
 | 
			
		||||
	      if @context.verbose?
 | 
			
		||||
		printf "Use \"exit\" to leave %s\n", @context.ap_name
 | 
			
		||||
	      end
 | 
			
		||||
	    end
 | 
			
		||||
	  end
 | 
			
		||||
	  l
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      @scanner.set_prompt do
 | 
			
		||||
	|ltype, indent, continue, line_no|
 | 
			
		||||
	if ltype
 | 
			
		||||
	  f = @context.prompt_s
 | 
			
		||||
	elsif continue
 | 
			
		||||
	  f = @context.prompt_c
 | 
			
		||||
	else @context.prompt_i
 | 
			
		||||
	  f = @context.prompt_i
 | 
			
		||||
	end
 | 
			
		||||
	f = "" unless f
 | 
			
		||||
	@context.io.prompt = p = prompt(f, ltype, indent, line_no)
 | 
			
		||||
	if @context.auto_indent_mode
 | 
			
		||||
	  unless ltype
 | 
			
		||||
	    ind = prompt(@context.prompt_i, ltype, indent, line_no).size + 
 | 
			
		||||
	      indent * 2 - p.size
 | 
			
		||||
	    ind += 2 if continue
 | 
			
		||||
	    @context.io.prompt = p + " " * ind if ind > 0
 | 
			
		||||
	  end
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
       
 | 
			
		||||
      @scanner.each_top_level_statement do
 | 
			
		||||
	|line, line_no|
 | 
			
		||||
	signal_status(:IN_EVAL) do
 | 
			
		||||
	  begin
 | 
			
		||||
	    trace_in do
 | 
			
		||||
	      @context._ = @context.workspace.evaluate(line, 
 | 
			
		||||
						       @context.irb_path, 
 | 
			
		||||
						       line_no)
 | 
			
		||||
#	      @context._ = irb_eval(line, @context.bind, @context.irb_path, line_no)
 | 
			
		||||
	    end
 | 
			
		||||
 | 
			
		||||
	    if @context.inspect?
 | 
			
		||||
	      printf @context.return_format, @context._.inspect
 | 
			
		||||
	    else
 | 
			
		||||
	      printf @context.return_format, @context._
 | 
			
		||||
	    end
 | 
			
		||||
	  rescue StandardError, ScriptError, Abort
 | 
			
		||||
	    $! = RuntimeError.new("unknown exception raised") unless $!
 | 
			
		||||
	    print $!.type, ": ", $!, "\n"
 | 
			
		||||
	    if  $@[0] =~ /irb(2)?(\/.*|-.*|\.rb)?:/ && $!.type.to_s !~ /^IRB/
 | 
			
		||||
	      irb_bug = true 
 | 
			
		||||
	    else
 | 
			
		||||
	      irb_bug = false
 | 
			
		||||
	    end
 | 
			
		||||
	    
 | 
			
		||||
	    messages = []
 | 
			
		||||
	    lasts = []
 | 
			
		||||
	    levels = 0
 | 
			
		||||
	    for m in $@
 | 
			
		||||
	      m = @context.workspace.filter_backtrace(m) unless irb_bug
 | 
			
		||||
	      if m
 | 
			
		||||
		if messages.size < @context.back_trace_limit
 | 
			
		||||
		  messages.push "\tfrom "+m
 | 
			
		||||
		else
 | 
			
		||||
		  lasts.push "\tfrom "+m
 | 
			
		||||
		  if lasts.size > @context.back_trace_limit
 | 
			
		||||
		    lasts.shift 
 | 
			
		||||
		    levels += 1
 | 
			
		||||
		  end
 | 
			
		||||
		end
 | 
			
		||||
	      end
 | 
			
		||||
	    end
 | 
			
		||||
	    print messages.join("\n"), "\n"
 | 
			
		||||
	    unless lasts.empty?
 | 
			
		||||
	      printf "... %d levels...\n", levels if levels > 0
 | 
			
		||||
	      print lasts.join("\n")
 | 
			
		||||
	    end
 | 
			
		||||
	    print "Maybe IRB bug!!\n" if irb_bug
 | 
			
		||||
	  end
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
#     def irb_eval(line, bind, path, line_no)
 | 
			
		||||
#       id, str = catch(:IRB_TOPLEVEL_EVAL){
 | 
			
		||||
# 	return eval(line, bind, path, line_no)
 | 
			
		||||
#       }
 | 
			
		||||
#       case id
 | 
			
		||||
#       when :EVAL_TOPLEVEL
 | 
			
		||||
# 	eval(str, bind, "(irb_internal)", 1)
 | 
			
		||||
#       when :EVAL_CONTEXT
 | 
			
		||||
# 	@context.instance_eval(str)
 | 
			
		||||
#       else
 | 
			
		||||
# 	IRB.fail IllegalParameter
 | 
			
		||||
#       end
 | 
			
		||||
#     end
 | 
			
		||||
 | 
			
		||||
    def signal_handle
 | 
			
		||||
      unless @context.ignore_sigint?
 | 
			
		||||
	print "\nabort!!\n" if @context.verbose?
 | 
			
		||||
	exit
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      case @signal_status
 | 
			
		||||
      when :IN_INPUT
 | 
			
		||||
	print "^C\n"
 | 
			
		||||
	@scanner.initialize_input
 | 
			
		||||
	print @context.io.prompt
 | 
			
		||||
      when :IN_EVAL
 | 
			
		||||
	IRB.irb_abort(self)
 | 
			
		||||
      when :IN_LOAD
 | 
			
		||||
	IRB.irb_abort(self, LoadAbort)
 | 
			
		||||
      when :IN_IRB
 | 
			
		||||
	# ignore (JP: $B2?$b$7$J$$(B.)
 | 
			
		||||
      else
 | 
			
		||||
	# ignore (JP: $B$=$NB>$N>l9g$b2?$b$7$J$$(B.)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def signal_status(status)
 | 
			
		||||
      return yield if @signal_status == :IN_LOAD
 | 
			
		||||
 | 
			
		||||
      signal_status_back = @signal_status
 | 
			
		||||
      @signal_status = status
 | 
			
		||||
      begin
 | 
			
		||||
	yield
 | 
			
		||||
      ensure
 | 
			
		||||
	@signal_status = signal_status_back
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def trace_in
 | 
			
		||||
      Tracer.on if @context.use_tracer?
 | 
			
		||||
      begin
 | 
			
		||||
	yield
 | 
			
		||||
      ensure
 | 
			
		||||
	Tracer.off if @context.use_tracer?
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def prompt(prompt, ltype, indent, line_no)
 | 
			
		||||
      p = prompt.dup
 | 
			
		||||
      p.gsub!(/%([0-9]+)?([a-zA-Z])/) do
 | 
			
		||||
	case $2
 | 
			
		||||
	when "N"
 | 
			
		||||
	  @context.irb_name
 | 
			
		||||
	when "m"
 | 
			
		||||
	  @context.main.to_s
 | 
			
		||||
	when "M"
 | 
			
		||||
	  @context.main.inspect
 | 
			
		||||
	when "l"
 | 
			
		||||
	  ltype
 | 
			
		||||
	when "i"
 | 
			
		||||
	  if $1 
 | 
			
		||||
	    format("%" + $1 + "d", indent)
 | 
			
		||||
	  else
 | 
			
		||||
	    indent.to_s
 | 
			
		||||
	  end
 | 
			
		||||
	when "n"
 | 
			
		||||
	  if $1 
 | 
			
		||||
	    format("%" + $1 + "d", line_no)
 | 
			
		||||
	  else
 | 
			
		||||
	    line_no.to_s
 | 
			
		||||
	  end
 | 
			
		||||
	when "%"
 | 
			
		||||
	  "%"
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
      p
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def inspect
 | 
			
		||||
      ary = []
 | 
			
		||||
      for iv in instance_variables
 | 
			
		||||
	case iv
 | 
			
		||||
	when "@signal_status"
 | 
			
		||||
	  ary.push format("%s=:%s", iv, @signal_status.id2name)
 | 
			
		||||
	when "@context"
 | 
			
		||||
	  ary.push format("%s=%s", iv, eval(iv).__to_s__)
 | 
			
		||||
	else
 | 
			
		||||
	  ary.push format("%s=%s", iv, eval(iv))
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
      format("#<%s: %s>", type, ary.join(", "))
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Singleton method
 | 
			
		||||
  def @CONF.inspect
 | 
			
		||||
    IRB.version unless self[:VERSION]
 | 
			
		||||
 | 
			
		||||
    array = []
 | 
			
		||||
    for k, v in sort{|a1, a2| a1[0].id2name <=> a2[0].id2name}
 | 
			
		||||
      case k
 | 
			
		||||
      when :MAIN_CONTEXT
 | 
			
		||||
	next
 | 
			
		||||
      when :PROMPT
 | 
			
		||||
	s = v.collect{
 | 
			
		||||
	  |kk, vv|
 | 
			
		||||
	  ss = vv.collect{|kkk, vvv| ":#{kkk.id2name}=>#{vvv.inspect}"}
 | 
			
		||||
	  format(":%s=>{%s}", kk.id2name, ss.join(", "))
 | 
			
		||||
	}
 | 
			
		||||
	array.push format("CONF[:%s]={%s}", k.id2name, s.join(", "))
 | 
			
		||||
      else
 | 
			
		||||
	array.push format("CONF[:%s]=%s", k.id2name, v.inspect)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    array.join("\n")
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										290
									
								
								lib/irb/context.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										290
									
								
								lib/irb/context.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,290 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb/context.rb - irb context
 | 
			
		||||
#   	$Release Version: 0.7.3$
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#   
 | 
			
		||||
#
 | 
			
		||||
module IRB
 | 
			
		||||
  class Context
 | 
			
		||||
    #
 | 
			
		||||
    # Arguments:
 | 
			
		||||
    #   input_method: nil -- stdin or readline
 | 
			
		||||
    #		      String -- File
 | 
			
		||||
    #		      other -- using this as InputMethod
 | 
			
		||||
    #
 | 
			
		||||
    def initialize(irb, workspace = nil, input_method = nil)
 | 
			
		||||
      @irb = irb
 | 
			
		||||
      if workspace
 | 
			
		||||
	@workspace = workspace
 | 
			
		||||
      else
 | 
			
		||||
	@workspace = WorkSpace.new unless workspace
 | 
			
		||||
      end
 | 
			
		||||
      @thread = Thread.current if defined? Thread
 | 
			
		||||
      @irb_level = 0
 | 
			
		||||
 | 
			
		||||
      # copy of default configuration
 | 
			
		||||
      # (JP: $B%G%U%)%k%H%3%s%U%#%.%e%l!<%7%g%s$N%3%T!<(B)
 | 
			
		||||
      @ap_name = IRB.conf[:AP_NAME]
 | 
			
		||||
      @rc = IRB.conf[:RC]
 | 
			
		||||
      @load_modules = IRB.conf[:LOAD_MODULES]
 | 
			
		||||
 | 
			
		||||
      self.math_mode = IRB.conf[:MATH_MODE]
 | 
			
		||||
      @use_readline = IRB.conf[:USE_READLINE]
 | 
			
		||||
      @inspect_mode = IRB.conf[:INSPECT_MODE]
 | 
			
		||||
      self.use_tracer = IRB.conf[:USE_TRACER]
 | 
			
		||||
#      @use_loader = IRB.conf[:USE_LOADER]
 | 
			
		||||
 | 
			
		||||
      self.prompt_mode = IRB.conf[:PROMPT_MODE]
 | 
			
		||||
  
 | 
			
		||||
      @ignore_sigint = IRB.conf[:IGNORE_SIGINT]
 | 
			
		||||
      @ignore_eof = IRB.conf[:IGNORE_EOF]
 | 
			
		||||
 | 
			
		||||
      @back_trace_limit = IRB.conf[:BACK_TRACE_LIMIT]
 | 
			
		||||
      
 | 
			
		||||
      debug_level = IRB.conf[:DEBUG_LEVEL]
 | 
			
		||||
      @verbose = IRB.conf[:VERBOSE]
 | 
			
		||||
 | 
			
		||||
      @tracer_initialized = false
 | 
			
		||||
 | 
			
		||||
      if IRB.conf[:SINGLE_IRB] or !defined?(JobManager)
 | 
			
		||||
	@irb_name = IRB.conf[:IRB_NAME]
 | 
			
		||||
      else
 | 
			
		||||
	@irb_name = "irb#"+IRB.JobManager.n_jobs.to_s
 | 
			
		||||
      end
 | 
			
		||||
      @irb_path = "(" + @irb_name + ")"
 | 
			
		||||
 | 
			
		||||
      case input_method
 | 
			
		||||
      when nil
 | 
			
		||||
	if (use_readline.nil? && IRB.conf[:PROMPT_MODE] != :INF_RUBY ||
 | 
			
		||||
	     use_readline?)
 | 
			
		||||
	  @io = ReadlineInputMethod.new
 | 
			
		||||
	else
 | 
			
		||||
	  @io = StdioInputMethod.new
 | 
			
		||||
	end
 | 
			
		||||
      when String
 | 
			
		||||
	@io = FileInputMethod.new(input_method)
 | 
			
		||||
	@irb_name = File.basename(input_method)
 | 
			
		||||
	@irb_path = input_method
 | 
			
		||||
      else
 | 
			
		||||
	@io = input_method
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def main
 | 
			
		||||
      @workspace.main
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    attr_accessor :workspace
 | 
			
		||||
    attr_reader :thread
 | 
			
		||||
    attr_accessor :io
 | 
			
		||||
    
 | 
			
		||||
    attr_reader :_
 | 
			
		||||
    
 | 
			
		||||
    attr_accessor :irb
 | 
			
		||||
    attr_accessor :ap_name
 | 
			
		||||
    attr_accessor :rc
 | 
			
		||||
    attr_accessor :load_modules
 | 
			
		||||
    attr_accessor :irb_name
 | 
			
		||||
    attr_accessor :irb_path
 | 
			
		||||
 | 
			
		||||
    attr_accessor :math_mode
 | 
			
		||||
    attr_accessor :use_readline
 | 
			
		||||
    attr_reader :inspect_mode
 | 
			
		||||
    attr_reader :use_tracer
 | 
			
		||||
#    attr :use_loader
 | 
			
		||||
 | 
			
		||||
    attr_reader :debug_level
 | 
			
		||||
    attr_accessor :verbose
 | 
			
		||||
 | 
			
		||||
    attr_reader :prompt_mode
 | 
			
		||||
    attr_accessor :prompt_i
 | 
			
		||||
    attr_accessor :prompt_s
 | 
			
		||||
    attr_accessor :prompt_c
 | 
			
		||||
    attr_accessor :auto_indent_mode
 | 
			
		||||
    attr_accessor :return_format
 | 
			
		||||
 | 
			
		||||
    attr_accessor :ignore_sigint
 | 
			
		||||
    attr_accessor :ignore_eof
 | 
			
		||||
 | 
			
		||||
    attr_accessor :back_trace_limit
 | 
			
		||||
 | 
			
		||||
#    alias use_loader? use_loader
 | 
			
		||||
    alias use_tracer? use_tracer
 | 
			
		||||
    alias use_readline? use_readline
 | 
			
		||||
    alias rc? rc
 | 
			
		||||
    alias math? math_mode
 | 
			
		||||
    alias verbose? verbose
 | 
			
		||||
    alias ignore_sigint? ignore_sigint
 | 
			
		||||
    alias ignore_eof? ignore_eof
 | 
			
		||||
 | 
			
		||||
    def _=(value)
 | 
			
		||||
      @_ = value
 | 
			
		||||
      @workspace.evaluate "_ = IRB.conf[:MAIN_CONTEXT]._"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def irb_name
 | 
			
		||||
      if @irb_level == 0
 | 
			
		||||
	@irb_name 
 | 
			
		||||
      elsif @irb_name =~ /#[0-9]*$/
 | 
			
		||||
	@irb_name + "." + @irb_level.to_s
 | 
			
		||||
      else
 | 
			
		||||
	@irb_name + "#0." + @irb_level.to_s
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def prompt_mode=(mode)
 | 
			
		||||
      @prompt_mode = mode
 | 
			
		||||
      pconf = IRB.conf[:PROMPT][mode]
 | 
			
		||||
      @prompt_i = pconf[:PROMPT_I]
 | 
			
		||||
      @prompt_s = pconf[:PROMPT_S]
 | 
			
		||||
      @prompt_c = pconf[:PROMPT_C]
 | 
			
		||||
      @return_format = pconf[:RETURN]
 | 
			
		||||
      if ai = pconf.include?(:AUTO_INDENT)
 | 
			
		||||
	@auto_indent_mode = ai
 | 
			
		||||
      else
 | 
			
		||||
	@auto_indent_mode = IRB.conf[:AUTO_INDENT]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    def inspect?
 | 
			
		||||
      @inspect_mode.nil? && !@math_mode or @inspect_mode
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def file_input?
 | 
			
		||||
      @io.type == FileInputMethod
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def use_tracer=(opt)
 | 
			
		||||
      if opt
 | 
			
		||||
	IRB.initialize_tracer
 | 
			
		||||
	unless @tracer_initialized
 | 
			
		||||
	  Tracer.set_get_line_procs(@irb_path) {
 | 
			
		||||
	    |line_no|
 | 
			
		||||
	    @io.line(line_no)
 | 
			
		||||
	  }
 | 
			
		||||
	  @tracer_initialized = true
 | 
			
		||||
	end
 | 
			
		||||
      elsif !opt && @use_tracer
 | 
			
		||||
	Tracer.off
 | 
			
		||||
      end
 | 
			
		||||
      @use_tracer=opt
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def use_loader
 | 
			
		||||
      IRB.conf[:USE_LOADER]
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def use_loader=(opt)
 | 
			
		||||
      IRB.conf[:USE_LOADER] = opt
 | 
			
		||||
      if opt
 | 
			
		||||
	IRB.initialize_loader
 | 
			
		||||
      end
 | 
			
		||||
      print "Switch to load/require#{unless use_loader; ' non';end} trace mode.\n" if verbose?
 | 
			
		||||
      opt
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def inspect_mode=(opt)
 | 
			
		||||
      if opt
 | 
			
		||||
	@inspect_mode = opt
 | 
			
		||||
      else
 | 
			
		||||
	@inspect_mode = !@inspect_mode
 | 
			
		||||
      end
 | 
			
		||||
      print "Switch to#{unless @inspect_mode; ' non';end} inspect mode.\n" if verbose?
 | 
			
		||||
      @inspect_mode
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def math_mode=(opt)
 | 
			
		||||
      if @math_mode == true && opt == false
 | 
			
		||||
	IRB.fail CantRetuenNormalMode
 | 
			
		||||
	return
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      @math_mode = opt
 | 
			
		||||
      if math_mode
 | 
			
		||||
	IRB.initialize_mathn
 | 
			
		||||
	main.instance_eval("include Math")
 | 
			
		||||
	print "start math mode\n" if verbose?
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def use_readline=(opt)
 | 
			
		||||
      @use_readline = opt
 | 
			
		||||
      print "use readline module\n" if @use_readline
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def debug_level=(value)
 | 
			
		||||
      @debug_level = value
 | 
			
		||||
      RubyLex.debug_level = value
 | 
			
		||||
      SLex.debug_level = value
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def debug?
 | 
			
		||||
      @debug_level > 0
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def change_binding(*_main)
 | 
			
		||||
      back = @workspace
 | 
			
		||||
      @workspace = WorkSpace.new(*_main)
 | 
			
		||||
      unless _main.empty?
 | 
			
		||||
	begin
 | 
			
		||||
	  main.extend ExtendCommand
 | 
			
		||||
	rescue
 | 
			
		||||
	  print "can't change binding to: ", main.inspect, "\n"
 | 
			
		||||
	  @workspace = back
 | 
			
		||||
	  return nil
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
      @irb_level += 1
 | 
			
		||||
      begin
 | 
			
		||||
	catch(:SU_EXIT) do
 | 
			
		||||
	  @irb.eval_input
 | 
			
		||||
	end
 | 
			
		||||
      ensure
 | 
			
		||||
	@irb_level -= 1
 | 
			
		||||
 	@workspace = back
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    alias change_workspace change_binding
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    alias __exit__ exit
 | 
			
		||||
    def exit(ret = 0)
 | 
			
		||||
      if @irb_level == 0
 | 
			
		||||
	IRB.irb_exit(@irb, ret)
 | 
			
		||||
      else
 | 
			
		||||
	throw :SU_EXIT, ret
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    NOPRINTING_IVARS = ["@_"]
 | 
			
		||||
    NO_INSPECTING_IVARS = ["@irb", "@io"]
 | 
			
		||||
    IDNAME_IVARS = ["@prompt_mode"]
 | 
			
		||||
 | 
			
		||||
    alias __inspect__ inspect
 | 
			
		||||
    def inspect
 | 
			
		||||
      array = []
 | 
			
		||||
      for ivar in instance_variables.sort{|e1, e2| e1 <=> e2}
 | 
			
		||||
	name = ivar.sub(/^@(.*)$/){$1}
 | 
			
		||||
	val = instance_eval(ivar)
 | 
			
		||||
	case ivar
 | 
			
		||||
	when *NOPRINTING_IVARS
 | 
			
		||||
	  next
 | 
			
		||||
	when *NO_INSPECTING_IVARS
 | 
			
		||||
	  array.push format("conf.%s=%s", name, val.to_s)
 | 
			
		||||
	when *IDNAME_IVARS
 | 
			
		||||
	  array.push format("conf.%s=:%s", name, val.id2name)
 | 
			
		||||
	else
 | 
			
		||||
	  array.push format("conf.%s=%s", name, val.inspect)
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
      array.join("\n")
 | 
			
		||||
    end
 | 
			
		||||
    alias __to_s__ to_s
 | 
			
		||||
    alias to_s inspect
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										127
									
								
								lib/irb/extend-command.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								lib/irb/extend-command.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,127 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb/extend-command.rb - irb command extend
 | 
			
		||||
#   	$Release Version: 0.7.3$
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#   
 | 
			
		||||
#
 | 
			
		||||
module IRB
 | 
			
		||||
  #
 | 
			
		||||
  # IRB extended command
 | 
			
		||||
  # (JP: IRB$B3HD%%3%^%s%I(B)
 | 
			
		||||
  #
 | 
			
		||||
  module ExtendCommand
 | 
			
		||||
#    include Loader
 | 
			
		||||
    
 | 
			
		||||
    def irb_exit(ret = 0)
 | 
			
		||||
      irb_context.exit(ret)
 | 
			
		||||
    end
 | 
			
		||||
    alias irb_quit irb_exit
 | 
			
		||||
 | 
			
		||||
    def irb_fork(&block)
 | 
			
		||||
      pid = send ExtendCommand.irb_original_method_name("fork")
 | 
			
		||||
      unless pid 
 | 
			
		||||
	class<<self
 | 
			
		||||
	  alias_method :exit, ExtendCommand.irb_original_method_name('exit')
 | 
			
		||||
	end
 | 
			
		||||
	if iterator?
 | 
			
		||||
	  begin
 | 
			
		||||
	    yield
 | 
			
		||||
	  ensure
 | 
			
		||||
	    exit
 | 
			
		||||
	  end
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
      pid
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def irb_change_binding(*main)
 | 
			
		||||
      irb_context.change_binding(*main)
 | 
			
		||||
    end
 | 
			
		||||
    alias irb_change_workspace irb_change_binding
 | 
			
		||||
 | 
			
		||||
    def irb_source(file)
 | 
			
		||||
      irb_context.source(file)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def irb(*obj)
 | 
			
		||||
      require "irb/multi-irb"
 | 
			
		||||
      IRB.irb(nil, *obj)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def irb_context
 | 
			
		||||
      IRB.conf[:MAIN_CONTEXT]
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def irb_jobs
 | 
			
		||||
      require "irb/multi-irb"
 | 
			
		||||
      IRB.JobManager
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def irb_fg(key)
 | 
			
		||||
      require "irb/multi-irb"
 | 
			
		||||
      IRB.JobManager.switch(key)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def irb_kill(*keys)
 | 
			
		||||
      require "irb/multi-irb"
 | 
			
		||||
      IRB.JobManager.kill(*keys)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # extend command functions
 | 
			
		||||
    def ExtendCommand.extend_object(obj)
 | 
			
		||||
      super
 | 
			
		||||
      unless (class<<obj;ancestors;end).include?(ExtendCommand)
 | 
			
		||||
	obj.install_aliases
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    OVERRIDE_NOTHING = 0
 | 
			
		||||
    OVERRIDE_PRIVATE_ONLY = 0x01
 | 
			
		||||
    OVERRIDE_ALL = 0x02
 | 
			
		||||
 | 
			
		||||
    def install_aliases(override = OVERRIDE_NOTHING)
 | 
			
		||||
 | 
			
		||||
      install_alias_method(:exit, :irb_exit, override | OVERRIDE_PRIVATE_ONLY)
 | 
			
		||||
      install_alias_method(:quit, :irb_quit, override | OVERRIDE_PRIVATE_ONLY)
 | 
			
		||||
      install_alias_method(:fork, :irb_fork, override | OVERRIDE_PRIVATE_ONLY)
 | 
			
		||||
      install_alias_method(:kill, :irb_kill, override | OVERRIDE_PRIVATE_ONLY)
 | 
			
		||||
 | 
			
		||||
      install_alias_method(:irb_cb, :irb_change_binding, override)
 | 
			
		||||
      install_alias_method(:irb_ws, :irb_change_workspace, override)
 | 
			
		||||
      install_alias_method(:source, :irb_source, override)
 | 
			
		||||
      install_alias_method(:conf, :irb_context, override)
 | 
			
		||||
      install_alias_method(:jobs, :irb_jobs, override)
 | 
			
		||||
      install_alias_method(:fg, :irb_fg, override)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # override = {OVERRIDE_NOTHING, OVERRIDE_PRIVATE_ONLY, OVERRIDE_ALL}
 | 
			
		||||
    def install_alias_method(to, from, override = OVERRIDE_NOTHING)
 | 
			
		||||
      to = to.id2name unless to.kind_of?(String)
 | 
			
		||||
      from = from.id2name unless from.kind_of?(String)
 | 
			
		||||
 | 
			
		||||
      if override == OVERRIDE_ALL or
 | 
			
		||||
	  (override == OVERRIDE_PRIVATE_ONLY) && !respond_to?(to) or
 | 
			
		||||
	  (override == OVERRIDE_NOTHING) &&  !respond_to?(to, true)
 | 
			
		||||
	target = self
 | 
			
		||||
	(class<<self;self;end).instance_eval{
 | 
			
		||||
	  if target.respond_to?(to, true) && 
 | 
			
		||||
	      !target.respond_to?(ExtendCommand.irb_original_method_name(to), true)
 | 
			
		||||
	    alias_method(ExtendCommand.irb_original_method_name(to), to) 
 | 
			
		||||
	  end
 | 
			
		||||
	  alias_method to, from
 | 
			
		||||
	}
 | 
			
		||||
      else
 | 
			
		||||
	print "irb: warn: can't alias #{to} from #{from}.\n"
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def self.irb_original_method_name(method_name)
 | 
			
		||||
      "irb_" + method_name + "_org"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										33
									
								
								lib/irb/help.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								lib/irb/help.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb/help.rb - print usase module
 | 
			
		||||
#   	$Release Version: 0.7.3$
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#   
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
  def IRB.print_usage
 | 
			
		||||
    lc = IRB.conf[:LC_MESSAGES]
 | 
			
		||||
    path = lc.find("irb/help-message")
 | 
			
		||||
    space_line = false
 | 
			
		||||
    File.foreach(path) do
 | 
			
		||||
      |l|
 | 
			
		||||
      if /^\s*$/ =~ l
 | 
			
		||||
	lc.puts l unless space_line
 | 
			
		||||
	space_line = true
 | 
			
		||||
	next
 | 
			
		||||
      end
 | 
			
		||||
      space_line = false
 | 
			
		||||
      
 | 
			
		||||
      l.sub!(/#.*$/, "")
 | 
			
		||||
      next if /^\s*$/ =~ l
 | 
			
		||||
      lc.puts l
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										238
									
								
								lib/irb/init.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										238
									
								
								lib/irb/init.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,238 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb/init.rb - irb initialize module
 | 
			
		||||
#   	$Release Version: 0.7.3$
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#   
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
 | 
			
		||||
  # initialize config
 | 
			
		||||
  # (JP: config$B$N=i4|2=(B)
 | 
			
		||||
  def IRB.initialize(ap_path)
 | 
			
		||||
    IRB.init_config(ap_path)
 | 
			
		||||
    IRB.init_error
 | 
			
		||||
    IRB.run_config
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # @CONF default setting
 | 
			
		||||
  def IRB.init_config(ap_path)
 | 
			
		||||
    # class instance variables
 | 
			
		||||
    @TRACER_INITIALIZED = false
 | 
			
		||||
    @MATHN_INITIALIZED = false
 | 
			
		||||
 | 
			
		||||
    # default configurations
 | 
			
		||||
    # (JP: $B%G%U%)%k%H%3%s%U%#%.%e%l!<%7%g%s(B)
 | 
			
		||||
    unless ap_path and @CONF[:AP_NAME]
 | 
			
		||||
      ap_path = File.join(File.dirname(File.dirname(__FILE__)), "irb.rb")
 | 
			
		||||
    end
 | 
			
		||||
    @CONF[:AP_NAME] = File::basename(ap_path, ".rb")
 | 
			
		||||
 | 
			
		||||
    @CONF[:IRB_NAME] = "irb"
 | 
			
		||||
    @CONF[:IRB_LIB_PATH] = File.dirname(__FILE__)
 | 
			
		||||
 | 
			
		||||
    @CONF[:RC] = true
 | 
			
		||||
    @CONF[:LOAD_MODULES] = []
 | 
			
		||||
    @CONF[:IRB_RC] = nil
 | 
			
		||||
 | 
			
		||||
    @CONF[:MATH_MODE] = false
 | 
			
		||||
    @CONF[:USE_READLINE] = false unless defined?(ReadlineInputMethod)
 | 
			
		||||
    @CONF[:INSPECT_MODE] = nil
 | 
			
		||||
    @CONF[:USE_TRACER] = false
 | 
			
		||||
    @CONF[:USE_LOADER] = false
 | 
			
		||||
    @CONF[:IGNORE_SIGINT] = true
 | 
			
		||||
    @CONF[:IGNORE_EOF] = false
 | 
			
		||||
 | 
			
		||||
    @CONF[:BACK_TRACE_LIMIT] = 16
 | 
			
		||||
 | 
			
		||||
    @CONF[:PROMPT] = {
 | 
			
		||||
      :NULL => {
 | 
			
		||||
	:PROMPT_I => nil,
 | 
			
		||||
	:PROMPT_S => nil,
 | 
			
		||||
	:PROMPT_C => nil,
 | 
			
		||||
	:RETURN => "%s\n"
 | 
			
		||||
      },
 | 
			
		||||
      :DEFAULT => {
 | 
			
		||||
	:PROMPT_I => "%N(%m):%03n:%i> ",
 | 
			
		||||
	:PROMPT_S => "%N(%m):%03n:%i%l ",
 | 
			
		||||
	:PROMPT_C => "%N(%m):%03n:%i* ",
 | 
			
		||||
	:RETURN => "%s\n"
 | 
			
		||||
      },
 | 
			
		||||
      :SIMPLE => {
 | 
			
		||||
	:PROMPT_I => ">> ",
 | 
			
		||||
	:PROMPT_S => nil,
 | 
			
		||||
	:PROMPT_C => "?> ",
 | 
			
		||||
	:RETURN => "=> %s\n"
 | 
			
		||||
      },
 | 
			
		||||
      :INF_RUBY => {
 | 
			
		||||
	:PROMPT_I => "%N(%m):%03n:%i> ",
 | 
			
		||||
	:PROMPT_S => nil,
 | 
			
		||||
	:PROMPT_C => nil,
 | 
			
		||||
	:RETURN => "%s\n",
 | 
			
		||||
	:AUTO_INDENT => true
 | 
			
		||||
      },
 | 
			
		||||
      :XMP => {
 | 
			
		||||
	:PROMPT_I => nil,
 | 
			
		||||
	:PROMPT_S => nil,
 | 
			
		||||
	:PROMPT_C => nil,
 | 
			
		||||
	:RETURN => "    ==>%s\n"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @CONF[:PROMPT_MODE] = :DEFAULT
 | 
			
		||||
    @CONF[:AUTO_INDENT] = false
 | 
			
		||||
 | 
			
		||||
    @CONF[:CONTEXT_MODE] = 3 # use binding in function on TOPLEVEL_BINDING
 | 
			
		||||
    @CONF[:SINGLE_IRB] = false
 | 
			
		||||
 | 
			
		||||
#    @CONF[:LC_MESSAGES] = "en"
 | 
			
		||||
    @CONF[:LC_MESSAGES] = Locale.new
 | 
			
		||||
    
 | 
			
		||||
    @CONF[:DEBUG_LEVEL] = 1
 | 
			
		||||
    @CONF[:VERBOSE] = true
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def IRB.init_error
 | 
			
		||||
    @CONF[:LC_MESSAGES].load("irb/error.rb")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # option analyzing
 | 
			
		||||
  # (JP: $B%*%W%7%g%s2r@O(B)
 | 
			
		||||
  def IRB.parse_opts
 | 
			
		||||
    while opt = ARGV.shift
 | 
			
		||||
      case opt
 | 
			
		||||
      when "-f"
 | 
			
		||||
	opt = ARGV.shift
 | 
			
		||||
	@CONF[:RC] = false
 | 
			
		||||
      when "-m"
 | 
			
		||||
	@CONF[:MATH_MODE] = true
 | 
			
		||||
      when "-d"
 | 
			
		||||
	$DEBUG = true
 | 
			
		||||
      when "-r"
 | 
			
		||||
	opt = ARGV.shift
 | 
			
		||||
	@CONF[:LOAD_MODULES].push opt if opt
 | 
			
		||||
      when "--inspect"
 | 
			
		||||
	@CONF[:INSPECT_MODE] = true
 | 
			
		||||
      when "--noinspect"
 | 
			
		||||
	@CONF[:INSPECT_MODE] = false
 | 
			
		||||
      when "--readline"
 | 
			
		||||
	@CONF[:USE_READLINE] = true
 | 
			
		||||
      when "--noreadline"
 | 
			
		||||
	@CONF[:USE_READLINE] = false
 | 
			
		||||
 | 
			
		||||
      when "--prompt-mode", "--prompt"
 | 
			
		||||
	prompt_mode = ARGV.shift.upcase.tr("-", "_").intern
 | 
			
		||||
	IRB.fail(UndefinedPromptMode,
 | 
			
		||||
		 prompt_mode.id2name) unless @CONF[:PROMPT][prompt_mode]
 | 
			
		||||
	@CONF[:PROMPT_MODE] = prompt_mode
 | 
			
		||||
      when "--noprompt"
 | 
			
		||||
	@CONF[:PROMPT_MODE] = :NULL
 | 
			
		||||
      when "--inf-ruby-mode"
 | 
			
		||||
	@CONF[:PROMPT_MODE] = :INF_RUBY
 | 
			
		||||
      when "--sample-book-mode", "--simple-prompt"
 | 
			
		||||
	@CONF[:PROMPT_MODE] = :SIMPLE
 | 
			
		||||
 | 
			
		||||
      when "--tracer"
 | 
			
		||||
	@CONF[:USE_TRACER] = true
 | 
			
		||||
      when "--back-trace-limit"
 | 
			
		||||
	@CONF[:BACK_TRACE_LIMIT] = ARGV.shift.to_i
 | 
			
		||||
      when "--context-mode"
 | 
			
		||||
	@CONF[:CONTEXT_MODE] = ARGV.shift.to_i
 | 
			
		||||
      when "--single-irb"
 | 
			
		||||
	@CONF[:SINGLE_IRB] = true
 | 
			
		||||
      when "--irb_debug"
 | 
			
		||||
	@CONF[:DEBUG_LEVEL] = ARGV.shift.to_i
 | 
			
		||||
      when "-v", "--version"
 | 
			
		||||
	print IRB.version, "\n"
 | 
			
		||||
	exit 0
 | 
			
		||||
      when "-h", "--help"
 | 
			
		||||
	require "irb/help"
 | 
			
		||||
	IRB.print_usage
 | 
			
		||||
	exit 0
 | 
			
		||||
      when /^-/
 | 
			
		||||
	IRB.fail UnrecognizedSwitch, opt
 | 
			
		||||
      else
 | 
			
		||||
	@CONF[:USE_READLINE] = false
 | 
			
		||||
	@CONF[:SCRIPT] = opt
 | 
			
		||||
	$0 = opt
 | 
			
		||||
	break
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # running config
 | 
			
		||||
  def IRB.run_config
 | 
			
		||||
    if @CONF[:RC]
 | 
			
		||||
      rcs = []
 | 
			
		||||
      rcs.push File.expand_path("~/.irbrc") if ENV.key?("HOME")
 | 
			
		||||
      rcs.push ".irbrc"
 | 
			
		||||
      rcs.push "irb.rc"
 | 
			
		||||
      rcs.push "_irbrc"
 | 
			
		||||
      rcs.push "$irbrc"
 | 
			
		||||
      catch(:EXIT) do
 | 
			
		||||
	for rc in rcs
 | 
			
		||||
	  begin
 | 
			
		||||
	    load rc
 | 
			
		||||
	    throw :EXIT
 | 
			
		||||
	  rescue LoadError, Errno::ENOENT
 | 
			
		||||
	  rescue
 | 
			
		||||
	    print "load error: #{rc}\n"
 | 
			
		||||
	    print $!.type, ": ", $!, "\n"
 | 
			
		||||
	    for err in $@[0, $@.size - 2]
 | 
			
		||||
	      print "\t", err, "\n"
 | 
			
		||||
	    end
 | 
			
		||||
	    throw :EXIT
 | 
			
		||||
	  end
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # loading modules
 | 
			
		||||
  def IRB.load_modules
 | 
			
		||||
    for m in @CONF[:LOAD_MODULES]
 | 
			
		||||
      begin
 | 
			
		||||
	require m
 | 
			
		||||
      rescue
 | 
			
		||||
	print $@[0], ":", $!.type, ": ", $!, "\n"
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # initialize tracing function
 | 
			
		||||
  # (JP: $B%H%l!<%5=i4|@_Dj(B)
 | 
			
		||||
  def IRB.initialize_tracer
 | 
			
		||||
    unless @TRACER_INITIALIZED
 | 
			
		||||
      require("tracer")
 | 
			
		||||
      Tracer.verbose = false
 | 
			
		||||
      Tracer.add_filter {
 | 
			
		||||
	|event, file, line, id, binding|
 | 
			
		||||
	File::dirname(file) != @CONF[:IRB_LIB_PATH]
 | 
			
		||||
      }
 | 
			
		||||
      @TRACER_INITIALIZED = true
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # initialize mathn function
 | 
			
		||||
  # (JP: mathn$B=i4|@_Dj(B)
 | 
			
		||||
  def IRB.initialize_mathn
 | 
			
		||||
    unless @MATHN_INITIALIZED
 | 
			
		||||
      require "mathn"
 | 
			
		||||
    @MATHN_INITIALIZED = true
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # initialize loader function
 | 
			
		||||
  # (JP: loader$B=i4|@_Dj(B)
 | 
			
		||||
  def IRB.initialize_loader
 | 
			
		||||
    unless @LOADER_INITIALIZED
 | 
			
		||||
      require "irb/loader"
 | 
			
		||||
      @LOADER_INITIALIZED = true
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										30
									
								
								lib/irb/lc/error.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								lib/irb/lc/error.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb/lc/error.rb - 
 | 
			
		||||
#   	$Release Version: 0.7.3$
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#   
 | 
			
		||||
#
 | 
			
		||||
require "e2mmap"
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
 | 
			
		||||
  # exceptions (JP: $BNc30Dj5A(B)
 | 
			
		||||
  extend Exception2MessageMapper
 | 
			
		||||
  def_exception :UnrecognizedSwitch, "Unrecognized switch: %s"
 | 
			
		||||
  def_exception :NotImplementError, "Need to define `%s'"
 | 
			
		||||
  def_exception :CantRetuenNormalMode, "Can't return normal mode."
 | 
			
		||||
  def_exception :IllegalParameter, "Illegal parameter(%s)."
 | 
			
		||||
  def_exception :IrbAlreadyDead, "Irb is already dead."
 | 
			
		||||
  def_exception :IrbSwitchToCurrentThread, "Change to current thread."
 | 
			
		||||
  def_exception :NoSuchJob, "No such job(%s)."
 | 
			
		||||
  def_exception :CanNotGoMultiIrbMode, "Can't go multi irb mode."
 | 
			
		||||
  def_exception :CanNotChangeBinding, "Can't change binding to (%s)."
 | 
			
		||||
  def_exception :UndefinedPromptMode, "Undefined prompt mode(%s)."
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										34
									
								
								lib/irb/lc/help-message
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								lib/irb/lc/help-message
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb/lc/help-message.rb - 
 | 
			
		||||
#   	$Release Version: 0.7.3$
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#   
 | 
			
		||||
#
 | 
			
		||||
Usage:  irb.rb [options] [programfile] [arguments]
 | 
			
		||||
  -f		    suppress read ~/.irbrc 
 | 
			
		||||
  -m		    bc mode (load mathn, fraction or matrix are available)
 | 
			
		||||
  -d                set $DEBUG  to true (same as `ruby -d')
 | 
			
		||||
  -r load-module    same as `ruby -r'
 | 
			
		||||
  --inspect	    uses `inspect' for output (the default except bc mode)
 | 
			
		||||
  --noinspect	    doesn't uses inspect for output
 | 
			
		||||
  --readline	    uses Readline extension module
 | 
			
		||||
  --noreadline	    doesn't use Readline extension module
 | 
			
		||||
  --prompt prompt-mode
 | 
			
		||||
  --prompt-mode prompt-mode
 | 
			
		||||
		    switches prompt mode. Pre-defined prompt modes are
 | 
			
		||||
		    `defalut', `simple', `xmp' and `inf-ruby'
 | 
			
		||||
  --inf-ruby-mode   uses prompt appreciate for inf-ruby-mode on emacs. 
 | 
			
		||||
		    Suppresses --readline. 
 | 
			
		||||
  --simple-prompt   simple prompt mode
 | 
			
		||||
  --noprompt	    no prompt
 | 
			
		||||
  --tracer	    display trace for each execution of commands.
 | 
			
		||||
  --back-trace-limit n
 | 
			
		||||
		    displayes backtrace top n and tail n. The default
 | 
			
		||||
		    value is 16. 
 | 
			
		||||
  --irb_debug n	    sets internal debug level to n (It shouldn't be used)
 | 
			
		||||
  -v, --version	    prints the version of irb
 | 
			
		||||
							
								
								
									
										29
									
								
								lib/irb/lc/ja/error.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								lib/irb/lc/ja/error.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb/lc/ja/error.rb - 
 | 
			
		||||
#   	$Release Version: 0.7.3$
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#   
 | 
			
		||||
#
 | 
			
		||||
require "e2mmap"
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
  # exceptions (JP: $BNc30Dj5A(B)
 | 
			
		||||
  extend Exception2MessageMapper
 | 
			
		||||
  def_exception :UnrecognizedSwitch, '$B%9%$%C%A(B(%s)$B$,J,$j$^$;$s(B'
 | 
			
		||||
  def_exception :NotImplementError, '`%s\'$B$NDj5A$,I,MW$G$9(B'
 | 
			
		||||
  def_exception :CantRetuenNormalMode, 'Normal$B%b!<%I$KLa$l$^$;$s(B.'
 | 
			
		||||
  def_exception :IllegalParameter, '$B%Q%i%a!<%?(B(%s)$B$,4V0c$C$F$$$^$9(B.'
 | 
			
		||||
  def_exception :IrbAlreadyDead, 'Irb$B$O4{$K;`$s$G$$$^$9(B.'
 | 
			
		||||
  def_exception :IrbSwitchToCurrentThread, 'Change to current thread.'
 | 
			
		||||
  def_exception :NoSuchJob, '$B$=$N$h$&$J%8%g%V(B(%s)$B$O$"$j$^$;$s(B.'
 | 
			
		||||
  def_exception :CanNotGoMultiIrbMode, 'multi-irb mode$B$K0\$l$^$;$s(B.'
 | 
			
		||||
  def_exception :CanNotChangeBinding, '$B%P%$%s%G%#%s%0(B(%s)$B$KJQ99$G$-$^$;$s(B.'
 | 
			
		||||
  def_exception :UndefinedPromptMode, '$B%W%m%s%W%H%b!<%I(B(%s)$B$ODj5A$5$l$F$$$^$;$s(B.'
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										35
									
								
								lib/irb/lc/ja/help-message
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								lib/irb/lc/ja/help-message
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,35 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb/lc/ja/help-message.rb - 
 | 
			
		||||
#   	$Release Version: 0.7.3$
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#   
 | 
			
		||||
#
 | 
			
		||||
Usage:  irb.rb [options] [programfile] [arguments]
 | 
			
		||||
  -f		    ~/.irbrc $B$rFI$_9~$^$J$$(B.
 | 
			
		||||
  -m		    bc$B%b!<%I(B($BJ,?t(B, $B9TNs$N7W;;$,$G$-$k(B)
 | 
			
		||||
  -d                $DEBUG $B$r(Btrue$B$K$9$k(B(ruby -d $B$HF1$8(B)
 | 
			
		||||
  -r load-module    ruby -r $B$HF1$8(B.
 | 
			
		||||
  --inspect	    $B7k2L=PNO$K(Binspect$B$rMQ$$$k(B(bc$B%b!<%I0J30$O%G%U%)%k%H(B). 
 | 
			
		||||
  --noinspect	    $B7k2L=PNO$K(Binspect$B$rMQ$$$J$$(B.
 | 
			
		||||
  --readline	    readline$B%i%$%V%i%j$rMxMQ$9$k(B.
 | 
			
		||||
  --noreadline	    readline$B%i%$%V%i%j$rMxMQ$7$J$$(B. 
 | 
			
		||||
  --prompt prompt-mode/--prompt-mode prompt-mode
 | 
			
		||||
		    $B%W%m%s%W%H%b!<%I$r@ZBX$($^$9(B. $B8=:_Dj5A$5$l$F$$$k%W(B
 | 
			
		||||
		    $B%m%s%W%H%b!<%I$O(B, defalut, simple, xmp, inf-ruby$B$,(B
 | 
			
		||||
		    $BMQ0U$5$l$F$$$^$9(B. 
 | 
			
		||||
  --inf-ruby-mode   emacs$B$N(Binf-ruby-mode$BMQ$N%W%m%s%W%HI=<($r9T$J$&(B. $BFC(B
 | 
			
		||||
		    $B$K;XDj$,$J$$8B$j(B, readline$B%i%$%V%i%j$O;H$o$J$/$J$k(B.
 | 
			
		||||
  --simple-prompt   $BHs>o$K%7%s%W%k$J%W%m%s%W%H$rMQ$$$k%b!<%I$G$9(B.
 | 
			
		||||
  --noprompt	    $B%W%m%s%W%HI=<($r9T$J$o$J$$(B.
 | 
			
		||||
  --tracer	    $B%3%^%s%I<B9T;~$K%H%l!<%9$r9T$J$&(B.
 | 
			
		||||
  --back-trace-limit n
 | 
			
		||||
		    $B%P%C%/%H%l!<%9I=<($r%P%C%/%H%l!<%9$NF,$+$i(B n, $B8e$m(B
 | 
			
		||||
		    $B$+$i(Bn$B$@$19T$J$&(B. $B%G%U%)%k%H$O(B16 
 | 
			
		||||
  --irb_debug n	    irb$B$N%G%P%C%0%G%P%C%0%l%Y%k$r(Bn$B$K@_Dj$9$k(B($BMxMQ$7$J(B
 | 
			
		||||
		    $B$$J}$,L5Fq$G$7$g$&(B).
 | 
			
		||||
  -v, --version	    irb$B$N%P!<%8%g%s$rI=<($9$k(B
 | 
			
		||||
							
								
								
									
										187
									
								
								lib/irb/locale.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										187
									
								
								lib/irb/locale.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,187 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb/locale.rb - internationalization module
 | 
			
		||||
#   	$Release Version: 0.7.3$
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#   
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require "kconv"
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
  class Locale
 | 
			
		||||
    @RCS_ID='-$Id$-'
 | 
			
		||||
 | 
			
		||||
    JPDefaultLocale = "ja"
 | 
			
		||||
    LOCALE_DIR = "/lc/"
 | 
			
		||||
 | 
			
		||||
    LC2KCONV = {
 | 
			
		||||
#      "ja" => Kconv::JIS,
 | 
			
		||||
#      "ja_JP" => Kconv::JIS,
 | 
			
		||||
      "ja_JP.ujis" => Kconv::EUC,
 | 
			
		||||
      "ja_JP.euc" => Kconv::EUC,
 | 
			
		||||
      "ja_JP.eucJP" => Kconv::EUC,
 | 
			
		||||
      "ja_JP.sjis" => Kconv::SJIS,
 | 
			
		||||
      "ja_JP.SJIS" => Kconv::SJIS,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    def initialize(locale = nil)
 | 
			
		||||
      @lang = locale || ENV["IRB_LANG"] || ENV["LC_MESSAGES"] || ENV["LC_ALL"] || ENV["LANG"]
 | 
			
		||||
      @lang = "C" unless @lang
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    attr_reader :lang
 | 
			
		||||
 | 
			
		||||
    def String(mes)
 | 
			
		||||
      mes = super(mes)
 | 
			
		||||
      case @lang
 | 
			
		||||
      when /^ja/
 | 
			
		||||
	mes = Kconv::kconv(mes, LC2KCONV[@lang])
 | 
			
		||||
      else
 | 
			
		||||
	mes
 | 
			
		||||
      end
 | 
			
		||||
      mes
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def format(*opts)
 | 
			
		||||
      String(super(*opts))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def gets(*rs)
 | 
			
		||||
      String(super(*rs))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def readline(*rs)
 | 
			
		||||
      String(super(*rs))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def print(*opts)
 | 
			
		||||
      ary = opts.collect{|opt| String(opt)}
 | 
			
		||||
      super *ary
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def printf(*opts)
 | 
			
		||||
      s = format(*opts)
 | 
			
		||||
      print s
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def puts(*opts)
 | 
			
		||||
      ary = opts.collect{|opt| String(opts)}
 | 
			
		||||
      super *ary
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    autoload :Tempfile, "tempfile"
 | 
			
		||||
 | 
			
		||||
    def require(file, priv = nil)
 | 
			
		||||
      rex = Regexp.new("lc/#{Regexp.quote(file)}\.(so|o|sl|rb)?")
 | 
			
		||||
      return false if $".find{|f| f =~ rex}
 | 
			
		||||
 | 
			
		||||
      case file
 | 
			
		||||
      when /\.rb$/
 | 
			
		||||
	begin
 | 
			
		||||
	  load(file, priv)
 | 
			
		||||
	  $".push file
 | 
			
		||||
	  return true
 | 
			
		||||
	rescue LoadError
 | 
			
		||||
	end
 | 
			
		||||
      when /\.(so|o|sl)$/
 | 
			
		||||
	return super
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      begin
 | 
			
		||||
	load(f = file + ".rb")
 | 
			
		||||
	$".push f  #"
 | 
			
		||||
	return true
 | 
			
		||||
      rescue LoadError
 | 
			
		||||
	return ruby_require(file)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    alias toplevel_load load
 | 
			
		||||
    
 | 
			
		||||
    def load(file, priv=nil)
 | 
			
		||||
      dir = File.dirname(file)
 | 
			
		||||
      dir = "" if dir == "."
 | 
			
		||||
      base = File.basename(file)
 | 
			
		||||
 | 
			
		||||
      if /^ja(_JP)?$/ =~ @lang
 | 
			
		||||
 	back, @lang = @lang, "C"
 | 
			
		||||
      end
 | 
			
		||||
      begin
 | 
			
		||||
	if dir[0] == ?/ #/
 | 
			
		||||
	  lc_path = search_file(dir, base)
 | 
			
		||||
	  return real_load(lc_path, priv) if lc_path
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	for path in $:
 | 
			
		||||
	  lc_path = search_file(path + "/" + dir, base)
 | 
			
		||||
	  return real_load(lc_path, priv) if lc_path
 | 
			
		||||
	end
 | 
			
		||||
      ensure
 | 
			
		||||
	@lang = back if back
 | 
			
		||||
      end
 | 
			
		||||
      raise LoadError, "No such file to load -- #{file}"
 | 
			
		||||
    end 
 | 
			
		||||
 | 
			
		||||
    def real_load(path, priv)
 | 
			
		||||
      tmp_base = path.tr("./:", "___")
 | 
			
		||||
      lc_file = Tempfile.new(tmp_base)
 | 
			
		||||
      File.foreach(path) do |line|
 | 
			
		||||
	line = self.String(line)
 | 
			
		||||
	lc_file.print(line)
 | 
			
		||||
      end
 | 
			
		||||
      lc_file.close
 | 
			
		||||
      toplevel_load lc_file.path, priv
 | 
			
		||||
    end
 | 
			
		||||
    private :real_load
 | 
			
		||||
 | 
			
		||||
    def find(file , paths = $:)
 | 
			
		||||
      dir = File.dirname(file)
 | 
			
		||||
      dir = "" if dir == "."
 | 
			
		||||
      base = File.basename(file)
 | 
			
		||||
      if dir[0] == ?/ #/
 | 
			
		||||
	  return lc_path = search_file(dir, base)
 | 
			
		||||
      else
 | 
			
		||||
	for path in $:
 | 
			
		||||
	  if lc_path = search_file(path + "/" + dir, base)
 | 
			
		||||
	    return lc_path
 | 
			
		||||
	  end
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
      nil
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def search_file(path, file)
 | 
			
		||||
      if File.exists?(p1 = path + lc_path(file, "C"))
 | 
			
		||||
	if File.exists?(p2 = path + lc_path(file))
 | 
			
		||||
	  return p2
 | 
			
		||||
	else
 | 
			
		||||
	end
 | 
			
		||||
	return p1
 | 
			
		||||
      else
 | 
			
		||||
      end
 | 
			
		||||
      nil
 | 
			
		||||
    end
 | 
			
		||||
    private :search_file
 | 
			
		||||
 | 
			
		||||
    def lc_path(file = "", lc = @lang)
 | 
			
		||||
      case lc
 | 
			
		||||
      when "C"
 | 
			
		||||
	LOCALE_DIR + file
 | 
			
		||||
      when /^ja/
 | 
			
		||||
	LOCALE_DIR + "ja/" + file
 | 
			
		||||
      else
 | 
			
		||||
	LOCALE_DIR + @lang + "/" + file
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    private :lc_path
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										106
									
								
								lib/irb/workspace.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								lib/irb/workspace.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,106 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb/workspace-binding.rb - 
 | 
			
		||||
#   	$Release Version: 0.7.3$
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#   
 | 
			
		||||
#
 | 
			
		||||
module IRB
 | 
			
		||||
  class WorkSpace
 | 
			
		||||
    # create new workspace. 
 | 
			
		||||
    # (JP: $B?7$?$J(Bworkspace$B$r:n$k(B. main$B$r(Bself$B$H$9$k(B. $B>JN,$7$?$i(B, 
 | 
			
		||||
    #      TOPLEVEL_BINDING$B$N(Bmain$B$r$=$N$^$^;H$&(B. )
 | 
			
		||||
    def initialize(*main)
 | 
			
		||||
      if IRB.conf[:SINGLE_IRB]
 | 
			
		||||
	@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
 | 
			
		||||
EOF
 | 
			
		||||
	  f.close
 | 
			
		||||
	  load f.path
 | 
			
		||||
	  @binding = $binding
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
	when 3	# binging in function on TOPLEVEL_BINDING(default)
 | 
			
		||||
	  @binding = eval("def irb_binding; binding; end; irb_binding",
 | 
			
		||||
		      TOPLEVEL_BINDING, 
 | 
			
		||||
		      __FILE__,
 | 
			
		||||
		      __LINE__ - 3)
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
      if main.empty?
 | 
			
		||||
	@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 CanNotChangeBinding, @main.inspect
 | 
			
		||||
	  end
 | 
			
		||||
	end
 | 
			
		||||
      end
 | 
			
		||||
      eval("_=nil", @binding)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    attr_reader :binding
 | 
			
		||||
    attr_reader :main
 | 
			
		||||
 | 
			
		||||
    def evaluate(statements, file = __FILE__, line = __LINE__)
 | 
			
		||||
      eval statements, @binding, file, line
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # error message manupilator
 | 
			
		||||
    def filter_backtrace(bt)
 | 
			
		||||
      case IRB.conf[:CONTEXT_MODE]
 | 
			
		||||
      when 0
 | 
			
		||||
	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
 | 
			
		||||
      when 2
 | 
			
		||||
	return nil if bt =~ /irb\/.*\.rb/
 | 
			
		||||
      when 3
 | 
			
		||||
	return nil if bt =~ /irb\/.*\.rb/
 | 
			
		||||
	bt.sub!(/:\s*in `irb_binding'/){""} 
 | 
			
		||||
      end
 | 
			
		||||
      bt
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def IRB.delete_caller
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										15
									
								
								lib/irb/ws-for-case-2.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								lib/irb/ws-for-case-2.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
#
 | 
			
		||||
#   irb/ws-for-case-2.rb - 
 | 
			
		||||
#   	$Release Version: 0.7.3$
 | 
			
		||||
#   	$Revision$
 | 
			
		||||
#   	$Date$
 | 
			
		||||
#   	by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | 
			
		||||
#
 | 
			
		||||
# --
 | 
			
		||||
#
 | 
			
		||||
#   
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
while true
 | 
			
		||||
  IRB::BINDING_QUEUE.push b = binding
 | 
			
		||||
end
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue