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/