summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-11-23 23:31:36 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-11-23 23:31:36 +0900
commit6d00974a983399d12e6a38e9ea2c4c35ac7b6fd5 (patch)
treefd141ac7ea60507d2062878ec22d920139df1f6f
parent2c04f4029fba8adf19bc93ba913a9b257028dacf (diff)
parent0a0afa7c6a6800be61b53404fea33dcce339d0ea (diff)
downloadmruby-6d00974a983399d12e6a38e9ea2c4c35ac7b6fd5.tar.gz
mruby-6d00974a983399d12e6a38e9ea2c4c35ac7b6fd5.zip
Merge pull request #2649 from tmtm/fix-string-slice
Fix String#slice! raise TypeError or return invalid value.
-rw-r--r--mrbgems/mruby-string-ext/mrblib/string.rb7
1 files changed, 4 insertions, 3 deletions
diff --git a/mrbgems/mruby-string-ext/mrblib/string.rb b/mrbgems/mruby-string-ext/mrblib/string.rb
index b8cb93199..34744cc38 100644
--- a/mrbgems/mruby-string-ext/mrblib/string.rb
+++ b/mrbgems/mruby-string-ext/mrblib/string.rb
@@ -181,6 +181,7 @@ class String
ed = arg1.end
beg += self.size if beg < 0
ed += self.size if ed < 0
+ ed -= 1 if arg1.exclude_end?
validated = true
elsif arg1.kind_of?(String)
validated = true
@@ -198,18 +199,18 @@ class String
unless str == nil || str == ""
if arg1 != nil && arg2 !=nil
idx = arg1 >= 0 ? arg1 : self.size+arg1
- str2 = self[0...idx] + self[idx+arg2..-1]
+ str2 = self[0...idx] + self[idx+arg2..-1].to_s
else
if arg1.kind_of?(Range)
idx = beg >= 0 ? beg : self.size+beg
idx2 = ed>= 0 ? ed : self.size+ed
- str2 = self[0...idx] + self[idx2+1..-1]
+ str2 = self[0...idx] + self[idx2+1..-1].to_s
elsif arg1.kind_of?(String)
idx = self.index(arg1)
str2 = self[0...idx] + self[idx+arg1.size..-1] unless idx == nil
else
idx = arg1 >= 0 ? arg1 : self.size+arg1
- str2 = self[0...idx] + self[idx+1..-1]
+ str2 = self[0...idx] + self[idx+1..-1].to_s
end
end
self.replace(str2) unless str2 == nil