diff options
| author | KOBAYASHI Shuji <[email protected]> | 2019-08-19 19:18:52 +0900 |
|---|---|---|
| committer | KOBAYASHI Shuji <[email protected]> | 2019-08-19 19:18:52 +0900 |
| commit | 507dbf984ee27db79ced4d9dfd3554b9dcf37f0d (patch) | |
| tree | 92ae2c827182e5087f5357b21568c08f4c011ffc /src/string.c | |
| parent | 3fbd5f0029c24d43870a44b342ab9600d7c1fcca (diff) | |
| download | mruby-507dbf984ee27db79ced4d9dfd3554b9dcf37f0d.tar.gz mruby-507dbf984ee27db79ced4d9dfd3554b9dcf37f0d.zip | |
Move `mrb_str_pool` to `src/string.c` to use `str_init` family
Diffstat (limited to 'src/string.c')
| -rw-r--r-- | src/string.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/string.c b/src/string.c index 247ee78c2..72e14ede9 100644 --- a/src/string.c +++ b/src/string.c @@ -542,6 +542,29 @@ str_make_shared(mrb_state *mrb, struct RString *orig, struct RString *s) } mrb_value +mrb_str_pool(mrb_state *mrb, mrb_value str) +{ + struct RString *s = (struct RString *)mrb_malloc(mrb, sizeof(struct RString)); + struct RString *orig = mrb_str_ptr(str); + const char *p = RSTR_PTR(orig); + size_t len = (size_t)RSTR_LEN(orig); + + s->tt = MRB_TT_STRING; + s->c = mrb->string_class; + s->flags = 0; + + if (RSTR_NOFREE_P(orig)) { + str_init_nofree(s, p, len); + } + else { + str_init(mrb, s, p, len); + } + RSTR_SET_POOL_FLAG(s); + MRB_SET_FROZEN_FLAG(s); + return mrb_obj_value(s); +} + +mrb_value mrb_str_byte_subseq(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len) { struct RString *orig, *s; |
