Commit b4d50175 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto Committed by GitHub

Merge pull request #3288 from bouk/chomp-bang-len

Get String length after args in String#chomp!
parents 54921aa6 76a1bdfa
...@@ -1235,11 +1235,13 @@ mrb_str_chomp_bang(mrb_state *mrb, mrb_value str) ...@@ -1235,11 +1235,13 @@ mrb_str_chomp_bang(mrb_state *mrb, mrb_value str)
char *p, *pp; char *p, *pp;
mrb_int rslen; mrb_int rslen;
mrb_int len; mrb_int len;
mrb_int argc;
struct RString *s = mrb_str_ptr(str); struct RString *s = mrb_str_ptr(str);
mrb_str_modify(mrb, s); mrb_str_modify(mrb, s);
argc = mrb_get_args(mrb, "|S", &rs);
len = RSTR_LEN(s); len = RSTR_LEN(s);
if (mrb_get_args(mrb, "|S", &rs) == 0) { if (argc == 0) {
if (len == 0) return mrb_nil_value(); if (len == 0) return mrb_nil_value();
smart_chomp: smart_chomp:
if (RSTR_PTR(s)[len-1] == '\n') { if (RSTR_PTR(s)[len-1] == '\n') {
......
...@@ -251,6 +251,19 @@ assert('String#chomp!', '15.2.10.5.10') do ...@@ -251,6 +251,19 @@ assert('String#chomp!', '15.2.10.5.10') do
assert_equal 'abc', e assert_equal 'abc', e
end end
assert('String#chomp! uses the correct length') do
class A
def to_str
$s.replace("AA")
"A"
end
end
$s = "AAA"
$s.chomp!(A.new)
assert_equal $s, "A"
end
assert('String#chop', '15.2.10.5.11') do assert('String#chop', '15.2.10.5.11') do
a = ''.chop a = ''.chop
b = 'abc'.chop b = 'abc'.chop
...@@ -683,4 +696,3 @@ assert('String#freeze') do ...@@ -683,4 +696,3 @@ assert('String#freeze') do
assert_raise(RuntimeError) { str.upcase! } assert_raise(RuntimeError) { str.upcase! }
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment