mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mruby-method: small refactoring mostly regarding declarations
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user