Ignore:
Timestamp:
Jul 9, 2020, 8:51:43 AM (4 years ago)
Author:
coas-nagasima
Message:

mrubyを2.1.1に更新

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 class
     1/**
     2** @file mruby/proc.h - Proc class
    33**
    44** See Copyright Notice in mruby.h
     
    1919  MRB_OBJECT_HEADER;
    2020  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;
    2623};
    2724
    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))
    3233
    33 MRB_API void mrb_env_unshare(mrb_state*, struct REnv*);
     34void mrb_env_unshare(mrb_state*, struct REnv*);
    3435
    3536struct RProc {
     
    3940    mrb_func_t func;
    4041  } 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;
    4347};
    4448
     
    5256#define MRB_ASPEC_BLOCK(a)        ((a) & 1)
    5357
    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
    5661#define MRB_PROC_STRICT 256
    5762#define MRB_PROC_STRICT_P(p) (((p)->flags & MRB_PROC_STRICT) != 0)
    5863#define MRB_PROC_ORPHAN 512
    5964#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)
    6081
    6182#define mrb_proc_ptr(v)    ((struct RProc*)(mrb_ptr(v)))
     
    6687MRB_API struct RProc *mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int nlocals);
    6788void mrb_proc_copy(struct RProc *a, struct RProc *b);
     89mrb_int mrb_proc_arity(const struct RProc *p);
    6890
    6991/* implementation of #send method */
    70 MRB_API mrb_value mrb_f_send(mrb_state *mrb, mrb_value self);
     92mrb_value mrb_f_send(mrb_state *mrb, mrb_value self);
    7193
    7294/* 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);
     95MRB_API struct RProc *mrb_proc_new_cfunc_with_env(mrb_state *mrb, mrb_func_t func, mrb_int argc, const mrb_value *argv);
     96MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx);
    7597/* old name */
    7698#define mrb_cfunc_env_get(mrb, idx) mrb_proc_cfunc_env_get(mrb, idx)
    7799
     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
    78132#include <mruby/khash.h>
    79 KHASH_DECLARE(mt, mrb_sym, struct RProc*, TRUE)
     133KHASH_DECLARE(mt, mrb_sym, mrb_method_t, TRUE)
    80134
    81135MRB_END_DECL
Note: See TracChangeset for help on using the changeset viewer.