summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
diff options
context:
space:
mode:
authorYukihiro Matz Matsumoto <[email protected]>2013-03-23 21:53:49 +0900
committerYukihiro Matz Matsumoto <[email protected]>2013-03-23 21:53:49 +0900
commitd8f48e9782a0d4e70c67f11b83d9976ab279dc51 (patch)
tree92381b9941e17b559a20b4d090b687321f8cb406 /src/class.c
parent8ae2c2498ebbd7966c4f2ff5cb7c2bd52d3bf941 (diff)
parentbdd8f7b4a7321675d72322f518e8252e0f7422ef (diff)
downloadmruby-d8f48e9782a0d4e70c67f11b83d9976ab279dc51.tar.gz
mruby-d8f48e9782a0d4e70c67f11b83d9976ab279dc51.zip
Merge branch 'pr-add-mrb_ptr_as_string' of https://github.com/monaka/mruby into monaka-pr-add-mrb_ptr_as_string
Diffstat (limited to 'src/class.c')
-rw-r--r--src/class.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/src/class.c b/src/class.c
index da898383d..bdb9e016c 100644
--- a/src/class.c
+++ b/src/class.c
@@ -1228,10 +1228,9 @@ mrb_class_name(mrb_state *mrb, struct RClass* c)
{
mrb_value path = mrb_class_path(mrb, c);
if (mrb_nil_p(path)) {
- char buf[32];
-
- snprintf(buf, 32, "#<Class:%p>", c);
- path = mrb_str_new_cstr(mrb, buf);
+ path = mrb_str_new(mrb, "#<Class:", 8);
+ mrb_str_concat(mrb, path, mrb_ptr_as_string(mrb, c));
+ mrb_str_cat(mrb, path, ">", 1);
}
return mrb_str_ptr(path)->ptr;
}
@@ -1350,51 +1349,54 @@ mrb_define_alias(mrb_state *mrb, struct RClass *klass, const char *name1, const
static mrb_value
mrb_mod_to_s(mrb_state *mrb, mrb_value klass)
{
+ mrb_value str;
+
if (mrb_type(klass) == MRB_TT_SCLASS) {
- mrb_value s = mrb_str_new(mrb, "#<", 2);
mrb_value v = mrb_iv_get(mrb, klass, mrb_intern2(mrb, "__attached__", 12));
- mrb_str_cat(mrb, s, "Class:", 6);
+ str = mrb_str_new(mrb, "#<Class:", 8);
+
switch (mrb_type(v)) {
case MRB_TT_CLASS:
case MRB_TT_MODULE:
case MRB_TT_SCLASS:
- mrb_str_append(mrb, s, mrb_inspect(mrb, v));
+ mrb_str_append(mrb, str, mrb_inspect(mrb, v));
break;
default:
- mrb_str_append(mrb, s, mrb_any_to_s(mrb, v));
+ mrb_str_append(mrb, str, mrb_any_to_s(mrb, v));
break;
}
- mrb_str_cat(mrb, s, ">", 1);
-
- return s;
+ mrb_str_cat(mrb, str, ">", 1);
}
else {
+ str = mrb_str_buf_new(mrb, 32);
struct RClass *c = mrb_class_ptr(klass);
- const char *cn = mrb_class_name(mrb, c);
-
- if (!cn) {
- char buf[256];
- int n = 0;
+ mrb_value path = mrb_class_path(mrb, c);
+ if (mrb_nil_p(path)) {
switch (mrb_type(klass)) {
case MRB_TT_CLASS:
- n = snprintf(buf, sizeof(buf), "#<Class:%p>", c);
+ mrb_str_cat(mrb, str, "#<Class:", 8);
break;
case MRB_TT_MODULE:
- n = snprintf(buf, sizeof(buf), "#<Module:%p>", c);
+ mrb_str_cat(mrb, str, "#<Module:", 9);
break;
default:
+ /* Shouldn't be happened? */
+ mrb_str_cat(mrb, str, "#<??????:", 9);
break;
}
- return mrb_str_dup(mrb, mrb_str_new(mrb, buf, n));
+ mrb_str_concat(mrb, str, mrb_ptr_as_string(mrb, c));
+ mrb_str_cat(mrb, str, ">", 1);
}
else {
- return mrb_str_dup(mrb, mrb_str_new_cstr(mrb, cn));
+ str = path;
}
}
+
+ return str;
}
mrb_value