mbed I/F binding for mruby
Dependents: mruby_mbed_web mirb_mbed
proc.h
00001 /* 00002 ** mruby/proc.h - Proc class 00003 ** 00004 ** See Copyright Notice in mruby.h 00005 */ 00006 00007 #ifndef MRUBY_PROC_H 00008 #define MRUBY_PROC_H 00009 00010 #include "mruby/irep.h" 00011 00012 #if defined(__cplusplus) 00013 extern "C" { 00014 #endif 00015 00016 struct REnv { 00017 MRB_OBJECT_HEADER; 00018 mrb_value *stack; 00019 mrb_sym mid; 00020 ptrdiff_t cioff; 00021 }; 00022 00023 #define MRB_SET_ENV_STACK_LEN(e,len) (e)->flags = (unsigned int)(len) 00024 #define MRB_ENV_STACK_LEN(e) ((mrb_int)(e)->flags) 00025 #define MRB_ENV_UNSHARE_STACK(e) ((e)->cioff = -1) 00026 #define MRB_ENV_STACK_SHARED_P(e) ((e)->cioff >= 0) 00027 00028 struct RProc { 00029 MRB_OBJECT_HEADER; 00030 union { 00031 mrb_irep *irep; 00032 mrb_func_t func; 00033 } body; 00034 struct RClass *target_class; 00035 struct REnv *env; 00036 }; 00037 00038 /* aspec access */ 00039 #define MRB_ASPEC_REQ(a) (((a) >> 18) & 0x1f) 00040 #define MRB_ASPEC_OPT(a) (((a) >> 13) & 0x1f) 00041 #define MRB_ASPEC_REST(a) (((a) >> 12) & 0x1) 00042 #define MRB_ASPEC_POST(a) (((a) >> 7) & 0x1f) 00043 #define MRB_ASPEC_KEY(a) (((a) >> 2) & 0x1f) 00044 #define MRB_ASPEC_KDICT(a) ((a) & (1<<1)) 00045 #define MRB_ASPEC_BLOCK(a) ((a) & 1) 00046 00047 #define MRB_PROC_CFUNC 128 00048 #define MRB_PROC_CFUNC_P(p) (((p)->flags & MRB_PROC_CFUNC) != 0) 00049 #define MRB_PROC_STRICT 256 00050 #define MRB_PROC_STRICT_P(p) (((p)->flags & MRB_PROC_STRICT) != 0) 00051 00052 #define mrb_proc_ptr(v) ((struct RProc*)(mrb_ptr(v))) 00053 00054 struct RProc *mrb_proc_new(mrb_state*, mrb_irep*); 00055 struct RProc *mrb_closure_new(mrb_state*, mrb_irep*); 00056 MRB_API struct RProc *mrb_proc_new_cfunc(mrb_state*, mrb_func_t); 00057 MRB_API struct RProc *mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int nlocals); 00058 void mrb_proc_copy(struct RProc *a, struct RProc *b); 00059 00060 /* implementation of #send method */ 00061 MRB_API mrb_value mrb_f_send(mrb_state *mrb, mrb_value self); 00062 00063 /* following functions are defined in mruby-proc-ext so please include it when using */ 00064 MRB_API struct RProc *mrb_proc_new_cfunc_with_env(mrb_state*, mrb_func_t, mrb_int, const mrb_value*); 00065 MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state*, mrb_int); 00066 /* old name */ 00067 #define mrb_cfunc_env_get(mrb, idx) mrb_proc_cfunc_env_get(mrb, idx) 00068 00069 #include "mruby/khash.h" 00070 KHASH_DECLARE(mt, mrb_sym, struct RProc*, TRUE) 00071 00072 #if defined(__cplusplus) 00073 } /* extern "C" { */ 00074 #endif 00075 00076 #endif /* MRUBY_PROC_H */ 00077
Generated on Tue Jul 12 2022 18:00:35 by 1.7.2