Unverified Commit 26503413 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto Committed by GitHub

Merge pull request #4772 from shuujii/refactor-mrb_class_name_class

Refactor `mrb_class_name_class`
parents d128e2d0 6377c9bc
...@@ -65,17 +65,22 @@ mrb_class_name_class(mrb_state *mrb, struct RClass *outer, struct RClass *c, mrb ...@@ -65,17 +65,22 @@ mrb_class_name_class(mrb_state *mrb, struct RClass *outer, struct RClass *c, mrb
name = mrb_symbol_value(id); name = mrb_symbol_value(id);
} }
else { else {
name = mrb_class_path(mrb, outer); const char *n;
if (mrb_nil_p(name)) { /* unnamed outer class */ 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) { if (outer != mrb->object_class && outer != c) {
mrb_obj_iv_set_force(mrb, (struct RObject*)c, mrb_intern_lit(mrb, "__outer__"), mrb_obj_iv_set_force(mrb, (struct RObject*)c, mrb_intern_lit(mrb, "__outer__"),
mrb_obj_value(outer)); mrb_obj_value(outer));
} }
return; return;
} }
name = mrb_str_dup(mrb, name); n = mrb_sym_name_len(mrb, id, &len);
mrb_str_cat_cstr(mrb, name, "::"); name = mrb_str_new_capa(mrb, RSTRING_LEN(outer_name) + 2 + len);
mrb_str_cat_cstr(mrb, name, mrb_sym_name(mrb, id)); 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_SET_FROZEN_FLAG(mrb_obj_ptr(name));
} }
mrb_obj_iv_set_force(mrb, (struct RObject*)c, nsym, name); mrb_obj_iv_set_force(mrb, (struct RObject*)c, nsym, name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment