summaryrefslogtreecommitdiffhomepage
path: root/src/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/string.c')
-rw-r--r--src/string.c41
1 files changed, 7 insertions, 34 deletions
diff --git a/src/string.c b/src/string.c
index 9867d014a..e92d76b18 100644
--- a/src/string.c
+++ b/src/string.c
@@ -488,13 +488,13 @@ str_new4(mrb_state *mrb, enum mrb_vtype ttype, mrb_value str)
RSTRING(str2)->buf = RSTRING_PTR(str);
if (MRB_STR_SHARED_P(str)) {
- mrb_value shared = RSTRING_SHARED(str);
+ struct RString *shared = RSTRING_SHARED(str);
FL_SET(str2, MRB_STR_SHARED);
RSTRING_SHARED(str2) = shared;
}
else {
FL_SET(str, MRB_STR_SHARED);
- RSTRING_SHARED(str) = str2;
+ RSTRING_SHARED(str) = mrb_str_ptr(str2);
}
mrb_enc_cr_str_exact_copy(mrb, str2, str);
return str2;
@@ -2174,7 +2174,7 @@ str_replace_shared(mrb_state *mrb, mrb_value str2, mrb_value str)
str = mrb_str_new_frozen(mrb, str);
RSTRING(str2)->len = RSTRING_LEN(str);
RSTRING(str2)->buf = RSTRING_PTR(str);
- RSTRING_SHARED(str2) = str;
+ RSTRING_SHARED(str2) = mrb_str_ptr(str);
FL_SET(str2, MRB_STR_SHARED);
mrb_enc_cr_str_exact_copy(mrb, str2, str);
@@ -2209,9 +2209,9 @@ mrb_str_new_frozen(mrb_state *mrb, mrb_value orig)
klass = mrb_obj_class(mrb, orig);
- if (MRB_STR_SHARED_P(orig) && !mrb_nil_p(RSTRING_SHARED(orig))) {
+ if (MRB_STR_SHARED_P(orig) && RSTRING_SHARED(orig)) {
long ofs;
- ofs = RSTRING_LEN(str) - RSTRING_LEN(orig);
+ ofs = RSTRING_LEN(str) - RSTRING_SHARED(orig)->len;
#ifdef INCLUDE_ENCODING
if ((ofs > 0) || (klass != RBASIC(str)->c) ||
ENCODING_GET(mrb, str) != ENCODING_GET(mrb, orig)) {
@@ -2765,9 +2765,9 @@ str_replace(mrb_state *mrb, mrb_value str, mrb_value str2)
len = RSTRING_LEN(str2);
if (MRB_STR_SHARED_P(str2)) {
- mrb_value shared = RSTRING_SHARED(str2);
+ struct RString *shared = RSTRING_SHARED(str2);
RSTRING_LEN(str) = len;
- RSTRING_PTR(str) = RSTRING_PTR(str2);
+ RSTRING_PTR(str) = shared->buf;
FL_SET(str, MRB_STR_SHARED);
RSTRING_SHARED(str) = shared;
}
@@ -4729,35 +4729,8 @@ mrb_lastline_set(mrb_value val)
mrb_value
mrb_str_append(mrb_state *mrb, mrb_value str, mrb_value str2)
{
-#ifdef INCLUDE_ENCODING
- mrb_encoding *enc;
- int cr, cr2;
-#endif //INCLUDE_ENCODING
-
- //StringValue(str2);
mrb_string_value(mrb, &str2);
- if (RSTRING_LEN(str2) > 0 /*&& STR_ASSOC_P(str)*/) {
- long len = RSTRING_LEN(str)+RSTRING_LEN(str2);
-#ifdef INCLUDE_ENCODING
- enc = mrb_enc_check(mrb, str, str2);
- cr = ENC_CODERANGE(str);
- if ((cr2 = ENC_CODERANGE(str2)) > cr) cr = cr2;
-#endif //INCLUDE_ENCODING
- mrb_str_modify(mrb, str);
- REALLOC_N(mrb, RSTRING(str)->buf, char, len+1);
- memcpy(RSTRING(str)->buf + RSTRING(str)->len,
- RSTRING_PTR(str2), RSTRING_LEN(str2)+1);
- RSTRING(str)->len = len;
- mrb_enc_associate(mrb, str, enc);
- ENC_CODERANGE_SET(str, cr);
-
- return str;
- }
-#ifdef INCLUDE_ENCODING
return mrb_str_buf_append(mrb, str, str2);
-#else
- return str;
-#endif //INCLUDE_ENCODING
}
void