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

ruby-changes:14193

From: yugui <ko1@a...>
Date: Sat, 5 Dec 2009 18:48:45 +0900 (JST)
Subject: [ruby-changes:14193] Ruby:r26014 (ruby_1_9_1): merges r25967, r25968 and r25969 from trunk into ruby_1_9_1. fixes a backport task #2099.

yugui	2009-12-05 18:40:17 +0900 (Sat, 05 Dec 2009)

  New Revision: 26014

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

  Log:
    merges r25967, r25968 and r25969 from trunk into ruby_1_9_1. fixes a backport task #2099.
    --
    * parse.y (dyna_push_gen, dyna_pop_gen): adjust local vtable level
      for the case of syntax errors in method name or argument inside
      do block.   [ruby-core:26961]
    --
    * parse.y (dyna_push_gen): use rb_node_newnode() for ripper.
      [ruby-core:26961]
    --
    * parse.y (dyna_push_gen, dyna_pop_gen): no needs to save both of
      args and vars.  [ruby-core:26961]

  Modified files:
    branches/ruby_1_9_1/ChangeLog
    branches/ruby_1_9_1/bootstraptest/test_syntax.rb
    branches/ruby_1_9_1/parse.y
    branches/ruby_1_9_1/version.h

Index: ruby_1_9_1/ChangeLog
===================================================================
--- ruby_1_9_1/ChangeLog	(revision 26013)
+++ ruby_1_9_1/ChangeLog	(revision 26014)
@@ -1,3 +1,15 @@
+Tue Dec  1 12:01:13 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* parse.y (dyna_push_gen, dyna_pop_gen): no needs to save both of
+	  args and vars.  [ruby-core:26961]
+
+	* parse.y (dyna_push_gen): use rb_node_newnode() for ripper.
+	  [ruby-core:26961]
+
+	* parse.y (dyna_push_gen, dyna_pop_gen): adjust local vtable level
+	  for the case of syntax errors in method name or argument inside
+	  do block.   [ruby-core:26961]
+
 Tue Oct 20 15:28:49 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* parse.y (method_call): dispatch symbols.  a patch from Andy Keep in
Index: ruby_1_9_1/bootstraptest/test_syntax.rb
===================================================================
--- ruby_1_9_1/bootstraptest/test_syntax.rb	(revision 26013)
+++ ruby_1_9_1/bootstraptest/test_syntax.rb	(revision 26014)
@@ -831,3 +831,49 @@
 assert_equal 'ok', %q{
   "#{}""#{}ok"
 }, '[ruby-dev:38968]'
+
+
+assert_equal 'ok', %q{
+  "o" "#{}k"
+}, '[ruby-dev:38980]'
+
+bug2415 = '[ruby-core:26961]'
+assert_normal_exit %q{
+  0.times do
+    0.times do
+      def x(a=1, b, *rest); nil end
+    end
+  end
+}, bug2415
+
+assert_normal_exit %q{
+  0.times do
+    0.times do
+      def x@; nil end
+    end
+  end
+}, bug2415
+
+assert_normal_exit %q{
+  0.times do
+    0.times do
+      def x(a = 0.times do
+              def y(a=1, b, *rest); nil; end
+            end)
+        nil
+      end
+    end
+  end
+}, bug2415
+
+assert_normal_exit %q{
+  0.times do
+    0.times do
+      def x(a = 0.times do
+              def x@; nil; end
+            end)
+        nil
+      end
+    end
+  end
+}, bug2415
Index: ruby_1_9_1/parse.y
===================================================================
--- ruby_1_9_1/parse.y	(revision 26013)
+++ ruby_1_9_1/parse.y	(revision 26014)
@@ -455,10 +455,10 @@
 static ID   internal_id_gen(struct parser_params*);
 #define internal_id() internal_id_gen(parser)
 
-static void dyna_push_gen(struct parser_params*);
+static const struct vtable *dyna_push_gen(struct parser_params *);
 #define dyna_push() dyna_push_gen(parser)
-static void dyna_pop_gen(struct parser_params*);
-#define dyna_pop() dyna_pop_gen(parser)
+static void dyna_pop_gen(struct parser_params*, const struct vtable *);
+#define dyna_pop(node) dyna_pop_gen(parser, node)
 static int dyna_in_block_gen(struct parser_params*);
 #define dyna_in_block() dyna_in_block_gen(parser)
 #define dyna_var(id) local_var(id)
@@ -617,6 +617,7 @@
     NODE *node;
     ID id;
     int num;
+    const struct vtable *vars;
 }
 
 /*%%%*/
@@ -1321,7 +1322,7 @@
 
 cmd_brace_block	: tLBRACE_ARG
 		    {
-			dyna_push();
+			$<vars>1 = dyna_push();
 		    /*%%%*/
 			$<num>$ = ruby_sourceline;
 		    /*%
@@ -1337,7 +1338,7 @@
 		    /*%
 			$$ = dispatch2(brace_block, escape_Qundef($3), $4);
 		    %*/
-			dyna_pop();
+			dyna_pop($<vars>1);
 		    }
 		;
 
@@ -3469,21 +3470,23 @@
 		;
 
 lambda		:   {
-			dyna_push();
+			$<vars>$ = dyna_push();
+		    }
+		    {
 			$<num>$ = lpar_beg;
 			lpar_beg = ++paren_nest;
 		    }
 		  f_larglist
 		  lambda_body
 		    {
-			lpar_beg = $<num>1;
+			lpar_beg = $<num>2;
 		    /*%%%*/
-			$$ = $2;
-			$$->nd_body = NEW_SCOPE($2->nd_head, $3);
+			$$ = $3;
+			$$->nd_body = NEW_SCOPE($3->nd_head, $4);
 		    /*%
-			$$ = dispatch2(lambda, $2, $3);
+			$$ = dispatch2(lambda, $3, $4);
 		    %*/
-			dyna_pop();
+			dyna_pop($<vars>1);
 		    }
 		;
 
@@ -3517,7 +3520,7 @@
 
 do_block	: keyword_do_block
 		    {
-			dyna_push();
+			$<vars>1 = dyna_push();
 		    /*%%%*/
 			$<num>$ = ruby_sourceline;
 		    /*% %*/
@@ -3532,7 +3535,7 @@
 		    /*%
 			$$ = dispatch2(do_block, escape_Qundef($3), $4);
 		    %*/
-			dyna_pop();
+			dyna_pop($<vars>1);
 		    }
 		;
 
@@ -3663,7 +3666,7 @@
 
 brace_block	: '{'
 		    {
-			dyna_push();
+			$<vars>1 = dyna_push();
 		    /*%%%*/
 			$<num>$ = ruby_sourceline;
 		    /*%
@@ -3678,11 +3681,11 @@
 		    /*%
 			$$ = dispatch2(brace_block, escape_Qundef($3), $4);
 		    %*/
-			dyna_pop();
+			dyna_pop($<vars>1);
 		    }
 		| keyword_do
 		    {
-			dyna_push();
+			$<vars>1 = dyna_push();
 		    /*%%%*/
 			$<num>$ = ruby_sourceline;
 		    /*%
@@ -3697,7 +3700,7 @@
 		    /*%
 			$$ = dispatch2(do_block, escape_Qundef($3), $4);
 		    %*/
-			dyna_pop();
+			dyna_pop($<vars>1);
 		    }
 		;
 
@@ -8939,18 +8942,22 @@
     }
 }
 
-static void
+static const struct vtable *
 dyna_push_gen(struct parser_params *parser)
 {
     lvtbl->args = vtable_alloc(lvtbl->args);
     lvtbl->vars = vtable_alloc(lvtbl->vars);
+    return lvtbl->args;
 }
 
 static void
-dyna_pop_gen(struct parser_params *parser)
+dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
 {
     struct vtable *tmp;
 
+    while (lvtbl->args != lvargs) {
+	local_pop();
+    }
     tmp = lvtbl->args;
     lvtbl->args = lvtbl->args->prev;
     vtable_free(tmp);
Index: ruby_1_9_1/version.h
===================================================================
--- ruby_1_9_1/version.h	(revision 26013)
+++ ruby_1_9_1/version.h	(revision 26014)
@@ -1,5 +1,5 @@
 #define RUBY_VERSION "1.9.1"
-#define RUBY_PATCHLEVEL 367
+#define RUBY_PATCHLEVEL 368
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 9
 #define RUBY_VERSION_TEENY 1

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

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