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

ruby-changes:18779

From: nobu <ko1@a...>
Date: Sun, 6 Feb 2011 12:18:51 +0900 (JST)
Subject: [ruby-changes:18779] Ruby:r30805 (trunk): * parse.y (words, qwords): dispatch array events. based on a

nobu	2011-02-06 12:18:44 +0900 (Sun, 06 Feb 2011)

  New Revision: 30805

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

  Log:
    * parse.y (words, qwords): dispatch array events.  based on a
      patch from Michael Edgar.  [Bug #4365].

  Modified files:
    trunk/ChangeLog
    trunk/parse.y
    trunk/test/ripper/dummyparser.rb
    trunk/test/ripper/test_parser_events.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 30804)
+++ ChangeLog	(revision 30805)
@@ -1,3 +1,8 @@
+Sun Feb  6 12:18:25 2011  Nobuyoshi Nakada  <nobu@r...>
+
+	* parse.y (words, qwords): dispatch array events.  based on a
+	  patch from Michael Edgar.  [Bug #4365].
+
 Sun Feb  6 12:12:59 2011  Nobuyoshi Nakada  <nobu@r...>
 
 	* test/fileutils/fileasserts.rb (FileAssertions): separate module.
Index: parse.y
===================================================================
--- parse.y	(revision 30804)
+++ parse.y	(revision 30805)
@@ -3949,11 +3949,16 @@
 			$$ = NEW_ZARRAY();
 		    /*%
 			$$ = dispatch0(words_new);
+			$$ = dispatch1(array, $$);
 		    %*/
 		    }
 		| tWORDS_BEG word_list tSTRING_END
 		    {
+		    /*%%%*/
 			$$ = $2;
+		    /*%
+			$$ = dispatch1(array, $2);
+		    %*/
 		    }
 		;
 
@@ -3999,11 +4004,16 @@
 			$$ = NEW_ZARRAY();
 		    /*%
 			$$ = dispatch0(qwords_new);
+			$$ = dispatch1(array, $$);
 		    %*/
 		    }
 		| tQWORDS_BEG qword_list tSTRING_END
 		    {
+		    /*%%%*/
 			$$ = $2;
+		    /*%
+			$$ = dispatch1(array, $2);
+		    %*/
 		    }
 		;
 
Index: test/ripper/test_parser_events.rb
===================================================================
--- test/ripper/test_parser_events.rb	(revision 30804)
+++ test/ripper/test_parser_events.rb	(revision 30805)
@@ -160,6 +160,8 @@
 
   def test_array   # array literal
     assert_equal '[array([1,2,3])]', parse('[1,2,3]')
+    assert_equal '[array([abc,def])]', parse('%w[abc def]')
+    assert_equal '[array([abc,def])]', parse('%W[abc def]')
   end
 
   def test_assign   # generic assignment
Index: test/ripper/dummyparser.rb
===================================================================
--- test/ripper/dummyparser.rb	(revision 30804)
+++ test/ripper/dummyparser.rb	(revision 30805)
@@ -130,44 +130,44 @@
     on_args_add_block(m.children, b)
     m
   end
-  
+
   def on_paren(params)
     params
   end
-  
+
   def on_brace_block(params, code)
     Node.new('block', params, code)
   end
-  
+
   def on_block_var(params, shadow)
     params
   end
-  
+
   def on_rest_param(var)
     "*#{var}"
   end
-  
+
   def on_blockarg(var)
     "&#{var}"
   end
-  
+
   def on_params(required, optional, rest, more, block)
     args = NodeList.new
-    
+
     required.each do |req|
       args.push(req)
     end if required
-    
+
     optional.each do |var, val|
       args.push("#{var}=#{val}")
     end if optional
-    
+
     args.push(rest) if rest
-    
+
     more.each do |m|
       args.push(m)
     end if more
-    
+
     args.push(block) if block
     args
   end
@@ -184,6 +184,22 @@
     Node.new('assocs', *a)
   end
 
+  def on_words_new
+    NodeList.new
+  end
+
+  def on_words_add(words, word)
+    words.push word
+  end
+
+  def on_qwords_new
+    NodeList.new
+  end
+
+  def on_qwords_add(words, word)
+    words.push word
+  end
+
   (Ripper::PARSER_EVENTS.map(&:to_s) - instance_methods(false).map {|n|n.to_s.sub(/^on_/, '')}).each do |event|
     define_method(:"on_#{event}") do |*args|
       Node.new(event, *args)

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

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