diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/codegen.c | 2 | ||||
| -rw-r--r-- | src/load.c | 2 | ||||
| -rw-r--r-- | src/state.c | 22 | ||||
| -rw-r--r-- | src/string.c | 22 |
4 files changed, 24 insertions, 24 deletions
diff --git a/src/codegen.c b/src/codegen.c index f3e6e2f0c..7b7fc39c5 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -440,7 +440,7 @@ new_lit(codegen_scope *s, mrb_value val) switch (mrb_type(val)) { case MRB_TT_STRING: - *pv = mrb_str_dup_static(s->mrb, val); + *pv = mrb_str_pool(s->mrb, val); break; case MRB_TT_FLOAT: diff --git a/src/load.c b/src/load.c index 4f7aeb2d5..f8dd5b525 100644 --- a/src/load.c +++ b/src/load.c @@ -110,7 +110,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, uint32_t *len) break; case IREP_TT_STRING: - irep->pool[i] = mrb_str_dup_static(mrb, s); + irep->pool[i] = mrb_str_pool(mrb, s); break; default: diff --git a/src/state.c b/src/state.c index 52a1541cb..f8a97cb61 100644 --- a/src/state.c +++ b/src/state.c @@ -147,6 +147,28 @@ mrb_irep_free(mrb_state *mrb, mrb_irep *irep) mrb_free(mrb, irep); } +mrb_value +mrb_str_pool(mrb_state *mrb, mrb_value str) +{ + struct RString *s = mrb_str_ptr(str); + struct RString *ns; + mrb_int len; + + ns = (struct RString *)mrb_malloc(mrb, sizeof(struct RString)); + ns->tt = MRB_TT_STRING; + ns->c = mrb->string_class; + + len = s->len; + ns->len = len; + ns->ptr = (char *)mrb_malloc(mrb, (size_t)len+1); + if (s->ptr) { + memcpy(ns->ptr, s->ptr, len); + } + ns->ptr[len] = '\0'; + + return mrb_obj_value(ns); +} + void mrb_free_context(mrb_state *mrb, struct mrb_context *c) { diff --git a/src/string.c b/src/string.c index 6ec98c778..af70e8e45 100644 --- a/src/string.c +++ b/src/string.c @@ -734,28 +734,6 @@ mrb_str_dup(mrb_state *mrb, mrb_value str) return mrb_str_new(mrb, s->ptr, s->len); } -mrb_value -mrb_str_dup_static(mrb_state *mrb, mrb_value str) -{ - struct RString *s = mrb_str_ptr(str); - struct RString *ns; - mrb_int len; - - ns = (struct RString *)mrb_malloc(mrb, sizeof(struct RString)); - ns->tt = MRB_TT_STRING; - ns->c = mrb->string_class; - - len = s->len; - ns->len = len; - ns->ptr = (char *)mrb_malloc(mrb, (size_t)len+1); - if (s->ptr) { - memcpy(ns->ptr, s->ptr, len); - } - ns->ptr[len] = '\0'; - - return mrb_obj_value(ns); -} - static mrb_value mrb_str_aref(mrb_state *mrb, mrb_value str, mrb_value indx) { |
