summaryrefslogtreecommitdiffhomepage
path: root/src/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/string.c')
-rw-r--r--src/string.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/src/string.c b/src/string.c
index 6fa9271e1..fc5d43612 100644
--- a/src/string.c
+++ b/src/string.c
@@ -2523,17 +2523,6 @@ mrb_str_bytes(mrb_state *mrb, mrb_value str)
return a;
}
-static inline void
-str_discard(mrb_state *mrb, mrb_value str) {
- struct RString *s = mrb_str_ptr(str);
-
- if (!STR_SHARED_P(s) && !STR_EMBED_P(s) && ((s->flags & MRB_STR_NOFREE) == 0)) {
- mrb_free(mrb, s->as.heap.ptr);
- RSTRING(str)->as.heap.ptr = 0;
- RSTRING(str)->as.heap.len = 0;
- }
-}
-
/*
* call-seq:
* string.clear -> string
@@ -2548,7 +2537,11 @@ mrb_str_clear(mrb_state *mrb, mrb_value str)
{
struct RString *s = mrb_str_ptr(str);
- str_discard(mrb, str);
+ if (!STR_SHARED_P(s) && !STR_EMBED_P(s) && ((s->flags & MRB_STR_NOFREE) == 0)) {
+ mrb_free(mrb, s->as.heap.ptr);
+ RSTRING(str)->as.heap.ptr = 0;
+ RSTRING(str)->as.heap.len = 0;
+ }
STR_SET_EMBED_FLAG(s);
STR_SET_EMBED_LEN(s, 0);
RSTRING_PTR(str)[0] = '\0';