summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
diff options
context:
space:
mode:
authorAkira Yumiyama <[email protected]>2012-11-07 17:08:02 +0900
committerAkira Yumiyama <[email protected]>2012-11-07 17:10:04 +0900
commit94520ea797d343e548f63ee30738e26172fd235e (patch)
tree446ca08cbacbcb228f1267a534e393d27405648e /src/class.c
parentb777850c7856ee069603d8f9dd156c38926c2610 (diff)
downloadmruby-94520ea797d343e548f63ee30738e26172fd235e.tar.gz
mruby-94520ea797d343e548f63ee30738e26172fd235e.zip
fix 'undefined method' error message.
Diffstat (limited to 'src/class.c')
-rw-r--r--src/class.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/class.c b/src/class.c
index 7f11dc25c..0e8adfbbe 100644
--- a/src/class.c
+++ b/src/class.c
@@ -852,9 +852,12 @@ mrb_method_search(mrb_state *mrb, struct RClass* c, mrb_sym mid)
m = mrb_method_search_vm(mrb, &c, mid);
if (!m) {
+ mrb_value inspect = mrb_funcall(mrb, mrb_obj_value(c), "inspect", 0);
+ if (RSTRING_LEN(inspect) > 150) {
+ inspect = mrb_any_to_s(mrb, mrb_obj_value(c));
+ }
mrb_raisef(mrb, E_NAME_ERROR, "undefined method '%s' for class %s",
- mrb_sym2name(mrb, mid),
- RSTRING_PTR(mrb_funcall(mrb, mrb_obj_value(c), "inspect", 0)));
+ mrb_sym2name(mrb, mid), RSTRING_PTR(inspect));
}
return m;
}
@@ -1010,9 +1013,14 @@ mrb_bob_missing(mrb_state *mrb, mrb_value mod)
if (!mrb_symbol_p(name)) {
mrb_raise(mrb, E_TYPE_ERROR, "name should be a symbol");
}
+
+ mrb_value inspect = mrb_funcall(mrb, mod, "inspect", 0);
+ if (RSTRING_LEN(inspect) > 150) {
+ inspect = mrb_any_to_s(mrb, mod);
+ }
+
mrb_raisef(mrb, E_NOMETHOD_ERROR, "undefined method '%s' for %s",
- mrb_sym2name(mrb, mrb_symbol(name)),
- RSTRING_PTR(mrb_funcall(mrb, mod, "inspect", 0)));
+ mrb_sym2name(mrb, mrb_symbol(name)), RSTRING_PTR(inspect));
/* not reached */
return mrb_nil_value();
}