source: EcnlProtoTool/trunk/mruby-1.2.0/include/mruby/proc.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.1 KB
Line 
1/*
2** mruby/proc.h - Proc class
3**
4** See Copyright Notice in mruby.h
5*/
6
7#ifndef MRUBY_PROC_H
8#define MRUBY_PROC_H
9
10#include "mruby/common.h"
11#include "mruby/irep.h"
12
13/**
14 * Proc class
15 */
16MRB_BEGIN_DECL
17
18struct REnv {
19 MRB_OBJECT_HEADER;
20 mrb_value *stack;
21 mrb_sym mid;
22 ptrdiff_t cioff;
23};
24
25#define MRB_SET_ENV_STACK_LEN(e,len) (e)->flags = (unsigned int)(len)
26#define MRB_ENV_STACK_LEN(e) ((mrb_int)(e)->flags)
27#define MRB_ENV_UNSHARE_STACK(e) ((e)->cioff = -1)
28#define MRB_ENV_STACK_SHARED_P(e) ((e)->cioff >= 0)
29
30struct RProc {
31 MRB_OBJECT_HEADER;
32 union {
33 mrb_irep *irep;
34 mrb_func_t func;
35 } body;
36 struct RClass *target_class;
37 struct REnv *env;
38};
39
40/* aspec access */
41#define MRB_ASPEC_REQ(a) (((a) >> 18) & 0x1f)
42#define MRB_ASPEC_OPT(a) (((a) >> 13) & 0x1f)
43#define MRB_ASPEC_REST(a) (((a) >> 12) & 0x1)
44#define MRB_ASPEC_POST(a) (((a) >> 7) & 0x1f)
45#define MRB_ASPEC_KEY(a) (((a) >> 2) & 0x1f)
46#define MRB_ASPEC_KDICT(a) ((a) & (1<<1))
47#define MRB_ASPEC_BLOCK(a) ((a) & 1)
48
49#define MRB_PROC_CFUNC 128
50#define MRB_PROC_CFUNC_P(p) (((p)->flags & MRB_PROC_CFUNC) != 0)
51#define MRB_PROC_STRICT 256
52#define MRB_PROC_STRICT_P(p) (((p)->flags & MRB_PROC_STRICT) != 0)
53
54#define mrb_proc_ptr(v) ((struct RProc*)(mrb_ptr(v)))
55
56struct RProc *mrb_proc_new(mrb_state*, mrb_irep*);
57struct RProc *mrb_closure_new(mrb_state*, mrb_irep*);
58MRB_API struct RProc *mrb_proc_new_cfunc(mrb_state*, mrb_func_t);
59MRB_API struct RProc *mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int nlocals);
60void mrb_proc_copy(struct RProc *a, struct RProc *b);
61
62/* implementation of #send method */
63MRB_API mrb_value mrb_f_send(mrb_state *mrb, mrb_value self);
64
65/* following functions are defined in mruby-proc-ext so please include it when using */
66MRB_API struct RProc *mrb_proc_new_cfunc_with_env(mrb_state*, mrb_func_t, mrb_int, const mrb_value*);
67MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state*, mrb_int);
68/* old name */
69#define mrb_cfunc_env_get(mrb, idx) mrb_proc_cfunc_env_get(mrb, idx)
70
71#include "mruby/khash.h"
72KHASH_DECLARE(mt, mrb_sym, struct RProc*, TRUE)
73
74MRB_END_DECL
75
76#endif /* MRUBY_PROC_H */
Note: See TracBrowser for help on using the repository browser.