diff options
| author | Daniel Bovensiepen <[email protected]> | 2012-11-08 17:23:51 +0900 |
|---|---|---|
| committer | Daniel Bovensiepen <[email protected]> | 2012-11-08 17:23:51 +0900 |
| commit | e1e369470eb41453cb79abdbbbdb9158489e2d26 (patch) | |
| tree | 0e4dce8c16af6f8519869a71c9c44f3ee2f3595b /src/class.c | |
| parent | cdb72a05a294eb8521dd40c011160228496312cb (diff) | |
| parent | 1c95f4eb82d525d7d5eacd214904d262554bf93d (diff) | |
| download | mruby-e1e369470eb41453cb79abdbbbdb9158489e2d26.tar.gz mruby-e1e369470eb41453cb79abdbbbdb9158489e2d26.zip | |
Merge new change
Diffstat (limited to 'src/class.c')
| -rw-r--r-- | src/class.c | 27 |
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)); |
