mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mrb_singleton_class should raise TypeError for immediate objects
This commit is contained in:
+6
-1
@@ -807,11 +807,16 @@ mrb_singleton_class(mrb_state *mrb, mrb_value v)
|
||||
|
||||
switch (mrb_type(v)) {
|
||||
case MRB_TT_FALSE:
|
||||
if (mrb_nil_p(v))
|
||||
return mrb_obj_value(mrb->nil_class);
|
||||
return mrb_obj_value(mrb->false_class);
|
||||
case MRB_TT_TRUE:
|
||||
return mrb_obj_value(mrb->true_class);
|
||||
case MRB_TT_SYMBOL:
|
||||
case MRB_TT_FIXNUM:
|
||||
case MRB_TT_FLOAT:
|
||||
return mrb_nil_value(); /* should raise TypeError */
|
||||
mrb_raise(mrb, E_TYPE_ERROR, "can't define singleton");
|
||||
return mrb_nil_value(); /* not reached */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
+12
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user