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

ruby-changes:14234

From: nobu <ko1@a...>
Date: Thu, 10 Dec 2009 01:16:01 +0900 (JST)
Subject: [ruby-changes:14234] Ruby:r26055 (trunk): * parse.y (dyna_pop_gen): pop dvars.

nobu	2009-12-10 01:12:57 +0900 (Thu, 10 Dec 2009)

  New Revision: 26055

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

  Log:
    * parse.y (dyna_pop_gen): pop dvars.  [ruby-dev:39861]

  Modified files:
    trunk/ChangeLog
    trunk/bootstraptest/test_syntax.rb
    trunk/parse.y

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 26054)
+++ ChangeLog	(revision 26055)
@@ -1,3 +1,7 @@
+Thu Dec 10 01:12:55 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* parse.y (dyna_pop_gen): pop dvars.  [ruby-dev:39861]
+
 Thu Dec 10 00:46:43 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* node.c (dump_node): fixed for long members.
Index: bootstraptest/test_syntax.rb
===================================================================
--- bootstraptest/test_syntax.rb	(revision 26054)
+++ bootstraptest/test_syntax.rb	(revision 26055)
@@ -877,3 +877,10 @@
     end
   end
 }, bug2415
+
+assert_normal_exit %q{
+  a {
+    b {|c.d| }
+    e
+  }
+}, '[ruby-dev:39861]'
Index: parse.y
===================================================================
--- parse.y	(revision 26054)
+++ parse.y	(revision 26055)
@@ -8892,13 +8892,10 @@
 }
 
 static void
-dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
+dyna_pop_1(struct parser_params *parser)
 {
     struct vtable *tmp;
 
-    while (lvtbl->args != lvargs) {
-	local_pop();
-    }
     tmp = lvtbl->args;
     lvtbl->args = lvtbl->args->prev;
     vtable_free(tmp);
@@ -8907,6 +8904,20 @@
     vtable_free(tmp);
 }
 
+static void
+dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
+{
+    while (lvtbl->args != lvargs) {
+	dyna_pop_1(parser);
+	if (!lvtbl->args) {
+	    struct local_vars *local = lvtbl->prev;
+	    xfree(lvtbl);
+	    lvtbl = local;
+	}
+    }
+    dyna_pop_1(parser);
+}
+
 static int
 dyna_in_block_gen(struct parser_params *parser)
 {

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

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