mruby-method: small refactoring mostly regarding declarations

This commit is contained in:
Yukihiro "Matz" Matsumoto
2023-11-20 22:20:33 +09:00
parent b01eb03d2a
commit bef7eea468
+9 -16
View File
@@ -267,13 +267,12 @@ method_bcall(mrb_state *mrb, mrb_value self)
static mrb_value
method_unbind(mrb_state *mrb, mrb_value self)
{
struct RObject *ume;
mrb_value owner = mrb_iv_get(mrb, self, MRB_SYM(_owner));
mrb_value name = mrb_iv_get(mrb, self, MRB_SYM(_name));
mrb_value proc = mrb_iv_get(mrb, self, MRB_SYM(_proc));
mrb_value klass = mrb_iv_get(mrb, self, MRB_SYM(_klass));
ume = method_object_alloc(mrb, mrb_class_get_id(mrb, MRB_SYM(UnboundMethod)));
struct RObject *ume = method_object_alloc(mrb, mrb_class_get_id(mrb, MRB_SYM(UnboundMethod)));
mrb_obj_iv_set(mrb, ume, MRB_SYM(_owner), owner);
mrb_obj_iv_set(mrb, ume, MRB_SYM(_recv), mrb_nil_value());
mrb_obj_iv_set(mrb, ume, MRB_SYM(_name), name);
@@ -307,8 +306,6 @@ method_super_method(mrb_state *mrb, mrb_value self)
mrb_value owner = mrb_iv_get(mrb, self, MRB_SYM(_owner));
mrb_value name = mrb_iv_get(mrb, self, MRB_SYM(_name));
struct RClass *super, *rklass;
struct RProc *proc;
struct RObject *me;
if (mrb_type(owner) == MRB_TT_MODULE) {
struct RClass *m = mrb_class_ptr(owner);
@@ -323,19 +320,18 @@ method_super_method(mrb_state *mrb, mrb_value self)
super = mrb_class_ptr(owner)->super;
}
proc = method_search_vm(mrb, &super, mrb_symbol(name));
struct RProc *proc = method_search_vm(mrb, &super, mrb_symbol(name));
if (!proc) return mrb_nil_value();
rklass = super;
super = mrb_class_real(super);
if (!super) return mrb_nil_value();
super = mrb_class_real(super);
me = method_object_alloc(mrb, mrb_obj_class(mrb, self));
struct RObject *me = method_object_alloc(mrb, mrb_obj_class(mrb, self));
mrb_obj_iv_set(mrb, me, MRB_SYM(_owner), mrb_obj_value(super));
mrb_obj_iv_set(mrb, me, MRB_SYM(_recv), recv);
mrb_obj_iv_set(mrb, me, MRB_SYM(_name), name);
mrb_obj_iv_set(mrb, me, MRB_SYM(_proc), mrb_obj_value(proc));
mrb_obj_iv_set(mrb, me, MRB_SYM(_klass), mrb_obj_value(rklass));
mrb_obj_iv_set(mrb, me, MRB_SYM(_klass), mrb_obj_value(super));
return mrb_obj_value(me);
}
@@ -438,8 +434,6 @@ method_to_s(mrb_state *mrb, mrb_value self)
static mrb_bool
search_method_owner(mrb_state *mrb, struct RClass *c, mrb_value obj, mrb_sym name, struct RClass **owner, struct RProc **proc, mrb_bool unbound)
{
mrb_value ret;
*owner = c;
*proc = method_search_vm(mrb, owner, name);
if (!*proc) {
@@ -449,7 +443,7 @@ search_method_owner(mrb_state *mrb, struct RClass *c, mrb_value obj, mrb_sym nam
if (!mrb_respond_to(mrb, obj, MRB_SYM_Q(respond_to_missing))) {
return FALSE;
}
ret = mrb_funcall_id(mrb, obj, MRB_SYM_Q(respond_to_missing), 2, mrb_symbol_value(name), mrb_true_value());
mrb_value ret = mrb_funcall_id(mrb, obj, MRB_SYM_Q(respond_to_missing), 2, mrb_symbol_value(name), mrb_true_value());
if (!mrb_test(ret)) {
return FALSE;
}
@@ -473,7 +467,6 @@ method_alloc(mrb_state *mrb, struct RClass *c, mrb_value obj, mrb_sym name, mrb_
{
struct RClass *owner;
struct RProc *proc;
struct RObject *me;
if (!search_method_owner(mrb, c, obj, name, &owner, &proc, unbound)) {
if (singleton) {
@@ -486,7 +479,8 @@ method_alloc(mrb_state *mrb, struct RClass *c, mrb_value obj, mrb_sym name, mrb_
if (singleton && owner != c) {
singleton_method_error(mrb, name, obj);
}
me = method_object_alloc(mrb, mrb_class_get_id(mrb, unbound ? MRB_SYM(UnboundMethod) : MRB_SYM(Method)));
struct RObject *me = method_object_alloc(mrb, mrb_class_get_id(mrb, unbound ? MRB_SYM(UnboundMethod) : MRB_SYM(Method)));
mrb_obj_iv_set(mrb, me, MRB_SYM(_owner), mrb_obj_value(owner));
mrb_obj_iv_set(mrb, me, MRB_SYM(_recv), unbound ? mrb_nil_value() : obj);
mrb_obj_iv_set(mrb, me, MRB_SYM(_name), mrb_symbol_value(name));
@@ -508,12 +502,11 @@ mrb_kernel_method(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_kernel_singleton_method(mrb_state *mrb, mrb_value self)
{
struct RClass *c;
mrb_sym name;
mrb_get_args(mrb, "n", &name);
c = mrb_class(mrb, self);
struct RClass *c = mrb_class(mrb, self);
if (c->tt != MRB_TT_SCLASS) {
singleton_method_error(mrb, name, self);
}