summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-06 08:29:16 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-06 08:29:16 +0000
commitbd0c636211bb3063d9633d955f8807a1d9490048 (patch)
tree29e013105b433de1cb31ab3c9e98da07a7cb6cd9 /parse.y
parent68a44cd169e5c9c1d2150e1f3932da8c4cb2c013 (diff)
parse.y: flush string content
* parse.y (parser_here_document): flush string content between new line and :string_embexpr. [ruby-core:48703] [Bug #7255] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38235 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y32
1 files changed, 21 insertions, 11 deletions
diff --git a/parse.y b/parse.y
index 622f37c1bd..d2b6f94c78 100644
--- a/parse.y
+++ b/parse.y
@@ -6107,6 +6107,25 @@ parser_tokadd_string(struct parser_params *parser,
#define NEW_STRTERM(func, term, paren) \
rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
+#ifdef RIPPER
+static void
+ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
+{
+ if (!NIL_P(parser->delayed)) {
+ ptrdiff_t len = lex_p - parser->tokp;
+ if (len > 0) {
+ rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
+ }
+ ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
+ parser->tokp = lex_p;
+ }
+}
+
+#define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
+#else
+#define flush_string_content(enc) ((void)(enc))
+#endif
+
static int
parser_parse_string(struct parser_params *parser, NODE *quote)
{
@@ -6166,17 +6185,7 @@ parser_parse_string(struct parser_params *parser, NODE *quote)
tokfix();
set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
-
-#ifdef RIPPER
- if (!NIL_P(parser->delayed)) {
- ptrdiff_t len = lex_p - parser->tokp;
- if (len > 0) {
- rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
- }
- ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
- parser->tokp = lex_p;
- }
-#endif
+ flush_string_content(enc);
return tSTRING_CONTENT;
}
@@ -6382,6 +6391,7 @@ parser_here_document(struct parser_params *parser, NODE *here)
}
if (c != '\n') {
set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
+ flush_string_content(enc);
return tSTRING_CONTENT;
}
tokadd(nextc());