diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2015-09-05 02:01:02 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2015-09-05 02:01:02 +0900 |
| commit | 2550edd570f1d7485e862ce11ceb50ea59dee3c5 (patch) | |
| tree | 7ad9e3459c82cc25e93499a6c247b083262b7d05 /include | |
| parent | 8bb7962eb8e193e94d866626f07d52b63ff2016c (diff) | |
| download | mruby-2550edd570f1d7485e862ce11ceb50ea59dee3c5.tar.gz mruby-2550edd570f1d7485e862ce11ceb50ea59dee3c5.zip | |
remove `origin` member to implement prepend from struct RClass; ref #2885
instead origin is saved in ICLASS with MRB_FLAG_IS_ORIGIN set.
Diffstat (limited to 'include')
| -rw-r--r-- | include/mruby/class.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/include/mruby/class.h b/include/mruby/class.h index 80a0cbe35..85f3e12c6 100644 --- a/include/mruby/class.h +++ b/include/mruby/class.h @@ -16,7 +16,6 @@ struct RClass { struct iv_tbl *iv; struct kh_mt *mt; struct RClass *super; - struct RClass *origin; }; #define mrb_class_ptr(v) ((struct RClass*)(mrb_ptr(v))) @@ -50,7 +49,16 @@ mrb_class(mrb_state *mrb, mrb_value v) } // TODO: figure out where to put user flags +#define MRB_FLAG_IS_PREPENDED (1 << 19) #define MRB_FLAG_IS_ORIGIN (1 << 20) +#define MRB_CLASS_ORIGIN(c) do {\ + if (c->flags & MRB_FLAG_IS_PREPENDED) {\ + c = c->super;\ + while (!(c->flags & MRB_FLAG_IS_ORIGIN)) {\ + c = c->super;\ + }\ + }\ +} while (0) #define MRB_INSTANCE_TT_MASK (0xFF) #define MRB_SET_INSTANCE_TT(c, tt) c->flags = ((c->flags & ~MRB_INSTANCE_TT_MASK) | (char)tt) #define MRB_INSTANCE_TT(c) (enum mrb_vtype)(c->flags & MRB_INSTANCE_TT_MASK) |
