mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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
This commit is contained in:
parent
d040c69a58
commit
c5f550c069
3 changed files with 38 additions and 24 deletions
|
@ -233,7 +233,7 @@ module IRB
|
||||||
# enumerate possible rc-file base name generators
|
# enumerate possible rc-file base name generators
|
||||||
def IRB.rc_file_generators
|
def IRB.rc_file_generators
|
||||||
if irbrc = ENV["IRBRC"]
|
if irbrc = ENV["IRBRC"]
|
||||||
yield proc{|rc| irbrc}
|
yield proc{|rc| rc == "rc" ? irbrc : irbrc+rc}
|
||||||
end
|
end
|
||||||
if home = ENV["HOME"]
|
if home = ENV["HOME"]
|
||||||
yield proc{|rc| home+"/.irb#{rc}"}
|
yield proc{|rc| home+"/.irb#{rc}"}
|
||||||
|
|
|
@ -338,23 +338,23 @@ class RubyLex
|
||||||
|
|
||||||
def lex_init()
|
def lex_init()
|
||||||
@OP = IRB::SLex.new
|
@OP = IRB::SLex.new
|
||||||
@OP.def_rules("\0", "\004", "\032") do
|
@OP.def_rules("\0", "\004", "\032") do |op, io|
|
||||||
Token(TkEND_OF_SCRIPT)
|
Token(TkEND_OF_SCRIPT)
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rules(" ", "\t", "\f", "\r", "\13") do
|
@OP.def_rules(" ", "\t", "\f", "\r", "\13") do |op, io|
|
||||||
@space_seen = true
|
@space_seen = true
|
||||||
while getc =~ /[ \t\f\r\13]/; end
|
while getc =~ /[ \t\f\r\13]/; end
|
||||||
ungetc
|
ungetc
|
||||||
Token(TkSPACE)
|
Token(TkSPACE)
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule("#") do
|
@OP.def_rule("#") do |op, io|
|
||||||
|op, io|
|
|
||||||
identify_comment
|
identify_comment
|
||||||
end
|
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|
|
|op, io|
|
||||||
@ltype = "="
|
@ltype = "="
|
||||||
until getc == "\n"; end
|
until getc == "\n"; end
|
||||||
|
@ -366,7 +366,7 @@ class RubyLex
|
||||||
Token(TkRD_COMMENT)
|
Token(TkRD_COMMENT)
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule("\n") do
|
@OP.def_rule("\n") do |op, io|
|
||||||
print "\\n\n" if RubyLex.debug?
|
print "\\n\n" if RubyLex.debug?
|
||||||
case @lex_state
|
case @lex_state
|
||||||
when EXPR_BEG, EXPR_FNAME, EXPR_DOT
|
when EXPR_BEG, EXPR_FNAME, EXPR_DOT
|
||||||
|
@ -478,13 +478,13 @@ class RubyLex
|
||||||
Token(TkOPASGN, $1)
|
Token(TkOPASGN, $1)
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule("+@", proc{@lex_state == EXPR_FNAME}) do
|
@OP.def_rule("+@", proc{|op, io| @lex_state == EXPR_FNAME}) do
|
||||||
|op, io|
|
|op, io|
|
||||||
@lex_state = EXPR_ARG
|
@lex_state = EXPR_ARG
|
||||||
Token(op)
|
Token(op)
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule("-@", proc{@lex_state == EXPR_FNAME}) do
|
@OP.def_rule("-@", proc{|op, io| @lex_state == EXPR_FNAME}) do
|
||||||
|op, io|
|
|op, io|
|
||||||
@lex_state = EXPR_ARG
|
@lex_state = EXPR_ARG
|
||||||
Token(op)
|
Token(op)
|
||||||
|
@ -509,6 +509,7 @@ class RubyLex
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule(".") do
|
@OP.def_rule(".") do
|
||||||
|
|op, io|
|
||||||
@lex_state = EXPR_BEG
|
@lex_state = EXPR_BEG
|
||||||
if peek(0) =~ /[0-9]/
|
if peek(0) =~ /[0-9]/
|
||||||
ungetc
|
ungetc
|
||||||
|
@ -539,6 +540,7 @@ class RubyLex
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule(":") do
|
@OP.def_rule(":") do
|
||||||
|
|op, io|
|
||||||
if @lex_state == EXPR_END || peek(0) =~ /\s/
|
if @lex_state == EXPR_END || peek(0) =~ /\s/
|
||||||
@lex_state = EXPR_BEG
|
@lex_state = EXPR_BEG
|
||||||
Token(TkCOLON)
|
Token(TkCOLON)
|
||||||
|
@ -549,6 +551,7 @@ class RubyLex
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule("::") do
|
@OP.def_rule("::") do
|
||||||
|
|op, io|
|
||||||
# p @lex_state.id2name, @space_seen
|
# p @lex_state.id2name, @space_seen
|
||||||
if @lex_state == EXPR_BEG or @lex_state == EXPR_ARG && @space_seen
|
if @lex_state == EXPR_BEG or @lex_state == EXPR_ARG && @space_seen
|
||||||
@lex_state = EXPR_BEG
|
@lex_state = EXPR_BEG
|
||||||
|
@ -576,6 +579,7 @@ class RubyLex
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rules("^") do
|
@OP.def_rules("^") do
|
||||||
|
|op, io|
|
||||||
@lex_state = EXPR_BEG
|
@lex_state = EXPR_BEG
|
||||||
Token("^")
|
Token("^")
|
||||||
end
|
end
|
||||||
|
@ -603,16 +607,19 @@ class RubyLex
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule("~") do
|
@OP.def_rule("~") do
|
||||||
|
|op, io|
|
||||||
@lex_state = EXPR_BEG
|
@lex_state = EXPR_BEG
|
||||||
Token("~")
|
Token("~")
|
||||||
end
|
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
|
@lex_state = EXPR_BEG
|
||||||
Token("~")
|
Token("~")
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule("(") do
|
@OP.def_rule("(") do
|
||||||
|
|op, io|
|
||||||
@indent += 1
|
@indent += 1
|
||||||
if @lex_state == EXPR_BEG || @lex_state == EXPR_MID
|
if @lex_state == EXPR_BEG || @lex_state == EXPR_MID
|
||||||
@lex_state = EXPR_BEG
|
@lex_state = EXPR_BEG
|
||||||
|
@ -625,17 +632,20 @@ class RubyLex
|
||||||
tk = Token(tk_c)
|
tk = Token(tk_c)
|
||||||
end
|
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
|
@lex_state = EXPR_ARG
|
||||||
Token("[]")
|
Token("[]")
|
||||||
end
|
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
|
@lex_state = EXPR_ARG
|
||||||
Token("[]=")
|
Token("[]=")
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule("[") do
|
@OP.def_rule("[") do
|
||||||
|
|op, io|
|
||||||
@indent += 1
|
@indent += 1
|
||||||
if @lex_state == EXPR_FNAME
|
if @lex_state == EXPR_FNAME
|
||||||
tk_c = TkfLBRACK
|
tk_c = TkfLBRACK
|
||||||
|
@ -654,6 +664,7 @@ class RubyLex
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule("{") do
|
@OP.def_rule("{") do
|
||||||
|
|op, io|
|
||||||
@indent += 1
|
@indent += 1
|
||||||
if @lex_state != EXPR_END && @lex_state != EXPR_ARG
|
if @lex_state != EXPR_END && @lex_state != EXPR_ARG
|
||||||
tk_c = TkLBRACE
|
tk_c = TkLBRACE
|
||||||
|
@ -666,6 +677,7 @@ class RubyLex
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule('\\') do
|
@OP.def_rule('\\') do
|
||||||
|
|op, io|
|
||||||
if getc == "\n"
|
if getc == "\n"
|
||||||
@space_seen = true
|
@space_seen = true
|
||||||
@continue = true
|
@continue = true
|
||||||
|
@ -692,10 +704,12 @@ class RubyLex
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule('$') do
|
@OP.def_rule('$') do
|
||||||
|
|op, io|
|
||||||
identify_gvar
|
identify_gvar
|
||||||
end
|
end
|
||||||
|
|
||||||
@OP.def_rule('@') do
|
@OP.def_rule('@') do
|
||||||
|
|op, io|
|
||||||
if peek(0) =~ /[\w_@]/
|
if peek(0) =~ /[\w_@]/
|
||||||
ungetc
|
ungetc
|
||||||
identify_identifier
|
identify_identifier
|
||||||
|
|
|
@ -167,9 +167,9 @@ module IRB
|
||||||
def match(chrs, op = "")
|
def match(chrs, op = "")
|
||||||
D_DETAIL.print "match>: ", chrs, "op:", op, "\n"
|
D_DETAIL.print "match>: ", chrs, "op:", op, "\n"
|
||||||
if chrs.empty?
|
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)
|
DOUT.printf(D_DETAIL, "op1: %s\n", op)
|
||||||
@postproc.yield(op, chrs)
|
@postproc.call(op, chrs)
|
||||||
else
|
else
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
@ -180,9 +180,9 @@ module IRB
|
||||||
return ret
|
return ret
|
||||||
else
|
else
|
||||||
chrs.unshift ch
|
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)
|
DOUT.printf(D_DETAIL, "op2: %s\n", op.inspect)
|
||||||
ret = @postproc.yield(op, chrs)
|
ret = @postproc.call(op, chrs)
|
||||||
return ret
|
return ret
|
||||||
else
|
else
|
||||||
return nil
|
return nil
|
||||||
|
@ -190,9 +190,9 @@ module IRB
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
chrs.unshift ch
|
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)
|
DOUT.printf(D_DETAIL, "op3: %s\n", op)
|
||||||
@postproc.yield(op, chrs)
|
@postproc.call(op, chrs)
|
||||||
return ""
|
return ""
|
||||||
else
|
else
|
||||||
return nil
|
return nil
|
||||||
|
@ -211,9 +211,9 @@ module IRB
|
||||||
ch = io.getc_of_rests
|
ch = io.getc_of_rests
|
||||||
end
|
end
|
||||||
if ch.nil?
|
if ch.nil?
|
||||||
if @preproc.nil? || @preproc.yield(op, io)
|
if @preproc.nil? || @preproc.call(op, io)
|
||||||
D_DETAIL.printf("op1: %s\n", op)
|
D_DETAIL.printf("op1: %s\n", op)
|
||||||
@postproc.yield(op, io)
|
@postproc.call(op, io)
|
||||||
else
|
else
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
@ -223,18 +223,18 @@ module IRB
|
||||||
ret
|
ret
|
||||||
else
|
else
|
||||||
io.ungetc ch
|
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}
|
DOUT.exec_if{D_DETAIL.printf "op2: %s\n", op.inspect}
|
||||||
@postproc.yield(op, io)
|
@postproc.call(op, io)
|
||||||
else
|
else
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
io.ungetc ch
|
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)
|
D_DETAIL.printf("op3: %s\n", op)
|
||||||
@postproc.yield(op, io)
|
@postproc.call(op, io)
|
||||||
else
|
else
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue