diff options
| -rw-r--r-- | doc/guides/gc-arena-howto.md | 10 | ||||
| -rw-r--r-- | include/mruby/string.h | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-sprintf/src/sprintf.c | 2 | ||||
| -rw-r--r-- | src/array.c | 2 | ||||
| -rw-r--r-- | src/class.c | 8 | ||||
| -rw-r--r-- | src/fmt_fp.c | 2 | ||||
| -rw-r--r-- | src/object.c | 2 | ||||
| -rw-r--r-- | src/string.c | 22 | ||||
| -rw-r--r-- | src/variable.c | 4 | ||||
| -rw-r--r-- | src/vm.c | 2 |
10 files changed, 31 insertions, 24 deletions
diff --git a/doc/guides/gc-arena-howto.md b/doc/guides/gc-arena-howto.md index d6659c831..aff7360e9 100644 --- a/doc/guides/gc-arena-howto.md +++ b/doc/guides/gc-arena-howto.md @@ -114,14 +114,14 @@ inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list) mrb_ary_push(mrb, list, ary); - arystr = mrb_str_buf_new(mrb, 64); - mrb_str_buf_cat(mrb, arystr, head, sizeof(head)); + arystr = mrb_str_new_capa(mrb, 64); + mrb_str_cat(mrb, arystr, head, sizeof(head)); for(i=0; i<RARRAY_LEN(ary); i++) { int ai = mrb_gc_arena_save(mrb); if (i > 0) { - mrb_str_buf_cat(mrb, arystr, sep, sizeof(sep)); + mrb_str_cat(mrb, arystr, sep, sizeof(sep)); } if (mrb_array_p(RARRAY_PTR(ary)[i])) { s = inspect_ary(mrb, RARRAY_PTR(ary)[i], list); @@ -129,11 +129,11 @@ inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list) else { s = mrb_inspect(mrb, RARRAY_PTR(ary)[i]); } - mrb_str_buf_cat(mrb, arystr, RSTRING_PTR(s), RSTRING_LEN(s)); + mrb_str_cat(mrb, arystr, RSTRING_PTR(s), RSTRING_LEN(s)); mrb_gc_arena_restore(mrb, ai); } - mrb_str_buf_cat(mrb, arystr, tail, sizeof(tail)); + mrb_str_cat(mrb, arystr, tail, sizeof(tail)); mrb_ary_pop(mrb, list); return arystr; diff --git a/include/mruby/string.h b/include/mruby/string.h index c3fbb063d..df6fb25c3 100644 --- a/include/mruby/string.h +++ b/include/mruby/string.h @@ -304,6 +304,7 @@ MRB_API mrb_value mrb_str_substr(mrb_state *mrb, mrb_value str, mrb_int beg, mrb MRB_API mrb_value mrb_string_type(mrb_state *mrb, mrb_value str); MRB_API mrb_value mrb_check_string_type(mrb_state *mrb, mrb_value str); +MRB_API mrb_value mrb_str_new_capa(mrb_state *mrb, size_t capa); MRB_API mrb_value mrb_str_buf_new(mrb_state *mrb, size_t capa); MRB_API const char *mrb_string_value_cstr(mrb_state *mrb, mrb_value *ptr); diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 6a7c0bd7c..d20699247 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -556,7 +556,7 @@ mrb_str_format(mrb_state *mrb, int argc, const mrb_value *argv, mrb_value fmt) end = p + RSTRING_LEN(fmt); blen = 0; bsiz = 120; - result = mrb_str_buf_new(mrb, bsiz); + result = mrb_str_new_capa(mrb, bsiz); buf = RSTRING_PTR(result); memset(buf, 0, bsiz); diff --git a/src/array.c b/src/array.c index 9f7c27df0..c6cca3816 100644 --- a/src/array.c +++ b/src/array.c @@ -1093,7 +1093,7 @@ join_ary(mrb_state *mrb, mrb_value ary, mrb_value sep, mrb_value list) mrb_ary_push(mrb, list, ary); - result = mrb_str_buf_new(mrb, 64); + result = mrb_str_new_capa(mrb, 64); for (i=0; i<RARRAY_LEN(ary); i++) { if (i > 0 && !mrb_nil_p(sep)) { diff --git a/src/class.c b/src/class.c index 97a4c9c57..9bba28684 100644 --- a/src/class.c +++ b/src/class.c @@ -1332,7 +1332,7 @@ mrb_mod_attr_reader(mrb_state *mrb, mrb_value mod) method = to_sym(mrb, argv[i]); name = mrb_sym2str(mrb, method); - str = mrb_str_buf_new(mrb, RSTRING_LEN(name)+1); + str = mrb_str_new_capa(mrb, RSTRING_LEN(name)+1); mrb_str_cat_lit(mrb, str, "@"); mrb_str_cat_str(mrb, str, name); sym = mrb_intern_str(mrb, str); @@ -1374,7 +1374,7 @@ mrb_mod_attr_writer(mrb_state *mrb, mrb_value mod) /* prepare iv name (@name) */ name = mrb_sym2str(mrb, method); - str = mrb_str_buf_new(mrb, RSTRING_LEN(name)+1); + str = mrb_str_new_capa(mrb, RSTRING_LEN(name)+1); mrb_str_cat_lit(mrb, str, "@"); mrb_str_cat_str(mrb, str, name); sym = mrb_intern_str(mrb, str); @@ -1382,7 +1382,7 @@ mrb_mod_attr_writer(mrb_state *mrb, mrb_value mod) attr = mrb_symbol_value(sym); /* prepare method name (name=) */ - str = mrb_str_buf_new(mrb, RSTRING_LEN(str)); + str = mrb_str_new_capa(mrb, RSTRING_LEN(str)); mrb_str_cat_str(mrb, str, name); mrb_str_cat_lit(mrb, str, "="); method = mrb_intern_str(mrb, str); @@ -1766,7 +1766,7 @@ mrb_mod_to_s(mrb_state *mrb, mrb_value klass) struct RClass *c; mrb_value path; - str = mrb_str_buf_new(mrb, 32); + str = mrb_str_new_capa(mrb, 32); c = mrb_class_ptr(klass); path = mrb_class_path(mrb, c); diff --git a/src/fmt_fp.c b/src/fmt_fp.c index 440a50071..c1c2ad703 100644 --- a/src/fmt_fp.c +++ b/src/fmt_fp.c @@ -364,7 +364,7 @@ mrb_float_to_str(mrb_state *mrb, mrb_value flo, const char *fmt) struct fmt_args f; f.mrb = mrb; - f.str = mrb_str_buf_new(mrb, 24); + f.str = mrb_str_new_capa(mrb, 24); if (fmt_core(&f, fmt, mrb_float(flo)) < 0) { mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid format string"); } diff --git a/src/object.c b/src/object.c index a78e9a443..368e90b9f 100644 --- a/src/object.c +++ b/src/object.c @@ -438,7 +438,7 @@ mrb_check_type(mrb_state *mrb, mrb_value x, enum mrb_vtype t) MRB_API mrb_value mrb_any_to_s(mrb_state *mrb, mrb_value obj) { - mrb_value str = mrb_str_buf_new(mrb, 20); + mrb_value str = mrb_str_new_capa(mrb, 20); const char *cname = mrb_obj_classname(mrb, obj); mrb_str_cat_lit(mrb, str, "#<"); diff --git a/src/string.c b/src/string.c index 551d33a12..801e77f16 100644 --- a/src/string.c +++ b/src/string.c @@ -94,12 +94,8 @@ mrb_str_new_empty(mrb_state *mrb, mrb_value str) return mrb_obj_value(s); } -#ifndef MRB_STR_BUF_MIN_SIZE -# define MRB_STR_BUF_MIN_SIZE 128 -#endif - MRB_API mrb_value -mrb_str_buf_new(mrb_state *mrb, size_t capa) +mrb_str_new_capa(mrb_state *mrb, size_t capa) { struct RString *s; @@ -108,9 +104,6 @@ mrb_str_buf_new(mrb_state *mrb, size_t capa) if (capa >= MRB_INT_MAX) { mrb_raise(mrb, E_ARGUMENT_ERROR, "string capacity size too big"); } - if (capa < MRB_STR_BUF_MIN_SIZE) { - capa = MRB_STR_BUF_MIN_SIZE; - } s->as.heap.len = 0; s->as.heap.aux.capa = (mrb_int)capa; s->as.heap.ptr = (char *)mrb_malloc(mrb, capa+1); @@ -119,6 +112,19 @@ mrb_str_buf_new(mrb_state *mrb, size_t capa) return mrb_obj_value(s); } +#ifndef MRB_STR_BUF_MIN_SIZE +# define MRB_STR_BUF_MIN_SIZE 128 +#endif + +MRB_API mrb_value +mrb_str_buf_new(mrb_state *mrb, size_t capa) +{ + if (capa < MRB_STR_BUF_MIN_SIZE) { + capa = MRB_STR_BUF_MIN_SIZE; + } + return mrb_str_new_capa(mrb, capa); +} + static void resize_capa(mrb_state *mrb, struct RString *s, size_t capacity) { diff --git a/src/variable.c b/src/variable.c index 91081e867..2902ad288 100644 --- a/src/variable.c +++ b/src/variable.c @@ -513,7 +513,7 @@ mrb_obj_iv_inspect(mrb_state *mrb, struct RObject *obj) if (len > 0) { const char *cn = mrb_obj_classname(mrb, mrb_obj_value(obj)); - mrb_value str = mrb_str_buf_new(mrb, 30); + mrb_value str = mrb_str_new_capa(mrb, 30); mrb_str_cat_lit(mrb, str, "-<"); mrb_str_cat_cstr(mrb, str, cn); @@ -1108,7 +1108,7 @@ mrb_class_find_path(mrb_state *mrb, struct RClass *c) name = find_class_sym(mrb, mrb_class_ptr(outer), c); if (name == 0) return mrb_nil_value(); str = mrb_class_name(mrb, mrb_class_ptr(outer)); - path = mrb_str_buf_new(mrb, 0); + path = mrb_str_new_capa(mrb, 0); mrb_str_cat_cstr(mrb, path, str); mrb_str_cat_cstr(mrb, path, "::"); @@ -813,7 +813,7 @@ localjump_error(mrb_state *mrb, localjump_error_kind kind) mrb_value msg; mrb_value exc; - msg = mrb_str_buf_new(mrb, sizeof(lead) + 7); + msg = mrb_str_new_capa(mrb, sizeof(lead) + 7); mrb_str_cat(mrb, msg, lead, sizeof(lead) - 1); mrb_str_cat(mrb, msg, kind_str[kind], kind_str_len[kind]); exc = mrb_exc_new_str(mrb, E_LOCALJUMP_ERROR, msg); |
