diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-10-13 17:20:46 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-10-13 17:20:46 +0900 |
| commit | 265034134a8051e40c2f6bd9bea674562e75b219 (patch) | |
| tree | 4fea36e57cccb9a38011e0e6333f70131dedf5c6 | |
| parent | d128e2d09eaed2f094dcc72f52d3b1c3378cff10 (diff) | |
| parent | 6377c9bce5a54bdacbeb86f2e9aa8497cfc671e8 (diff) | |
| download | mruby-265034134a8051e40c2f6bd9bea674562e75b219.tar.gz mruby-265034134a8051e40c2f6bd9bea674562e75b219.zip | |
Merge pull request #4772 from shuujii/refactor-mrb_class_name_class
Refactor `mrb_class_name_class`
| -rw-r--r-- | src/class.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/class.c b/src/class.c index d03b99750..b1c7513de 100644 --- a/src/class.c +++ b/src/class.c @@ -65,17 +65,22 @@ mrb_class_name_class(mrb_state *mrb, struct RClass *outer, struct RClass *c, mrb name = mrb_symbol_value(id); } else { - name = mrb_class_path(mrb, outer); - if (mrb_nil_p(name)) { /* unnamed outer class */ + const char *n; + mrb_int len; + mrb_value outer_name = mrb_class_path(mrb, outer); + + if (mrb_nil_p(outer_name)) { /* unnamed outer class */ if (outer != mrb->object_class && outer != c) { mrb_obj_iv_set_force(mrb, (struct RObject*)c, mrb_intern_lit(mrb, "__outer__"), mrb_obj_value(outer)); } return; } - name = mrb_str_dup(mrb, name); - mrb_str_cat_cstr(mrb, name, "::"); - mrb_str_cat_cstr(mrb, name, mrb_sym_name(mrb, id)); + n = mrb_sym_name_len(mrb, id, &len); + name = mrb_str_new_capa(mrb, RSTRING_LEN(outer_name) + 2 + len); + mrb_str_cat_str(mrb, name, outer_name); + mrb_str_cat_lit(mrb, name, "::"); + mrb_str_cat(mrb, name, n, len); MRB_SET_FROZEN_FLAG(mrb_obj_ptr(name)); } mrb_obj_iv_set_force(mrb, (struct RObject*)c, nsym, name); |
