From 0d75b7f99e46066e74a2af062a425d1d88cddb04 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 15 Jan 2016 07:12:46 +0000 Subject: [PATCH] parse.y: should not deent concatenated string * parse.y (string1): reset heredoc indent fore each string leteral so that concatenated string would not be dedented. [ruby-core:72857] [Bug #11990] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53541 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ parse.y | 2 +- test/ruby/test_syntax.rb | 9 +++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index a0da953bb1..36380df414 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Fri Jan 15 16:12:10 2016 Nobuyoshi Nakada + + * parse.y (string1): reset heredoc indent fore each string leteral + so that concatenated string would not be dedented. + [ruby-core:72857] [Bug #11990] + Fri Jan 15 09:25:07 2016 SHIBATA Hiroshi * common.mk: test-sample was changed to test-basic. diff --git a/parse.y b/parse.y index aa37439498..cddd97114b 100644 --- a/parse.y +++ b/parse.y @@ -3912,7 +3912,6 @@ strings : string else { node = evstr2dstr(node); } - heredoc_indent = 0; $$ = node; /*% $$ = $1; @@ -3935,6 +3934,7 @@ string : tCHAR string1 : tSTRING_BEG string_contents tSTRING_END { heredoc_dedent($2); + heredoc_indent = 0; /*%%%*/ $$ = $2; /*% diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index 1daf7b2d91..a81e489222 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -580,6 +580,15 @@ e" assert_dedented_heredoc(expect, result) end + def test_dedented_heredoc_with_concatenation + bug11990 = '[ruby-core:72857] [Bug #11990] concatenated string should not be dedented' + %w[eos "eos" 'eos'].each do |eos| + assert_equal("x\n y", + eval("<<~#{eos} ' y'\n x\neos\n"), + "#{bug11990} with #{eos}") + end + end + def test_lineno_after_heredoc bug7559 = '[ruby-dev:46737]' expected, _, actual = __LINE__, <