summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y16
1 files changed, 9 insertions, 7 deletions
diff --git a/parse.y b/parse.y
index bf7ac0317c..8a15186c8a 100644
--- a/parse.y
+++ b/parse.y
@@ -2183,7 +2183,8 @@ here_document(term)
char *eos;
int len;
VALUE str, line;
- char *save_beg, *save_end, *save_lexp;
+ VALUE lastline_save;
+ int offset_save;
NODE *list = 0;
int linesave = sourceline;
@@ -2212,9 +2213,8 @@ here_document(term)
break;
}
tokfix();
- save_lexp = lex_p;
- save_beg = lex_pbeg;
- save_end = lex_pend;
+ lastline_save = lex_lastline;
+ offset_save = lex_p - lex_pbeg;
eos = strdup(tok());
len = strlen(eos);
@@ -2262,9 +2262,11 @@ here_document(term)
}
}
free(eos);
- lex_p = save_lexp;
- lex_pbeg = save_beg;
- lex_pend = save_end;
+ lex_lastline = lastline_save;
+ lex_pbeg = RSTRING(lex_lastline)->ptr;
+ lex_pend = lex_pbeg + RSTRING(lex_lastline)->len;
+ lex_p = lex_pbeg + offset_save;
+
lex_state = EXPR_END;
heredoc_end = sourceline;
sourceline = linesave;