mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
string.rb: avoid internal __to_str calls.
`__to_str` was a mere type check method despite its name.
This commit is contained in:
+9
-16
@@ -43,12 +43,12 @@ class String
|
||||
end
|
||||
|
||||
# private method for gsub/sub
|
||||
def __sub_replace(pre, m, post)
|
||||
def __sub_replace(rep, pre, m, post)
|
||||
s = ""
|
||||
i = 0
|
||||
while j = index("\\", i)
|
||||
break if j == length-1
|
||||
t = case self[j+1]
|
||||
while j = rep.index("\\", i)
|
||||
break if j == rep.length-1
|
||||
t = case rep[j+1]
|
||||
when "\\"
|
||||
"\\"
|
||||
when "`"
|
||||
@@ -60,12 +60,12 @@ class String
|
||||
when "1", "2", "3", "4", "5", "6", "7", "8", "9"
|
||||
""
|
||||
else
|
||||
self[j, 2]
|
||||
rep[j, 2]
|
||||
end
|
||||
s += self[i, j-i] + t
|
||||
s += rep[i, j-i] + t
|
||||
i = j + 2
|
||||
end
|
||||
s + self[i, length-i]
|
||||
s + rep[i, rep.length-i]
|
||||
end
|
||||
|
||||
##
|
||||
@@ -84,9 +84,6 @@ class String
|
||||
if args.length == 2 && block
|
||||
block = nil
|
||||
end
|
||||
if !replace.nil? || !block
|
||||
replace.__to_str
|
||||
end
|
||||
offset = 0
|
||||
result = []
|
||||
while found = index(pattern, offset)
|
||||
@@ -95,7 +92,7 @@ class String
|
||||
result << if block
|
||||
block.call(pattern).to_s
|
||||
else
|
||||
replace.__sub_replace(self[0, found], pattern, self[offset..-1] || "")
|
||||
__sub_replace(replace, self[0, found], pattern, self[offset..-1] || "")
|
||||
end
|
||||
if plen == 0
|
||||
result << self[offset, 1]
|
||||
@@ -144,13 +141,9 @@ class String
|
||||
end
|
||||
|
||||
pattern, replace = *args
|
||||
pattern.__to_str
|
||||
if args.length == 2 && block
|
||||
block = nil
|
||||
end
|
||||
unless block
|
||||
replace.__to_str
|
||||
end
|
||||
result = []
|
||||
this = dup
|
||||
found = index(pattern)
|
||||
@@ -160,7 +153,7 @@ class String
|
||||
result << if block
|
||||
block.call(pattern).to_s
|
||||
else
|
||||
replace.__sub_replace(this[0, found], pattern, this[offset..-1] || "")
|
||||
__sub_replace(replace, this[0, found], pattern, this[offset..-1] || "")
|
||||
end
|
||||
result << this[offset..-1] if offset < length
|
||||
result.join
|
||||
|
||||
Reference in New Issue
Block a user