erb.rb: preserve the behavior for invalid syntax

comment. Fix regression at r58948.

I even don't want to deprecate it because deprecation needs to lex all
embedded Ruby script using Ripper and it would be slow.  So Let me just
keep this behavior of Ruby 2.4. No change is the best compatibility.

This commit stopped using String#-@ because it's harmful for "ambiguous
first argument" warning if we really want to maintain this behavior.

[Bug #14243]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61497 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
k0kubun 2017-12-27 12:40:03 +00:00
Родитель e1f834f9b4
Коммит c46d3de0f5
2 изменённых файлов: 11 добавлений и 13 удалений

Просмотреть файл

@ -291,7 +291,7 @@ class ERB
# <i>Generates</i>:
#
# #coding:UTF-8
# _erbout=+''; _erbout.<<(-"Got "); _erbout.<<(( obj ).to_s); _erbout.<<(-"!\n"); _erbout
# _erbout=+''; _erbout.<< "Got ".freeze; _erbout.<<(( obj ).to_s); _erbout.<< "!\n".freeze; _erbout
#
# By default the output is sent to the print method. For example:
#
@ -302,7 +302,7 @@ class ERB
# <i>Generates</i>:
#
# #coding:UTF-8
# print(-"Got "); print(( obj ).to_s); print(-"!\n")
# print "Got ".freeze; print(( obj ).to_s); print "!\n".freeze
#
# == Evaluation
#
@ -576,17 +576,8 @@ class ERB
end
end
def content_dump(s) # :nodoc:
n = s.count("\n")
if n > 0
s.dump << "\n" * n
else
s.dump
end
end
def add_put_cmd(out, content)
out.push("#{@put_cmd}(-#{content_dump(content)})")
out.push("#{@put_cmd} #{content.dump}.freeze#{"\n" * content.count("\n")}")
end
def add_insert_cmd(out, content)
@ -668,7 +659,7 @@ class ERB
when '<%='
add_insert_cmd(out, content)
when '<%#'
# out.push("# #{content_dump(content)}")
# commented out
end
end

Просмотреть файл

@ -622,6 +622,13 @@ EOS
erb = @erb.new("<%= 1 %>")
assert_raise(TypeError) { erb.result_with_hash({ 1 => "1" }) }
end
# Bug#14243
def test_half_working_comment_backward_compatibility
assert_nothing_raised do
@erb.new("<% # comment %>\n").result
end
end
end
class TestERBCoreWOStrScan < TestERBCore