summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-08-03 19:56:14 +0900
committerYukihiro Matsumoto <[email protected]>2012-08-03 19:56:14 +0900
commit77aa261f3bcb9ab93e1ea9a9d89f8cba51b98873 (patch)
tree5712441fc04b74c7cd9735b657db75b021cceede /src/kernel.c
parentf121558f9379c92a20051e3d87489d4c8125e9f9 (diff)
downloadmruby-77aa261f3bcb9ab93e1ea9a9d89f8cba51b98873.tar.gz
mruby-77aa261f3bcb9ab93e1ea9a9d89f8cba51b98873.zip
mrb_singleton_class should raise TypeError for immediate objects
Diffstat (limited to 'src/kernel.c')
-rw-r--r--src/kernel.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/kernel.c b/src/kernel.c
index 740960f80..6327f967d 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -550,12 +550,22 @@ mrb_obj_instance_eval(mrb_state *mrb, mrb_value self)
{
mrb_value a, b;
mrb_value cv;
+ struct RClass *c;
if (mrb_get_args(mrb, "|S&", &a, &b) == 1) {
mrb_raise(mrb, E_NOTIMP_ERROR, "instance_eval with string not implemented");
}
- cv = mrb_singleton_class(mrb, self);
- return mrb_yield_internal(mrb, b, 0, 0, self, mrb_class_ptr(cv));
+ switch (mrb_type(self)) {
+ case MRB_TT_SYMBOL:
+ case MRB_TT_FIXNUM:
+ case MRB_TT_FLOAT:
+ c = 0;
+ break;
+ default:
+ cv = mrb_singleton_class(mrb, self);
+ c = mrb_class_ptr(cv);
+ }
+ return mrb_yield_internal(mrb, b, 0, 0, self, c);
}
int