string.rb (each_line): use byteindex for performance; fix #4522

Character-wise String#index method calculate UTF-8 character width
numerous times if the string is long.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2022-05-17 07:18:44 +09:00
parent 960da4ded4
commit f8b9464118
+3 -3
View File
@@ -30,10 +30,10 @@ class String
self_len = length
sep_len = separator.length
while (pointer = string.index(separator, start))
while (pointer = string.byteindex(separator, start))
pointer += sep_len
pointer += 1 while paragraph_mode && string[pointer] == "\n"
block.call(string[start, pointer - start])
pointer += 1 while paragraph_mode && string.getbyte(pointer) == 10 # 10 == \n
block.call(string.byteslice(start, pointer - start))
start = pointer
end
return self if start == self_len