source: EcnlProtoTool/trunk/mruby-1.3.0/include/mruby/proc.h@ 331

Last change on this file since 331 was 331, checked in by coas-nagasima, 6 years ago

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 2.3 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 "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 ptrdiff_t cioff;
22 union {
23 mrb_sym mid;
24 struct mrb_context *c;
25 } cxt;
26};
27
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)
32
33MRB_API void mrb_env_unshare(mrb_state*, struct REnv*);
34
35struct RProc {
36 MRB_OBJECT_HEADER;
37 union {
38 mrb_irep *irep;
39 mrb_func_t func;
40 } body;
41 struct RClass *target_class;
42 struct REnv *env;
43};
44
45/* aspec access */
46#define MRB_ASPEC_REQ(a) (((a) >> 18) & 0x1f)
47#define MRB_ASPEC_OPT(a) (((a) >> 13) & 0x1f)
48#define MRB_ASPEC_REST(a) (((a) >> 12) & 0x1)
49#define MRB_ASPEC_POST(a) (((a) >> 7) & 0x1f)
50#define MRB_ASPEC_KEY(a) (((a) >> 2) & 0x1f)
51#define MRB_ASPEC_KDICT(a) ((a) & (1<<1))
52#define MRB_ASPEC_BLOCK(a) ((a) & 1)
53
54#define MRB_PROC_CFUNC 128
55#define MRB_PROC_CFUNC_P(p) (((p)->flags & MRB_PROC_CFUNC) != 0)
56#define MRB_PROC_STRICT 256
57#define MRB_PROC_STRICT_P(p) (((p)->flags & MRB_PROC_STRICT) != 0)
58#define MRB_PROC_ORPHAN 512
59#define MRB_PROC_ORPHAN_P(p) (((p)->flags & MRB_PROC_ORPHAN) != 0)
60
61#define mrb_proc_ptr(v) ((struct RProc*)(mrb_ptr(v)))
62
63struct RProc *mrb_proc_new(mrb_state*, mrb_irep*);
64struct RProc *mrb_closure_new(mrb_state*, mrb_irep*);
65MRB_API struct RProc *mrb_proc_new_cfunc(mrb_state*, mrb_func_t);
66MRB_API struct RProc *mrb_closure_new_cfunc(mrb_state *mrb, mrb_func_t func, int nlocals);
67void mrb_proc_copy(struct RProc *a, struct RProc *b);
68
69/* implementation of #send method */
70MRB_API mrb_value mrb_f_send(mrb_state *mrb, mrb_value self);
71
72/* following functions are defined in mruby-proc-ext so please include it when using */
73MRB_API struct RProc *mrb_proc_new_cfunc_with_env(mrb_state*, mrb_func_t, mrb_int, const mrb_value*);
74MRB_API mrb_value mrb_proc_cfunc_env_get(mrb_state*, mrb_int);
75/* old name */
76#define mrb_cfunc_env_get(mrb, idx) mrb_proc_cfunc_env_get(mrb, idx)
77
78#include <mruby/khash.h>
79KHASH_DECLARE(mt, mrb_sym, struct RProc*, TRUE)
80
81MRB_END_DECL
82
83#endif /* MRUBY_PROC_H */
Note: See TracBrowser for help on using the repository browser.