summaryrefslogtreecommitdiffhomepage
path: root/src/class.c
diff options
context:
space:
mode:
authorDaniel Bovensiepen <[email protected]>2012-11-08 17:23:51 +0900
committerDaniel Bovensiepen <[email protected]>2012-11-08 17:23:51 +0900
commite1e369470eb41453cb79abdbbbdb9158489e2d26 (patch)
tree0e4dce8c16af6f8519869a71c9c44f3ee2f3595b /src/class.c
parentcdb72a05a294eb8521dd40c011160228496312cb (diff)
parent1c95f4eb82d525d7d5eacd214904d262554bf93d (diff)
downloadmruby-e1e369470eb41453cb79abdbbbdb9158489e2d26.tar.gz
mruby-e1e369470eb41453cb79abdbbbdb9158489e2d26.zip
Merge new change
Diffstat (limited to 'src/class.c')
-rw-r--r--src/class.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/class.c b/src/class.c
index 3e54afede..cf2f6df50 100644
--- a/src/class.c
+++ b/src/class.c
@@ -503,8 +503,8 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
case MRB_TT_FIXNUM:
*p = (mrb_float)mrb_fixnum(*sp);
break;
- case MRB_TT_FALSE:
- *p = 0.0;
+ case MRB_TT_STRING:
+ mrb_raise(mrb, E_TYPE_ERROR, "String can't be coerced into Float");
break;
default:
{
@@ -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) > 64) {
+ 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;
}
@@ -1005,14 +1008,20 @@ mrb_bob_missing(mrb_state *mrb, mrb_value mod)
{
mrb_value name, *a;
int alen;
+ mrb_value inspect;
mrb_get_args(mrb, "o*", &name, &a, &alen);
- if (!SYMBOL_P(name)) {
+ if (!mrb_symbol_p(name)) {
mrb_raise(mrb, E_TYPE_ERROR, "name should be a symbol");
}
+
+ inspect = mrb_funcall(mrb, mod, "inspect", 0);
+ if (RSTRING_LEN(inspect) > 64) {
+ 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();
}
@@ -1322,10 +1331,10 @@ mod_define_method(mrb_state *mrb, mrb_value self)
static mrb_sym
mrb_sym_value(mrb_state *mrb, mrb_value val)
{
- if(mrb_type(val) == MRB_TT_STRING) {
+ if (mrb_string_p(val)) {
return mrb_intern_str(mrb, val);
}
- else if(mrb_type(val) != MRB_TT_SYMBOL) {
+ else if(!mrb_symbol_p(val)) {
mrb_value obj = mrb_funcall(mrb, val, "inspect", 0);
mrb_raisef(mrb, E_TYPE_ERROR, "%s is not a symbol",
mrb_string_value_ptr(mrb, obj));