aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-12-15 12:58:59 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-12-15 12:58:59 +0000
commit25daea49d150671b8ee1d017178e553c4c0664fe (patch)
tree093b660451676e23f0c6d87b629d9e67d1824756
parent206c0c29ca4b3653da0bc879f881947b1b820a0e (diff)
downloadruby-25daea49d150671b8ee1d017178e553c4c0664fe.tar.gz
parse.y: newline in heredoc identifier
* parse.y (parser_heredoc_identifier): warn newline in here document identifier. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57085 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--parse.y5
-rw-r--r--test/ruby/test_syntax.rb6
2 files changed, 11 insertions, 0 deletions
diff --git a/parse.y b/parse.y
index 1935160fb2..cf05a9c891 100644
--- a/parse.y
+++ b/parse.y
@@ -6406,6 +6406,7 @@ parser_heredoc_identifier(struct parser_params *parser)
int c = nextc(), term, func = 0;
int token = tSTRING_BEG;
long len;
+ int newline = 0;
if (c == '-') {
c = nextc();
@@ -6432,11 +6433,15 @@ parser_heredoc_identifier(struct parser_params *parser)
term = c;
while ((c = nextc()) != -1 && c != term) {
if (tokadd_mbchar(c) == -1) return 0;
+ if (c == '\n') newline = 1;
}
if (c == -1) {
compile_error(PARSER_ARG "unterminated here document identifier");
return 0;
}
+ if (newline) {
+ rb_warn0("here document identifier contains newline");
+ }
break;
default:
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb
index ad1f0d8981..4c4e840e5e 100644
--- a/test/ruby/test_syntax.rb
+++ b/test/ruby/test_syntax.rb
@@ -745,6 +745,12 @@ eom
assert_syntax_error("puts <<""EOS\n""ng\n""EOS\r""NO\n", /can't find string "EOS" anywhere before EOF/)
end
+ def test_heredoc_newline
+ assert_warn(/contains newline/) do
+ eval("<<\"EOS\n\"\nEOS\n")
+ end
+ end
+
def test__END___cr
assert_syntax_error("__END__\r<<<<<\n", /unexpected <</)
end