26#define MRB_ENV_SET_LEN(e,len) ((e)->flags = (((e)->flags & ~0xff)|((unsigned int)(len) & 0xff)))
27#define MRB_ENV_LEN(e) ((mrb_int)((e)->flags & 0xff))
28#define MRB_ENV_CLOSED (1<<20)
29#define MRB_ENV_CLOSE(e) ((e)->flags |= MRB_ENV_CLOSED)
30#define MRB_ENV_ONSTACK_P(e) (((e)->flags & MRB_ENV_CLOSED) == 0)
31#define MRB_ENV_BIDX(e) (((e)->flags >> 8) & 0xff)
32#define MRB_ENV_SET_BIDX(e,idx) ((e)->flags = (((e)->flags & ~(0xff<<8))|((unsigned int)(idx) & 0xff)<<8))
49 const struct RProc *upper;
51 struct RClass *target_class;
57#define MRB_ASPEC_REQ(a) (((a) >> 18) & 0x1f)
58#define MRB_ASPEC_OPT(a) (((a) >> 13) & 0x1f)
59#define MRB_ASPEC_REST(a) (((a) >> 12) & 0x1)
60#define MRB_ASPEC_POST(a) (((a) >> 7) & 0x1f)
61#define MRB_ASPEC_KEY(a) (((a) >> 2) & 0x1f)
62#define MRB_ASPEC_KDICT(a) (((a) >> 1) & 0x1)
63#define MRB_ASPEC_BLOCK(a) ((a) & 1)
65#define MRB_PROC_CFUNC_FL 128
66#define MRB_PROC_CFUNC_P(p) (((p)->flags & MRB_PROC_CFUNC_FL) != 0)
67#define MRB_PROC_CFUNC(p) (p)->body.func
68#define MRB_PROC_STRICT 256
69#define MRB_PROC_STRICT_P(p) (((p)->flags & MRB_PROC_STRICT) != 0)
70#define MRB_PROC_ORPHAN 512
71#define MRB_PROC_ORPHAN_P(p) (((p)->flags & MRB_PROC_ORPHAN) != 0)
72#define MRB_PROC_ENVSET 1024
73#define MRB_PROC_ENV_P(p) (((p)->flags & MRB_PROC_ENVSET) != 0)
74#define MRB_PROC_ENV(p) (MRB_PROC_ENV_P(p) ? (p)->e.env : NULL)
75#define MRB_PROC_TARGET_CLASS(p) (MRB_PROC_ENV_P(p) ? (p)->e.env->c : (p)->e.target_class)
76#define MRB_PROC_SET_TARGET_CLASS(p,tc) do {\
77 if (MRB_PROC_ENV_P(p)) {\
78 (p)->e.env->c = (tc);\
79 mrb_field_write_barrier(mrb, (struct RBasic*)(p)->e.env, (struct RBasic*)(tc));\
82 (p)->e.target_class = (tc);\
83 mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)(tc));\
86#define MRB_PROC_SCOPE 2048
87#define MRB_PROC_SCOPE_P(p) (((p)->flags & MRB_PROC_SCOPE) != 0)
88#define MRB_PROC_NOARG 4096
89#define MRB_PROC_NOARG_P(p) (((p)->flags & MRB_PROC_NOARG) != 0)
90#define MRB_PROC_ALIAS 8192
91#define MRB_PROC_ALIAS_P(p) (((p)->flags & MRB_PROC_ALIAS) != 0)
93#define mrb_proc_ptr(v) ((struct RProc*)(mrb_ptr(v)))
103#define mrb_cfunc_env_get(mrb, idx) mrb_proc_cfunc_env_get(mrb, idx)
105#define MRB_METHOD_FUNC_FL 1
106#define MRB_METHOD_NOARG_FL 2
108#ifndef MRB_USE_METHOD_T_STRUCT
110#define MRB_METHOD_FUNC_P(m) (((uintptr_t)(m))&MRB_METHOD_FUNC_FL)
111#define MRB_METHOD_NOARG_P(m) ((((uintptr_t)(m))&MRB_METHOD_NOARG_FL)?1:0)
112#define MRB_METHOD_NOARG_SET(m) ((m)=(mrb_method_t)(((uintptr_t)(m))|MRB_METHOD_NOARG_FL))
113#define MRB_METHOD_FUNC(m) ((mrb_func_t)((uintptr_t)(m)>>2))
114#define MRB_METHOD_FROM_FUNC(m,fn) ((m)=(mrb_method_t)((((uintptr_t)(fn))<<2)|MRB_METHOD_FUNC_FL))
115#define MRB_METHOD_FROM_PROC(m,pr) ((m)=(mrb_method_t)(pr))
116#define MRB_METHOD_PROC_P(m) (!MRB_METHOD_FUNC_P(m))
117#define MRB_METHOD_PROC(m) ((struct RProc*)(m))
118#define MRB_METHOD_UNDEF_P(m) ((m)==0)
122#define MRB_METHOD_FUNC_P(m) ((m).flags&MRB_METHOD_FUNC_FL)
123#define MRB_METHOD_NOARG_P(m) (((m).flags&MRB_METHOD_NOARG_FL)?1:0)
124#define MRB_METHOD_FUNC(m) ((m).func)
125#define MRB_METHOD_NOARG_SET(m) do{(m).flags|=MRB_METHOD_NOARG_FL;}while(0)
126#define MRB_METHOD_FROM_FUNC(m,fn) do{(m).flags=MRB_METHOD_FUNC_FL;(m).func=(fn);}while(0)
127#define MRB_METHOD_FROM_PROC(m,pr) do{(m).flags=0;(m).proc=(struct RProc*)(pr);}while(0)
128#define MRB_METHOD_PROC_P(m) (!MRB_METHOD_FUNC_P(m))
129#define MRB_METHOD_PROC(m) ((m).proc)
130#define MRB_METHOD_UNDEF_P(m) ((m).proc==NULL)
134#define MRB_METHOD_CFUNC_P(m) (MRB_METHOD_FUNC_P(m)?TRUE:(MRB_METHOD_PROC(m)?(MRB_PROC_CFUNC_P(MRB_METHOD_PROC(m))):FALSE))
135#define MRB_METHOD_CFUNC(m) (MRB_METHOD_FUNC_P(m)?MRB_METHOD_FUNC(m):((MRB_METHOD_PROC(m)&&MRB_PROC_CFUNC_P(MRB_METHOD_PROC(m)))?MRB_PROC_CFUNC(MRB_METHOD_PROC(m)):NULL))
mruby common platform definition"
#define MRB_END_DECL
End declarations in C mode.
Definition common.h:28
#define MRB_BEGIN_DECL
Start declarations in C mode.
Definition common.h:26
#define MRB_API
Declare a public mruby API function.
Definition common.h:79
mrb_value(* mrb_func_t)(struct mrb_state *mrb, mrb_value self)
Function pointer type for a function callable by mruby.
Definition mruby.h:230
void mrb_vm_ci_env_clear(mrb_state *mrb, mrb_callinfo *ci)
It can be used to isolate top-level scopes referenced by blocks generated by mrb_load_string_cxt() or...
Definition vm.c:335
Class class.
Definition class.h:17
Proc class.
Definition proc.h:18
Definition boxing_nan.h:40