[前][次][番号順一覧][スレッド一覧]

ruby-changes:12550

From: keiju <ko1@a...>
Date: Thu, 23 Jul 2009 17:35:39 +0900 (JST)
Subject: [ruby-changes:12550] Ruby:r24258 (trunk): * lib/irb/ruby-lex.rb: make irb be able to parse

keiju	2009-07-23 17:35:22 +0900 (Thu, 23 Jul 2009)

  New Revision: 24258

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24258

  Log:
     * lib/irb/ruby-lex.rb: make irb be able to parse
      string_dvar. [ruby-core: 24051]

  Modified files:
    trunk/ChangeLog
    trunk/lib/irb/ruby-lex.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24257)
+++ ChangeLog	(revision 24258)
@@ -1,3 +1,8 @@
+Thu Jul 23 17:31:02 2009  Keiju Ishitsuka  <keiju@r...>
+
+	* lib/irb/ruby-lex.rb: make irb be able to parse
+	  string_dvar. [ruby-core: 24051]
+
 Thu Jul 23 17:26:51 2009  Hidetoshi NAGAI  <nagai@a...>
 
 	* ext/tk/extconf.rb: should not create "config_list" in a $srcdir.
@@ -89,7 +94,7 @@
 	* test/ruby/test_enum.rb (TestEnumerable#each): recursive join now
 	  raises ArgumentError.
 
-Wed Jul 22 02:33:57 2009  Keiju Ishitsuka  <keiju@e...>
+Wed Jul 22 02:33:57 2009  Keiju Ishitsuka  <keiju@r...>
 
 	* lib/irb.rb: forget svn commit.
 
Index: lib/irb/ruby-lex.rb
===================================================================
--- lib/irb/ruby-lex.rb	(revision 24257)
+++ lib/irb/ruby-lex.rb	(revision 24258)
@@ -1047,6 +1047,8 @@
       while ch = getc
 	if @quoted == ch and nest == 0
 	  break
+	elsif ch == "#" and peek(0) == "{"
+	  identify_string_dvar
 	elsif @ltype != "'" && @ltype != "]" && @ltype != ":" and ch == "#"
 	  subtype = true
 	elsif ch == '\\' and @ltype == "'" #'
@@ -1083,6 +1085,42 @@
     end
   end
 
+  def identify_string_dvar
+    begin
+      getc
+
+      reserve_continue = @continue
+      reserve_ltype = @ltype
+      reserve_indent = @indent
+      reserve_indent_stack = @indent_stack
+      reserve_state = @lex_state
+      reserve_quoted = @quoted
+
+      @ltype = nil
+      @quoted = nil
+      @indent = 0
+      @indent_stack = []
+      @lex_state = EXPR_BEG
+      
+      loop do
+	@continue = false
+	prompt
+	tk = token
+	if @ltype or @continue or @indent > 0
+	  next
+	end
+	break if tk.kind_of?(TkRBRACE)
+      end
+    ensure
+      @continue = reserve_continue
+      @ltype = reserve_ltype
+      @indent = reserve_indent
+      @indent_stack = reserve_indent_stack
+      @lex_state = reserve_state
+      @quoted = reserve_quoted
+    end
+  end
+  
   def identify_comment
     @ltype = "#"
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]