Changeset 439 for EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/class.h
- Timestamp:
- Jul 9, 2020, 8:51:43 AM (4 years ago)
- Location:
- EcnlProtoTool/trunk/mruby-2.1.1
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/class.h
r331 r439 1 /* 2 ** mruby/class.h - Class class1 /** 2 ** @file mruby/class.h - Class class 3 3 ** 4 4 ** See Copyright Notice in mruby.h … … 23 23 24 24 #define mrb_class_ptr(v) ((struct RClass*)(mrb_ptr(v))) 25 #define RCLASS_SUPER(v) (((struct RClass*)(mrb_ptr(v)))->super)26 #define RCLASS_IV_TBL(v) (((struct RClass*)(mrb_ptr(v)))->iv)27 #define RCLASS_M_TBL(v) (((struct RClass*)(mrb_ptr(v)))->mt)28 25 29 static inlinestruct RClass*26 MRB_INLINE struct RClass* 30 27 mrb_class(mrb_state *mrb, mrb_value v) 31 28 { … … 41 38 case MRB_TT_FIXNUM: 42 39 return mrb->fixnum_class; 40 #ifndef MRB_WITHOUT_FLOAT 43 41 case MRB_TT_FLOAT: 44 42 return mrb->float_class; 43 #endif 45 44 case MRB_TT_CPTR: 46 45 return mrb->object_class; … … 52 51 } 53 52 54 /* TODO: figure out where to put user flags */ 55 #define MRB_FLAG_IS_FROZEN (1 << 18) 56 #define MRB_FLAG_IS_PREPENDED (1 << 19) 57 #define MRB_FLAG_IS_ORIGIN (1 << 20) 53 /* flags: 54 20: frozen 55 19: is_prepended 56 18: is_origin 57 17: is_inherited (used by method cache) 58 16: unused 59 0-15: instance type 60 */ 61 #define MRB_FL_CLASS_IS_PREPENDED (1 << 19) 62 #define MRB_FL_CLASS_IS_ORIGIN (1 << 18) 58 63 #define MRB_CLASS_ORIGIN(c) do {\ 59 if ( c->flags & MRB_FLAG_IS_PREPENDED) {\60 c = c->super;\61 while (!( c->flags & MRB_FLAG_IS_ORIGIN)) {\62 c = c->super;\64 if ((c)->flags & MRB_FL_CLASS_IS_PREPENDED) {\ 65 (c) = (c)->super;\ 66 while (!((c)->flags & MRB_FL_CLASS_IS_ORIGIN)) {\ 67 (c) = (c)->super;\ 63 68 }\ 64 69 }\ 65 70 } while (0) 71 #define MRB_FL_CLASS_IS_INHERITED (1 << 17) 66 72 #define MRB_INSTANCE_TT_MASK (0xFF) 67 #define MRB_SET_INSTANCE_TT(c, tt) c->flags = ((c->flags & ~MRB_INSTANCE_TT_MASK) | (char)tt)68 #define MRB_INSTANCE_TT(c) (enum mrb_vtype)( c->flags & MRB_INSTANCE_TT_MASK)73 #define MRB_SET_INSTANCE_TT(c, tt) ((c)->flags = (((c)->flags & ~MRB_INSTANCE_TT_MASK) | (char)(tt))) 74 #define MRB_INSTANCE_TT(c) (enum mrb_vtype)((c)->flags & MRB_INSTANCE_TT_MASK) 69 75 70 76 MRB_API struct RClass* mrb_define_class_id(mrb_state*, mrb_sym, struct RClass*); 71 77 MRB_API struct RClass* mrb_define_module_id(mrb_state*, mrb_sym); 72 MRB_APIstruct RClass *mrb_vm_define_class(mrb_state*, mrb_value, mrb_value, mrb_sym);73 MRB_APIstruct RClass *mrb_vm_define_module(mrb_state*, mrb_value, mrb_sym);74 MRB_API void mrb_define_method_raw(mrb_state*, struct RClass*, mrb_sym, struct RProc *);78 struct RClass *mrb_vm_define_class(mrb_state*, mrb_value, mrb_value, mrb_sym); 79 struct RClass *mrb_vm_define_module(mrb_state*, mrb_value, mrb_sym); 80 MRB_API void mrb_define_method_raw(mrb_state*, struct RClass*, mrb_sym, mrb_method_t); 75 81 MRB_API void mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t func, mrb_aspec aspec); 76 MRB_API void mrb_alias_method(mrb_state *mrb, struct RClass *c, mrb_sym a, mrb_sym b);82 MRB_API void mrb_alias_method(mrb_state*, struct RClass *c, mrb_sym a, mrb_sym b); 77 83 78 MRB_API struct RClass *mrb_class_outer_module(mrb_state*, struct RClass *); 79 MRB_API struct RProc *mrb_method_search_vm(mrb_state*, struct RClass**, mrb_sym); 80 MRB_API struct RProc *mrb_method_search(mrb_state*, struct RClass*, mrb_sym); 84 MRB_API mrb_method_t mrb_method_search_vm(mrb_state*, struct RClass**, mrb_sym); 85 MRB_API mrb_method_t mrb_method_search(mrb_state*, struct RClass*, mrb_sym); 81 86 82 87 MRB_API struct RClass* mrb_class_real(struct RClass* cl); 88 mrb_value mrb_instance_new(mrb_state *mrb, mrb_value cv); 83 89 90 void mrb_class_name_class(mrb_state*, struct RClass*, struct RClass*, mrb_sym); 91 mrb_bool mrb_const_name_p(mrb_state*, const char*, mrb_int); 92 mrb_value mrb_class_find_path(mrb_state*, struct RClass*); 93 mrb_value mrb_mod_to_s(mrb_state*, mrb_value); 84 94 void mrb_gc_mark_mt(mrb_state*, struct RClass*); 85 95 size_t mrb_gc_mark_mt_size(mrb_state*, struct RClass*); 86 96 void mrb_gc_free_mt(mrb_state*, struct RClass*); 87 97 98 #ifdef MRB_METHOD_CACHE 99 void mrb_mc_clear_by_class(mrb_state *mrb, struct RClass* c); 100 #else 101 #define mrb_mc_clear_by_class(mrb,c) 102 #endif 103 88 104 MRB_END_DECL 89 105
Note:
See TracChangeset
for help on using the changeset viewer.