From 46c9260305a7acc7ee2e1bd1d2441b56cee89f3f Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Mon, 11 Jun 2012 01:39:45 +0900 Subject: Add test for slice of shared string. --- test/t/string.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/t/string.rb b/test/t/string.rb index 964ec0e63..d7182fc38 100644 --- a/test/t/string.rb +++ b/test/t/string.rb @@ -256,6 +256,9 @@ assert('String#slice', '15.2.10.5.34') do d1 = 'abc'.slice(0, 0) e1 = 'abc'.slice(1, 2) + # slice of shared string + e11 = e1.slice(0) + # args is RegExp # TODO SEGFAULT ATM @@ -265,7 +268,7 @@ assert('String#slice', '15.2.10.5.34') do a == 'a' and b == 'c' and c == nil and d == nil and a1 == nil and b1 == nil and c1 == nil and d1 == '' and - e1 == 'bc' and + e1 == 'bc' and e11 == 'b' and a3 == 'bc' and b3 == nil end -- cgit v1.2.3 From 3bb09f99284d6da3ee5192fb4636ad73981ad1f1 Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Mon, 11 Jun 2012 01:56:46 +0900 Subject: string.subseq should create new string based on 'ptr' not on 'aux.shared'. --- src/string.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/string.c b/src/string.c index e955b3f22..67cc32137 100644 --- a/src/string.c +++ b/src/string.c @@ -1199,14 +1199,14 @@ mrb_str_eql(mrb_state *mrb, mrb_value self) static mrb_value mrb_str_subseq(mrb_state *mrb, mrb_value str, int beg, int len) { - struct RString *s; + struct RString *orig, *s; struct mrb_shared_string *shared; - s = mrb_str_ptr(str); - str_make_shared(mrb, s); - shared = s->aux.shared; + orig = mrb_str_ptr(str); + str_make_shared(mrb, orig); + shared = orig->aux.shared; s = mrb_obj_alloc_string(mrb); - s->ptr = shared->ptr + beg; + s->ptr = orig->ptr + beg; s->len = len; s->aux.shared = shared; s->flags |= MRB_STR_SHARED; -- cgit v1.2.3