Skip to content

Commit 43da490

Browse files
committed
class.c: alias should keep the visibility of the original
1 parent 18674c0 commit 43da490

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

include/mruby/proc.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx);
114114
#define MRB_METHOD_PUBLIC_FL 0
115115
#define MRB_METHOD_PRIVATE_FL 1
116116
#define MRB_METHOD_PROTECTED_FL 2
117+
#define MRB_METHOD_VDEFAULT_FL 3
118+
#define MRB_METHOD_VISIBILITY_MASK 3
117119

118120
#define MRB_METHOD_FUNC_P(m) ((m).flags&MRB_METHOD_FUNC_FL)
119121
#define MRB_METHOD_NOARG_P(m) (((m).flags&MRB_METHOD_NOARG_FL)?1:0)
@@ -124,6 +126,8 @@ MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx);
124126
#define MRB_METHOD_PROC_P(m) (!MRB_METHOD_FUNC_P(m))
125127
#define MRB_METHOD_PROC(m) ((m).as.proc)
126128
#define MRB_METHOD_UNDEF_P(m) ((m).as.proc==NULL)
129+
#define MRB_METHOD_VISIBILITY(m) ((m).flags & MRB_METHOD_VISIBILITY_MASK)
130+
#define MRB_METHOD_SET_VISIBILITY(m,v) ((m).flags=(((m).flags&~MRB_METHOD_VISIBILITY_MASK)|(v)))
127131

128132
#define MRB_METHOD_CFUNC_P(m) (MRB_METHOD_FUNC_P(m) || (MRB_METHOD_PROC(m)?(MRB_PROC_CFUNC_P(MRB_METHOD_PROC(m))):FALSE))
129133
/* use MRB_METHOD_CFUNC(m) only when MRB_METHOD_CFUNC_P(m) is true */

src/class.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ union mt_ptr {
3434
#define MT_PUBLIC MRB_METHOD_PUBLIC_FL
3535
#define MT_PRIVATE MRB_METHOD_PRIVATE_FL
3636
#define MT_PROTECTED MRB_METHOD_PROTECTED_FL
37-
#define MT_VMASK 3
37+
#define MT_VDEFAULT MRB_METHOD_VDEFAULT_FL
38+
#define MT_VMASK MRB_METHOD_VISIBILITY_MASK
3839
#define MT_EMPTY 0
3940
#define MT_DELETED 1
4041

@@ -2302,12 +2303,14 @@ mrb_alias_method(mrb_state *mrb, struct RClass *c, mrb_sym a, mrb_sym b)
23022303
const struct RProc *p = MRB_METHOD_PROC(m);
23032304
if (!MRB_PROC_CFUNC_P(p) && !MRB_PROC_ALIAS_P(p)) {
23042305
struct RProc *pnew = MRB_OBJ_ALLOC(mrb, MRB_TT_PROC, mrb->proc_class);
2306+
int vis = MRB_METHOD_VISIBILITY(m);
23052307

23062308
pnew->body.mid = b;
23072309
pnew->upper = p;
23082310
pnew->e.env = NULL;
23092311
pnew->flags |= MRB_PROC_ALIAS;
23102312
MRB_METHOD_FROM_PROC(m, pnew);
2313+
MRB_METHOD_SET_VISIBILITY(m,vis);
23112314
}
23122315
}
23132316
mrb_define_method_raw(mrb, c, a, m);

0 commit comments

Comments
 (0)