diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-04-18 03:32:06 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-04-18 03:32:06 +0000 |
commit | cfab29b7db7f3ea63a339946e2959f7118eec7fd (patch) | |
tree | 547c22fe4f103b7872a5806d4284ea8e85053f56 /parse.y | |
parent | 4d82ba512c793c2c11a54a1bb1f5ead41e2f8d92 (diff) | |
download | ruby-cfab29b7db7f3ea63a339946e2959f7118eec7fd.tar.gz |
* parse.y (string_content): preserve cond_stack and cmdarg_stack.
[ruby-core:29579]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27387 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 20 |
1 files changed, 12 insertions, 8 deletions
@@ -4030,18 +4030,26 @@ string_content : tSTRING_CONTENT } | tSTRING_DBEG { + $<num>1 = cond_stack; + $<num>$ = cmdarg_stack; + cond_stack = 0; + cmdarg_stack = 0; + } + { $<node>$ = lex_strterm; lex_strterm = 0; lex_state = EXPR_BEG; } compstmt '}' { - lex_strterm = $<node>2; + cond_stack = $<num>1; + cmdarg_stack = $<num>2; + lex_strterm = $<node>3; /*%%%*/ - if ($3) $3->flags &= ~NODE_FL_NEWLINE; - $$ = new_evstr($3); + if ($4) $4->flags &= ~NODE_FL_NEWLINE; + $$ = new_evstr($4); /*% - $$ = dispatch1(string_embexpr, $3); + $$ = dispatch1(string_embexpr, $4); %*/ } ; @@ -5869,8 +5877,6 @@ parser_parse_string(struct parser_params *parser, NODE *quote) pushback(c); return tSTRING_DVAR; case '{': - COND_PUSH(0); - CMDARG_PUSH(0); return tSTRING_DBEG; } tokadd('#'); @@ -6068,8 +6074,6 @@ parser_here_document(struct parser_params *parser, NODE *here) pushback(c); return tSTRING_DVAR; case '{': - COND_PUSH(0); - CMDARG_PUSH(0); return tSTRING_DBEG; } tokadd('#'); |