summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-11 10:17:13 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-11 10:17:13 +0000
commit4db3a06d6f18d69879340510b25ddd704a00dff0 (patch)
treee21b3ed74b6bb363af10434837ae29bdf79348e0 /parse.y
parent4a2867abe169c563e463f749923a7dbed640c409 (diff)
merge revision(s) 38235: [Backport #7255]
* 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/branches/ruby_1_9_3@38319 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 d36156fc05..a006b56357 100644
--- a/parse.y
+++ b/parse.y
@@ -5985,6 +5985,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)
{
@@ -6043,17 +6062,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;
}
@@ -6258,6 +6267,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());