Changeset 439 for EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/proc.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/proc.h
r331 r439 1 /* 2 ** mruby/proc.h - Proc class1 /** 2 ** @file mruby/proc.h - Proc class 3 3 ** 4 4 ** See Copyright Notice in mruby.h … … 19 19 MRB_OBJECT_HEADER; 20 20 mrb_value *stack; 21 ptrdiff_t cioff; 22 union { 23 mrb_sym mid; 24 struct mrb_context *c; 25 } cxt; 21 struct mrb_context *cxt; 22 mrb_sym mid; 26 23 }; 27 24 28 #define MRB_SET_ENV_STACK_LEN(e,len) (e)->flags = (unsigned int)(len) 29 #define MRB_ENV_STACK_LEN(e) ((mrb_int)(e)->flags) 30 #define MRB_ENV_UNSHARE_STACK(e) ((e)->cioff = -1) 31 #define MRB_ENV_STACK_SHARED_P(e) ((e)->cioff >= 0) 25 /* flags (21bits): 1(shared flag):10(cioff/bidx):10(stack_len) */ 26 #define MRB_ENV_SET_STACK_LEN(e,len) ((e)->flags = (((e)->flags & ~0x3ff)|((unsigned int)(len) & 0x3ff))) 27 #define MRB_ENV_STACK_LEN(e) ((mrb_int)((e)->flags & 0x3ff)) 28 #define MRB_ENV_STACK_UNSHARED (1<<20) 29 #define MRB_ENV_UNSHARE_STACK(e) ((e)->flags |= MRB_ENV_STACK_UNSHARED) 30 #define MRB_ENV_STACK_SHARED_P(e) (((e)->flags & MRB_ENV_STACK_UNSHARED) == 0) 31 #define MRB_ENV_BIDX(e) (((e)->flags >> 10) & 0x3ff) 32 #define MRB_ENV_SET_BIDX(e,idx) ((e)->flags = (((e)->flags & ~(0x3ff<<10))|((unsigned int)(idx) & 0x3ff)<<10)) 32 33 33 MRB_APIvoid mrb_env_unshare(mrb_state*, struct REnv*);34 void mrb_env_unshare(mrb_state*, struct REnv*); 34 35 35 36 struct RProc { … … 39 40 mrb_func_t func; 40 41 } body; 41 struct RClass *target_class; 42 struct REnv *env; 42 struct RProc *upper; 43 union { 44 struct RClass *target_class; 45 struct REnv *env; 46 } e; 43 47 }; 44 48 … … 52 56 #define MRB_ASPEC_BLOCK(a) ((a) & 1) 53 57 54 #define MRB_PROC_CFUNC 128 55 #define MRB_PROC_CFUNC_P(p) (((p)->flags & MRB_PROC_CFUNC) != 0) 58 #define MRB_PROC_CFUNC_FL 128 59 #define MRB_PROC_CFUNC_P(p) (((p)->flags & MRB_PROC_CFUNC_FL) != 0) 60 #define MRB_PROC_CFUNC(p) (p)->body.func 56 61 #define MRB_PROC_STRICT 256 57 62 #define MRB_PROC_STRICT_P(p) (((p)->flags & MRB_PROC_STRICT) != 0) 58 63 #define MRB_PROC_ORPHAN 512 59 64 #define MRB_PROC_ORPHAN_P(p) (((p)->flags & MRB_PROC_ORPHAN) != 0) 65 #define MRB_PROC_ENVSET 1024 66 #define MRB_PROC_ENV_P(p) (((p)->flags & MRB_PROC_ENVSET) != 0) 67 #define MRB_PROC_ENV(p) (MRB_PROC_ENV_P(p) ? (p)->e.env : NULL) 68 #define MRB_PROC_TARGET_CLASS(p) (MRB_PROC_ENV_P(p) ? (p)->e.env->c : (p)->e.target_class) 69 #define MRB_PROC_SET_TARGET_CLASS(p,tc) do {\ 70 if (MRB_PROC_ENV_P(p)) {\ 71 (p)->e.env->c = (tc);\ 72 mrb_field_write_barrier(mrb, (struct RBasic*)(p)->e.env, (struct RBasic*)(tc));\ 73 }\ 74 else {\ 75 (p)->e.target_class = (tc);\ 76 mrb_field_write_barrier(mrb, (struct RBasic*)p, (struct RBasic*)(tc));\ 77 }\ 78 } while (0) 79 #define MRB_PROC_SCOPE 2048 80 #define MRB_PROC_SCOPE_P(p) (((p)->flags & MRB_PROC_SCOPE) != 0) 60 81 61 82 #define mrb_proc_ptr(v) ((struct RProc*)(mrb_ptr(v))) … … 66 87 MRB_API struct RProc *mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int nlocals); 67 88 void mrb_proc_copy(struct RProc *a, struct RProc *b); 89 mrb_int mrb_proc_arity(const struct RProc *p); 68 90 69 91 /* implementation of #send method */ 70 MRB_APImrb_value mrb_f_send(mrb_state *mrb, mrb_value self);92 mrb_value mrb_f_send(mrb_state *mrb, mrb_value self); 71 93 72 94 /* following functions are defined in mruby-proc-ext so please include it when using */ 73 MRB_API struct RProc *mrb_proc_new_cfunc_with_env(mrb_state *, mrb_func_t, mrb_int, const mrb_value*);74 MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state *, mrb_int);95 MRB_API struct RProc *mrb_proc_new_cfunc_with_env(mrb_state *mrb, mrb_func_t func, mrb_int argc, const mrb_value *argv); 96 MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx); 75 97 /* old name */ 76 98 #define mrb_cfunc_env_get(mrb, idx) mrb_proc_cfunc_env_get(mrb, idx) 77 99 100 #define MRB_METHOD_FUNC_FL 1 101 #define MRB_METHOD_NOARG_FL 2 102 #ifndef MRB_METHOD_T_STRUCT 103 104 #define MRB_METHOD_FUNC_P(m) (((uintptr_t)(m))&MRB_METHOD_FUNC_FL) 105 #define MRB_METHOD_NOARG_P(m) (((uintptr_t)(m))&MRB_METHOD_NOARG_FL) 106 #define MRB_METHOD_NOARG_SET(m) ((m)=(mrb_method_t)(((uintptr_t)(m))|MRB_METHOD_NOARG_FL)) 107 #define MRB_METHOD_FUNC(m) ((mrb_func_t)((uintptr_t)(m)&(~(MRB_METHOD_NOARG_FL|MRB_METHOD_FUNC_FL)))) 108 #define MRB_METHOD_FROM_FUNC(m,fn) ((m)=(mrb_method_t)((((uintptr_t)(fn))|MRB_METHOD_FUNC_FL))) 109 #define MRB_METHOD_FROM_PROC(m,pr) ((m)=(mrb_method_t)(pr)) 110 #define MRB_METHOD_PROC_P(m) (!MRB_METHOD_FUNC_P(m)) 111 #define MRB_METHOD_PROC(m) ((struct RProc*)(m)) 112 #define MRB_METHOD_UNDEF_P(m) ((m)==0) 113 114 #else 115 116 #define MRB_METHOD_FUNC_P(m) ((m).flags&MRB_METHOD_FUNC_FL) 117 #define MRB_METHOD_NOARG_P(m) ((m).flags&MRB_METHOD_NOARG_FL) 118 #define MRB_METHOD_FUNC(m) ((m).func) 119 #define MRB_METHOD_NOARG_SET(m) do{(m).flags|=MRB_METHOD_NOARG_FL;}while(0) 120 #define MRB_METHOD_FROM_FUNC(m,fn) do{(m).flags=MRB_METHOD_FUNC_FL;(m).func=(fn);}while(0) 121 #define MRB_METHOD_FROM_PROC(m,pr) do{(m).flags=0;(m).proc=(pr);}while(0) 122 #define MRB_METHOD_PROC_P(m) (!MRB_METHOD_FUNC_P(m)) 123 #define MRB_METHOD_PROC(m) ((m).proc) 124 #define MRB_METHOD_UNDEF_P(m) ((m).proc==NULL) 125 126 #endif /* MRB_METHOD_T_STRUCT */ 127 128 #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)) 129 #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)) 130 131 78 132 #include <mruby/khash.h> 79 KHASH_DECLARE(mt, mrb_sym, struct RProc*, TRUE)133 KHASH_DECLARE(mt, mrb_sym, mrb_method_t, TRUE) 80 134 81 135 MRB_END_DECL
Note:
See TracChangeset
for help on using the changeset viewer.