From c5f550c06918c7a0158f8f4e843b4a16dfb03c8a Mon Sep 17 00:00:00 2001 From: keiju Date: Fri, 4 Aug 2006 10:06:17 +0000 Subject: * lib/irb/{init.rb,ruby-lex.rb,slex.rb}: can't input '\c' for [ruby-core: 7122]. and support for ruby1.8.X git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@10663 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/irb/init.rb | 2 +- lib/irb/ruby-lex.rb | 36 +++++++++++++++++++++++++----------- lib/irb/slex.rb | 24 ++++++++++++------------ 3 files changed, 38 insertions(+), 24 deletions(-) (limited to 'lib/irb') diff --git a/lib/irb/init.rb b/lib/irb/init.rb index 25059e26e9..0fd54ee806 100644 --- a/lib/irb/init.rb +++ b/lib/irb/init.rb @@ -233,7 +233,7 @@ module IRB # enumerate possible rc-file base name generators def IRB.rc_file_generators if irbrc = ENV["IRBRC"] - yield proc{|rc| irbrc} + yield proc{|rc| rc == "rc" ? irbrc : irbrc+rc} end if home = ENV["HOME"] yield proc{|rc| home+"/.irb#{rc}"} diff --git a/lib/irb/ruby-lex.rb b/lib/irb/ruby-lex.rb index c9b9f10392..ab584d5253 100644 --- a/lib/irb/ruby-lex.rb +++ b/lib/irb/ruby-lex.rb @@ -338,23 +338,23 @@ class RubyLex def lex_init() @OP = IRB::SLex.new - @OP.def_rules("\0", "\004", "\032") do + @OP.def_rules("\0", "\004", "\032") do |op, io| Token(TkEND_OF_SCRIPT) end - @OP.def_rules(" ", "\t", "\f", "\r", "\13") do + @OP.def_rules(" ", "\t", "\f", "\r", "\13") do |op, io| @space_seen = true while getc =~ /[ \t\f\r\13]/; end ungetc Token(TkSPACE) end - @OP.def_rule("#") do - |op, io| + @OP.def_rule("#") do |op, io| identify_comment end - @OP.def_rule("=begin", proc{@prev_char_no == 0 && peek(0) =~ /\s/}) do + @OP.def_rule("=begin", + proc{|op, io| @prev_char_no == 0 && peek(0) =~ /\s/}) do |op, io| @ltype = "=" until getc == "\n"; end @@ -366,7 +366,7 @@ class RubyLex Token(TkRD_COMMENT) end - @OP.def_rule("\n") do + @OP.def_rule("\n") do |op, io| print "\\n\n" if RubyLex.debug? case @lex_state when EXPR_BEG, EXPR_FNAME, EXPR_DOT @@ -478,13 +478,13 @@ class RubyLex Token(TkOPASGN, $1) end - @OP.def_rule("+@", proc{@lex_state == EXPR_FNAME}) do + @OP.def_rule("+@", proc{|op, io| @lex_state == EXPR_FNAME}) do |op, io| @lex_state = EXPR_ARG Token(op) end - @OP.def_rule("-@", proc{@lex_state == EXPR_FNAME}) do + @OP.def_rule("-@", proc{|op, io| @lex_state == EXPR_FNAME}) do |op, io| @lex_state = EXPR_ARG Token(op) @@ -509,6 +509,7 @@ class RubyLex end @OP.def_rule(".") do + |op, io| @lex_state = EXPR_BEG if peek(0) =~ /[0-9]/ ungetc @@ -539,6 +540,7 @@ class RubyLex end @OP.def_rule(":") do + |op, io| if @lex_state == EXPR_END || peek(0) =~ /\s/ @lex_state = EXPR_BEG Token(TkCOLON) @@ -549,6 +551,7 @@ class RubyLex end @OP.def_rule("::") do + |op, io| # p @lex_state.id2name, @space_seen if @lex_state == EXPR_BEG or @lex_state == EXPR_ARG && @space_seen @lex_state = EXPR_BEG @@ -576,6 +579,7 @@ class RubyLex end @OP.def_rules("^") do + |op, io| @lex_state = EXPR_BEG Token("^") end @@ -603,16 +607,19 @@ class RubyLex end @OP.def_rule("~") do + |op, io| @lex_state = EXPR_BEG Token("~") end - @OP.def_rule("~@", proc{@lex_state == EXPR_FNAME}) do + @OP.def_rule("~@", proc{|op, io| @lex_state == EXPR_FNAME}) do + |op, io| @lex_state = EXPR_BEG Token("~") end @OP.def_rule("(") do + |op, io| @indent += 1 if @lex_state == EXPR_BEG || @lex_state == EXPR_MID @lex_state = EXPR_BEG @@ -625,17 +632,20 @@ class RubyLex tk = Token(tk_c) end - @OP.def_rule("[]", proc{@lex_state == EXPR_FNAME}) do + @OP.def_rule("[]", proc{|op, io| @lex_state == EXPR_FNAME}) do + |op, io| @lex_state = EXPR_ARG Token("[]") end - @OP.def_rule("[]=", proc{@lex_state == EXPR_FNAME}) do + @OP.def_rule("[]=", proc{|op, io| @lex_state == EXPR_FNAME}) do + |op, io| @lex_state = EXPR_ARG Token("[]=") end @OP.def_rule("[") do + |op, io| @indent += 1 if @lex_state == EXPR_FNAME tk_c = TkfLBRACK @@ -654,6 +664,7 @@ class RubyLex end @OP.def_rule("{") do + |op, io| @indent += 1 if @lex_state != EXPR_END && @lex_state != EXPR_ARG tk_c = TkLBRACE @@ -666,6 +677,7 @@ class RubyLex end @OP.def_rule('\\') do + |op, io| if getc == "\n" @space_seen = true @continue = true @@ -692,10 +704,12 @@ class RubyLex end @OP.def_rule('$') do + |op, io| identify_gvar end @OP.def_rule('@') do + |op, io| if peek(0) =~ /[\w_@]/ ungetc identify_identifier diff --git a/lib/irb/slex.rb b/lib/irb/slex.rb index 64321eb456..866bf30a5c 100644 --- a/lib/irb/slex.rb +++ b/lib/irb/slex.rb @@ -167,9 +167,9 @@ module IRB def match(chrs, op = "") D_DETAIL.print "match>: ", chrs, "op:", op, "\n" if chrs.empty? - if @preproc.nil? || @preproc.yield(op, chrs) + if @preproc.nil? || @preproc.call(op, chrs) DOUT.printf(D_DETAIL, "op1: %s\n", op) - @postproc.yield(op, chrs) + @postproc.call(op, chrs) else nil end @@ -180,9 +180,9 @@ module IRB return ret else chrs.unshift ch - if @postproc and @preproc.nil? || @preproc.yield(op, chrs) + if @postproc and @preproc.nil? || @preproc.call(op, chrs) DOUT.printf(D_DETAIL, "op2: %s\n", op.inspect) - ret = @postproc.yield(op, chrs) + ret = @postproc.call(op, chrs) return ret else return nil @@ -190,9 +190,9 @@ module IRB end else chrs.unshift ch - if @postproc and @preproc.nil? || @preproc.yield(op, chrs) + if @postproc and @preproc.nil? || @preproc.call(op, chrs) DOUT.printf(D_DETAIL, "op3: %s\n", op) - @postproc.yield(op, chrs) + @postproc.call(op, chrs) return "" else return nil @@ -211,9 +211,9 @@ module IRB ch = io.getc_of_rests end if ch.nil? - if @preproc.nil? || @preproc.yield(op, io) + if @preproc.nil? || @preproc.call(op, io) D_DETAIL.printf("op1: %s\n", op) - @postproc.yield(op, io) + @postproc.call(op, io) else nil end @@ -223,18 +223,18 @@ module IRB ret else io.ungetc ch - if @postproc and @preproc.nil? || @preproc.yield(op, io) + if @postproc and @preproc.nil? || @preproc.call(op, io) DOUT.exec_if{D_DETAIL.printf "op2: %s\n", op.inspect} - @postproc.yield(op, io) + @postproc.call(op, io) else nil end end else io.ungetc ch - if @postproc and @preproc.nil? || @preproc.yield(op, io) + if @postproc and @preproc.nil? || @preproc.call(op, io) D_DETAIL.printf("op3: %s\n", op) - @postproc.yield(op, io) + @postproc.call(op, io) else nil end -- cgit v1.2.3