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/