erb.rb: Use str_uplus instead of rb_str_dup

to skip unnecessary string allocation on frozen_string_literal: false.
str_uplus can bypass calling rb_str_dup when OBJ_FROZEN is true.

* Before

erb_render      1.064

* Afete

erb_render      0.909

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58916 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
k0kubun 2017-05-27 03:06:55 +00:00
parent 697c82b691
commit 2e75043a49

View File

@ -280,7 +280,7 @@ class ERB
# ERB#src: # ERB#src:
# #
# compiler = ERB::Compiler.new('<>') # compiler = ERB::Compiler.new('<>')
# compiler.pre_cmd = ["_erbout=''.dup"] # compiler.pre_cmd = ["_erbout=+''"]
# compiler.put_cmd = "_erbout.<<" # compiler.put_cmd = "_erbout.<<"
# compiler.insert_cmd = "_erbout.<<" # compiler.insert_cmd = "_erbout.<<"
# compiler.post_cmd = ["_erbout"] # compiler.post_cmd = ["_erbout"]
@ -291,7 +291,7 @@ class ERB
# <i>Generates</i>: # <i>Generates</i>:
# #
# #coding:UTF-8 # #coding:UTF-8
# _erbout=''.dup; _erbout.<< -"Got "; _erbout.<<(( obj ).to_s); _erbout.<< -"!\n"; _erbout # _erbout=+''; _erbout.<< -"Got "; _erbout.<<(( obj ).to_s); _erbout.<< -"!\n"; _erbout
# #
# By default the output is sent to the print method. For example: # By default the output is sent to the print method. For example:
# #
@ -861,7 +861,7 @@ class ERB
def set_eoutvar(compiler, eoutvar = '_erbout') def set_eoutvar(compiler, eoutvar = '_erbout')
compiler.put_cmd = "#{eoutvar}.<<" compiler.put_cmd = "#{eoutvar}.<<"
compiler.insert_cmd = "#{eoutvar}.<<" compiler.insert_cmd = "#{eoutvar}.<<"
compiler.pre_cmd = ["#{eoutvar} = ''.dup"] compiler.pre_cmd = ["#{eoutvar} = +''"]
compiler.post_cmd = [eoutvar] compiler.post_cmd = [eoutvar]
end end