1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

merge revision(s) 53541,53555,53570: [Backport #11990]

* parse.y (string1): reset heredoc indent fore each string leteral
	  so that concatenated string would not be dedented.
	  [ruby-core:72857] [Bug #11990]

	* parse.y (xstring): reset heredoc indent after dedenting,
	  so that following string literal would not be dedented.
	  [ruby-core:72857] [Bug #11990]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@54399 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2016-03-29 12:26:12 +00:00
parent ba02d4b03b
commit a61019eee3
4 changed files with 43 additions and 6 deletions

View file

@ -1,3 +1,15 @@
Tue Mar 29 21:22:22 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (xstring): reset heredoc indent after dedenting,
so that following string literal would not be dedented.
[ruby-core:72857] [Bug #11990]
Tue Mar 29 21:22:22 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (string1): reset heredoc indent fore each string leteral
so that concatenated string would not be dedented.
[ruby-core:72857] [Bug #11990]
Tue Mar 29 21:18:09 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (parser_here_document): update indent for each line in

View file

@ -3907,7 +3907,6 @@ strings : string
else {
node = evstr2dstr(node);
}
heredoc_indent = 0;
$$ = node;
/*%
$$ = $1;
@ -3930,6 +3929,7 @@ string : tCHAR
string1 : tSTRING_BEG string_contents tSTRING_END
{
heredoc_dedent($2);
heredoc_indent = 0;
/*%%%*/
$$ = $2;
/*%
@ -3945,6 +3945,7 @@ xstring : tXSTRING_BEG xstring_contents tSTRING_END
/*%
%*/
heredoc_dedent($2);
heredoc_indent = 0;
/*%%%*/
if (!node) {
node = NEW_XSTR(STR_NEW0());

View file

@ -2,6 +2,14 @@
require 'test/unit'
class TestSyntax < Test::Unit::TestCase
using Module.new {
refine(Object) do
def `(s) #`
s
end
end
}
def assert_syntax_files(test)
srcdir = File.expand_path("../../..", __FILE__)
srcdir = File.join(srcdir, test)
@ -493,10 +501,13 @@ e"
end
def assert_dedented_heredoc(expect, result, mesg = "")
%w[eos "eos" 'eos'].each do |eos|
assert_equal(eval("<<-#{eos}\n#{expect}eos\n"),
eval("<<~#{eos}\n#{result}eos\n"),
message(mesg) {"with #{eos}"})
all_assertions(mesg) do |a|
%w[eos "eos" 'eos' `eos`].each do |eos|
a.for(eos) do
assert_equal(eval("<<-#{eos}\n#{expect}eos\n"),
eval("<<~#{eos}\n#{result}eos\n"))
end
end
end
end
@ -580,6 +591,19 @@ 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
%w[eos "eos" 'eos' `eos`].each do |eos|
_, expect = eval("[<<~#{eos}, ' x']\n"" y\n""eos\n")
assert_equal(' x', expect, bug11990)
end
end
def test_lineno_after_heredoc
bug7559 = '[ruby-dev:46737]'
expected, _, actual = __LINE__, <<eom, __LINE__

View file

@ -1,6 +1,6 @@
#define RUBY_VERSION "2.3.0"
#define RUBY_RELEASE_DATE "2016-03-29"
#define RUBY_PATCHLEVEL 48
#define RUBY_PATCHLEVEL 49
#define RUBY_RELEASE_YEAR 2016
#define RUBY_RELEASE_MONTH 3