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

ruby-changes:3954

From: ko1@a...
Date: Tue, 12 Feb 2008 16:19:06 +0900 (JST)
Subject: [ruby-changes:3954] nobu - Ruby:r15444 (trunk): * parse.y (args, mrhs): flattens literal array splats.

nobu	2008-02-12 16:18:49 +0900 (Tue, 12 Feb 2008)

  New Revision: 15444

  Modified files:
    trunk/ChangeLog
    trunk/parse.y

  Log:
    * parse.y (args, mrhs): flattens literal array splats.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/parse.y?r1=15444&r2=15443&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15444&r2=15443&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 15443)
+++ ChangeLog	(revision 15444)
@@ -1,24 +1,28 @@
+Tue Feb 12 16:18:47 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* parse.y (args, mrhs): flattens literal array splats.
+
 Tue Feb 12 15:27:19 2008  NARUSE, Yui  <naruse@r...>
 
 	* bootstraptest/runner.rb, bootstraptest/test_method.rb, enc/depend,
-	instruby.rb, lib/mkmf.rb, lib/test/unit/util/procwrapper.rb,
-	mkconfig.rb, sample/test.rb, template/vm.inc.tmpl,
-	test/ruby/test_stringchar.rb: fixes arround String#gsub.
+	  instruby.rb, lib/mkmf.rb, lib/test/unit/util/procwrapper.rb,
+	  mkconfig.rb, sample/test.rb, template/vm.inc.tmpl,
+	  test/ruby/test_stringchar.rb: fixes arround String#gsub.
 
 
 Tue Feb 12 15:11:47 2008  NARUSE, Yui  <naruse@r...>
 
 	* ext/json/lib/json/pure/generator.rb,
-	ext/json/lib/json/pure/parser.rb, ext/openssl/lib/openssl/x509.rb,
-	ext/win32ole/sample/olegen.rb, lib/date/format.rb, lib/irb/context.rb,
-	lib/irb/workspace.rb, lib/net/http.rb, lib/net/imap.rb,
-	lib/rdoc/generator.rb, lib/rdoc/markup/to_html.rb,
-	lib/rdoc/markup/to_latex.rb, lib/rdoc/parsers/parse_c.rb,
-	lib/rdoc/ri/formatter.rb, lib/rexml/parsers/baseparser.rb,
-	lib/rexml/quickpath.rb, lib/rexml/text.rb, lib/rss/parser.rb,
-	lib/uri/common.rb, lib/uri/generic.rb, lib/webrick/httpresponse.rb,
-	lib/webrick/httpservlet/filehandler.rb, lib/yaml/baseemitter.rb,
-	lib/yaml/encoding.rb: performance tuning arround String#gsub.
+	  ext/json/lib/json/pure/parser.rb, ext/openssl/lib/openssl/x509.rb,
+	  ext/win32ole/sample/olegen.rb, lib/date/format.rb, lib/irb/context.rb,
+	  lib/irb/workspace.rb, lib/net/http.rb, lib/net/imap.rb,
+	  lib/rdoc/generator.rb, lib/rdoc/markup/to_html.rb,
+	  lib/rdoc/markup/to_latex.rb, lib/rdoc/parsers/parse_c.rb,
+	  lib/rdoc/ri/formatter.rb, lib/rexml/parsers/baseparser.rb,
+	  lib/rexml/quickpath.rb, lib/rexml/text.rb, lib/rss/parser.rb,
+	  lib/uri/common.rb, lib/uri/generic.rb, lib/webrick/httpresponse.rb,
+	  lib/webrick/httpservlet/filehandler.rb, lib/yaml/baseemitter.rb,
+	  lib/yaml/encoding.rb: performance tuning arround String#gsub.
 
 Tue Feb 12 12:16:45 2008  Yukihiro Matsumoto  <matz@r...>
 
@@ -87,12 +91,12 @@
 	0.2.3 -> 0.2.4.
 
 	* lib/rss/maker.rb, lib/rss/maker/, test/rss/test_maker_2.0.rb:
-	fixed a bug that RSS::Maker.make("0.9")'s item doesn't make some
-	elements if description is missed.
-	Reported by Michael Auzenne. Thanks!!!
+	  fixed a bug that RSS::Maker.make("0.9")'s item doesn't make some
+	  elements if description is missed.
+	  Reported by Michael Auzenne. Thanks!!!
 
 	* lib/rss/maker/0.9.rb, test/rss/test_maker_0.9.rb:
-	RSS::Maker.make("0.9") generates RSS 0.92 not RSS 0.91.
+	  RSS::Maker.make("0.9") generates RSS 0.92 not RSS 0.91.
 
 Mon Feb 11 10:43:31 2008  NARUSE, Yui  <naruse@r...>
 
@@ -126,7 +130,7 @@
 Sun Feb 10 16:58:20 2008  Eric Hodel  <drbrain@s...>
 
 	* lib/rubygems*, test/rubygems*, gem_prelude.rb: Import RubyGems
-	* r1601.  [ruby-core:15381]
+	  r1601.  [ruby-core:15381]
 
 Sun Feb 10 15:07:23 2008  Nobuyoshi Nakada  <nobu@r...>
 
Index: parse.y
===================================================================
--- parse.y	(revision 15443)
+++ parse.y	(revision 15444)
@@ -369,6 +369,7 @@
 #define new_evstr(n) new_evstr_gen(parser,n)
 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
 #define evstr2dstr(n) evstr2dstr_gen(parser,n)
+static NODE *splat_array(NODE*);
 
 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, recv,id,arg1)
@@ -2445,7 +2446,13 @@
 		| args ',' arg_value
 		    {
 		    /*%%%*/
-			$$ = arg_append($1, $3);
+			NODE *n1;
+			if ((n1 = splat_array($1)) != 0) {
+			    $$ = list_append(n1, $3);
+			}
+			else {
+			    $$ = arg_append($1, $3);
+			}
 		    /*%
 			$$ = arg_add($1, $3);
 		    %*/
@@ -2453,7 +2460,14 @@
 		| args ',' tSTAR arg_value
 		    {
 		    /*%%%*/
-			$$ = arg_concat($1, $4);
+			NODE *n1;
+			if (nd_type($4) == NODE_ARRAY &&
+			    (n1 = splat_array($1)) != 0) {
+			    $$ = list_concat(n1, $4);
+			}
+			else {
+			    $$ = arg_concat($1, $4);
+			}
 		    /*%
 			$$ = arg_add_star($1, $4);
 		    %*/
@@ -2463,7 +2477,13 @@
 mrhs		: args ',' arg_value
 		    {
 		    /*%%%*/
-			$$ = arg_append($1, $3);
+			NODE *n1;
+			if ((n1 = splat_array($1)) != 0) {
+			    $$ = list_append(n1, $3);
+			}
+			else {
+			    $$ = arg_append($1, $3);
+			}
 		    /*%
 			$$ = mrhs_add(args2mrhs($1), $3);
 		    %*/
@@ -2471,7 +2491,14 @@
 		| args ',' tSTAR arg_value
 		    {
 		    /*%%%*/
-			$$ = arg_concat($1, $4);
+			NODE *n1;
+			if (nd_type($4) == NODE_ARRAY &&
+			    (n1 = splat_array($1)) != 0) {
+			    $$ = list_concat(n1, $4);
+			}
+			else {
+			    $$ = arg_concat($1, $4);
+			}
 		    /*%
 			$$ = mrhs_add_star(args2mrhs($1), $4);
 		    %*/
@@ -7799,6 +7826,14 @@
 }
 
 static NODE *
+splat_array(NODE* node)
+{
+    if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
+    if (nd_type(node) == NODE_ARRAY) return node;
+    return 0;
+}
+
+static NODE *
 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
 {
     if (!lhs) return 0;

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

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