diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-03 09:12:36 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-03 09:12:36 +0000 |
commit | 4fcb855ff382db0f0f8d849b5af48a652bd3494a (patch) | |
tree | 5378dfdbb0b91c921215b5ee16bea3da5e5b5e14 | |
parent | b67fbc0789c5f9f3c84406a95ca8a0ccc2d77cdc (diff) |
merges r26055 from trunk into ruby_1_9_1. This fixies #3164.
--
* parse.y (dyna_pop_gen): pop dvars. [ruby-dev:39861]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@27596 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | bootstraptest/test_syntax.rb | 7 | ||||
-rw-r--r-- | parse.y | 19 |
3 files changed, 26 insertions, 4 deletions
@@ -1,3 +1,7 @@ +Thu Dec 10 01:12:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * parse.y (dyna_pop_gen): pop dvars. [ruby-dev:39861] + Sat Dec 5 13:19:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> * configure.in: default ac_cv_prog_CC to CC. diff --git a/bootstraptest/test_syntax.rb b/bootstraptest/test_syntax.rb index 2e8639b3f4..619a4cbdb1 100644 --- a/bootstraptest/test_syntax.rb +++ b/bootstraptest/test_syntax.rb @@ -877,3 +877,10 @@ assert_normal_exit %q{ end end }, bug2415 + +assert_normal_exit %q{ + a { + b {|c.d| } + e + } +}, '[ruby-dev:39861]' @@ -8951,13 +8951,10 @@ dyna_push_gen(struct parser_params *parser) } 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); @@ -8966,6 +8963,20 @@ dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs) 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) { |