source: EcnlProtoTool/trunk/mruby-1.2.0/include/mruby/class.h@ 270

Last change on this file since 270 was 270, checked in by coas-nagasima, 7 years ago

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 2.6 KB
Line 
1/*
2** mruby/class.h - Class class
3**
4** See Copyright Notice in mruby.h
5*/
6
7#ifndef MRUBY_CLASS_H
8#define MRUBY_CLASS_H
9
10#include "mruby/common.h"
11
12/**
13 * Class class
14 */
15MRB_BEGIN_DECL
16
17struct RClass {
18 MRB_OBJECT_HEADER;
19 struct iv_tbl *iv;
20 struct kh_mt *mt;
21 struct RClass *super;
22};
23
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
29static inline struct RClass*
30mrb_class(mrb_state *mrb, mrb_value v)
31{
32 switch (mrb_type(v)) {
33 case MRB_TT_FALSE:
34 if (mrb_fixnum(v))
35 return mrb->false_class;
36 return mrb->nil_class;
37 case MRB_TT_TRUE:
38 return mrb->true_class;
39 case MRB_TT_SYMBOL:
40 return mrb->symbol_class;
41 case MRB_TT_FIXNUM:
42 return mrb->fixnum_class;
43 case MRB_TT_FLOAT:
44 return mrb->float_class;
45 case MRB_TT_CPTR:
46 return mrb->object_class;
47 case MRB_TT_ENV:
48 return NULL;
49 default:
50 return mrb_obj_ptr(v)->c;
51 }
52}
53
54// TODO: figure out where to put user flags
55#define MRB_FLAG_IS_PREPENDED (1 << 19)
56#define MRB_FLAG_IS_ORIGIN (1 << 20)
57#define MRB_CLASS_ORIGIN(c) do {\
58 if (c->flags & MRB_FLAG_IS_PREPENDED) {\
59 c = c->super;\
60 while (!(c->flags & MRB_FLAG_IS_ORIGIN)) {\
61 c = c->super;\
62 }\
63 }\
64} while (0)
65#define MRB_INSTANCE_TT_MASK (0xFF)
66#define MRB_SET_INSTANCE_TT(c, tt) c->flags = ((c->flags & ~MRB_INSTANCE_TT_MASK) | (char)tt)
67#define MRB_INSTANCE_TT(c) (enum mrb_vtype)(c->flags & MRB_INSTANCE_TT_MASK)
68
69MRB_API struct RClass* mrb_define_class_id(mrb_state*, mrb_sym, struct RClass*);
70MRB_API struct RClass* mrb_define_module_id(mrb_state*, mrb_sym);
71MRB_API struct RClass *mrb_vm_define_class(mrb_state*, mrb_value, mrb_value, mrb_sym);
72MRB_API struct RClass *mrb_vm_define_module(mrb_state*, mrb_value, mrb_sym);
73MRB_API void mrb_define_method_raw(mrb_state*, struct RClass*, mrb_sym, struct RProc *);
74MRB_API void mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t func, mrb_aspec aspec);
75MRB_API void mrb_alias_method(mrb_state *mrb, struct RClass *c, mrb_sym a, mrb_sym b);
76
77MRB_API struct RClass *mrb_class_outer_module(mrb_state*, struct RClass *);
78MRB_API struct RProc *mrb_method_search_vm(mrb_state*, struct RClass**, mrb_sym);
79MRB_API struct RProc *mrb_method_search(mrb_state*, struct RClass*, mrb_sym);
80
81MRB_API struct RClass* mrb_class_real(struct RClass* cl);
82
83void mrb_gc_mark_mt(mrb_state*, struct RClass*);
84size_t mrb_gc_mark_mt_size(mrb_state*, struct RClass*);
85void mrb_gc_free_mt(mrb_state*, struct RClass*);
86
87MRB_END_DECL
88
89#endif /* MRUBY_CLASS_H */
Note: See TracBrowser for help on using the repository browser.