Groonga 3.0.9 Source Code Document
Main Page
Related Pages
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
groonga
vendor
mruby-eeac4be
include
mruby.h
Go to the documentation of this file.
1
/*
2
** mruby - An embeddable Ruby implementation
3
**
4
** Copyright (c) mruby developers 2010-2013
5
**
6
** Permission is hereby granted, free of charge, to any person obtaining
7
** a copy of this software and associated documentation files (the
8
** "Software"), to deal in the Software without restriction, including
9
** without limitation the rights to use, copy, modify, merge, publish,
10
** distribute, sublicense, and/or sell copies of the Software, and to
11
** permit persons to whom the Software is furnished to do so, subject to
12
** the following conditions:
13
**
14
** The above copyright notice and this permission notice shall be
15
** included in all copies or substantial portions of the Software.
16
**
17
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
**
25
** [ MIT license: http://www.opensource.org/licenses/mit-license.php ]
26
*/
27
28
#ifndef MRUBY_H
29
#define MRUBY_H
30
31
#if defined(__cplusplus)
32
extern
"C"
{
33
#endif
34
35
#include <stdint.h>
36
#include <stddef.h>
37
38
#include "
mrbconf.h
"
39
#include "
mruby/value.h
"
40
41
typedef
uint32_t
mrb_code
;
42
typedef
uint32_t
mrb_aspec
;
43
44
struct
mrb_state
;
45
46
typedef
void
* (*mrb_allocf) (
struct
mrb_state
*mrb,
void
*, size_t,
void
*
ud
);
47
48
#ifndef MRB_ARENA_SIZE
49
#define MRB_ARENA_SIZE 100
50
#endif
51
52
typedef
struct
{
53
mrb_sym
mid
;
54
struct
RProc
*
proc
;
55
int
stackidx
;
56
int
nregs
;
57
int
argc
;
58
mrb_code *
pc
;
59
int
acc
;
60
struct
RClass
*
target_class
;
61
int
ridx
;
62
int
eidx
;
63
struct
REnv
*
env
;
64
}
mrb_callinfo
;
65
66
enum
mrb_fiber_state
{
67
MRB_FIBER_CREATED
= 0,
68
MRB_FIBER_RUNNING
,
69
MRB_FIBER_RESUMED
,
70
MRB_FIBER_TERMINATED
,
71
};
72
73
struct
mrb_context
{
74
struct
mrb_context
*
prev
;
75
76
mrb_value
*
stack
;
/* stack of virtual machine */
77
mrb_value
*
stbase
, *
stend
;
78
79
mrb_callinfo
*
ci
;
80
mrb_callinfo
*
cibase
, *
ciend
;
81
82
mrb_code **
rescue
;
/* exception handler stack */
83
int
rsize
;
84
struct
RProc
**
ensure
;
/* ensure handler stack */
85
int
esize
;
86
87
uint8_t
status
;
88
struct
RFiber
*
fib
;
89
};
90
91
enum
gc_state
{
92
GC_STATE_NONE
= 0,
93
GC_STATE_MARK
,
94
GC_STATE_SWEEP
95
};
96
97
typedef
struct
mrb_state
{
98
void
*
jmp
;
99
100
mrb_allocf
allocf
;
/* memory allocation function */
101
102
struct
mrb_context
*
c
;
103
struct
mrb_context
*
root_c
;
104
105
struct
RObject
*
exc
;
/* exception */
106
struct
iv_tbl
*
globals
;
/* global variable table */
107
struct
mrb_irep
**
irep
;
/* program data array */
108
size_t
irep_len
,
irep_capa
;
109
110
struct
RObject
*
top_self
;
111
struct
RClass
*
object_class
;
/* Object class */
112
struct
RClass
*
class_class
;
113
struct
RClass
*
module_class
;
114
struct
RClass
*
proc_class
;
115
struct
RClass
*
string_class
;
116
struct
RClass
*
array_class
;
117
struct
RClass
*
hash_class
;
118
119
struct
RClass
*
float_class
;
120
struct
RClass
*
fixnum_class
;
121
struct
RClass
*
true_class
;
122
struct
RClass
*
false_class
;
123
struct
RClass
*
nil_class
;
124
struct
RClass
*
symbol_class
;
125
struct
RClass
*
kernel_module
;
126
127
struct
heap_page
*
heaps
;
/* heaps for GC */
128
struct
heap_page
*
sweeps
;
129
struct
heap_page
*
free_heaps
;
130
size_t
live
;
/* count of live objects */
131
struct
RBasic
*
arena
[
MRB_ARENA_SIZE
];
/* GC protection array */
132
int
arena_idx
;
133
134
enum
gc_state
gc_state
;
/* state of gc */
135
int
current_white_part
;
/* make white object by white_part */
136
struct
RBasic
*
gray_list
;
/* list of gray objects to be traversed incrementally */
137
struct
RBasic
*
atomic_gray_list
;
/* list of objects to be traversed atomically */
138
size_t
gc_live_after_mark
;
139
size_t
gc_threshold
;
140
int
gc_interval_ratio
;
141
int
gc_step_ratio
;
142
mrb_bool
gc_disabled
:1;
143
mrb_bool
gc_full
:1;
144
mrb_bool
is_generational_gc_mode
:1;
145
mrb_bool
out_of_memory
:1;
146
size_t
majorgc_old_threshold
;
147
struct
alloca_header
*
mems
;
148
149
mrb_sym
symidx
;
150
struct
kh_n2s *
name2sym
;
/* symbol table */
151
152
#ifdef ENABLE_DEBUG
153
void (*code_fetch_hook)(
struct
mrb_state
* mrb,
struct
mrb_irep
*
irep
, mrb_code *pc,
mrb_value
*regs);
154
#endif
155
156
struct
RClass
*
eException_class
;
157
struct
RClass
*
eStandardError_class
;
158
159
void
*
ud
;
/* auxiliary data */
160
}
mrb_state
;
161
162
typedef
mrb_value
(*
mrb_func_t
)(
mrb_state
*mrb,
mrb_value
);
163
struct
RClass
*
mrb_define_class
(
mrb_state
*,
const
char
*,
struct
RClass
*);
164
struct
RClass
*
mrb_define_module
(
mrb_state
*,
const
char
*);
165
mrb_value
mrb_singleton_class
(
mrb_state
*,
mrb_value
);
166
void
mrb_include_module
(
mrb_state
*,
struct
RClass
*,
struct
RClass
*);
167
168
void
mrb_define_method
(
mrb_state
*,
struct
RClass
*,
const
char
*,
mrb_func_t
, mrb_aspec);
169
void
mrb_define_class_method
(
mrb_state
*,
struct
RClass
*,
const
char
*,
mrb_func_t
, mrb_aspec);
170
void
mrb_define_singleton_method
(
mrb_state
*,
struct
RObject
*,
const
char
*,
mrb_func_t
, mrb_aspec);
171
void
mrb_define_module_function
(
mrb_state
*,
struct
RClass
*,
const
char
*,
mrb_func_t
, mrb_aspec);
172
void
mrb_define_const
(
mrb_state
*,
struct
RClass
*,
const
char
*name,
mrb_value
);
173
void
mrb_undef_method
(
mrb_state
*,
struct
RClass
*,
const
char
*);
174
void
mrb_undef_class_method
(
mrb_state
*,
struct
RClass
*,
const
char
*);
175
mrb_value
mrb_obj_new
(
mrb_state
*mrb,
struct
RClass
*c,
int
argc,
mrb_value
*argv);
176
#define mrb_class_new_instance(mrb,argc,argv,c) mrb_obj_new(mrb,c,argc,argv)
177
mrb_value
mrb_instance_new
(
mrb_state
*mrb,
mrb_value
cv);
178
struct
RClass
*
mrb_class_new
(
mrb_state
*mrb,
struct
RClass
*
super
);
179
struct
RClass
*
mrb_module_new
(
mrb_state
*mrb);
180
mrb_bool
mrb_class_defined
(
mrb_state
*mrb,
const
char
*name);
181
struct
RClass
*
mrb_class_get
(
mrb_state
*mrb,
const
char
*name);
182
struct
RClass
*
mrb_class_get_under
(
mrb_state
*mrb,
struct
RClass
*outer,
const
char
*name);
183
184
mrb_value
mrb_obj_dup
(
mrb_state
*mrb,
mrb_value
obj);
185
mrb_value
mrb_check_to_integer
(
mrb_state
*mrb,
mrb_value
val,
const
char
*method);
186
mrb_bool
mrb_obj_respond_to
(
struct
RClass
* c,
mrb_sym
mid);
187
struct
RClass
*
mrb_define_class_under
(
mrb_state
*mrb,
struct
RClass
*outer,
const
char
*name,
struct
RClass
*
super
);
188
struct
RClass
*
mrb_define_module_under
(
mrb_state
*mrb,
struct
RClass
*outer,
const
char
*name);
189
190
/* required arguments */
191
#define MRB_ARGS_REQ(n) ((mrb_aspec)((n)&0x1f) << 18)
192
/* optional arguments */
193
#define MRB_ARGS_OPT(n) ((mrb_aspec)((n)&0x1f) << 13)
194
/* mandatory and optinal arguments */
195
#define MRB_ARGS_ARG(n1,n2) (MRB_ARGS_REQ(n1)|MRB_ARGS_OPT(n2))
196
197
/* rest argument */
198
#define MRB_ARGS_REST() ((mrb_aspec)(1 << 12))
199
/* required arguments after rest */
200
#define MRB_ARGS_POST(n) ((mrb_aspec)((n)&0x1f) << 7)
201
/* keyword arguments (n of keys, kdict) */
202
#define MRB_ARGS_KEY(n1,n2) ((mrb_aspec)((((n1)&0x1f) << 2) | ((n2)?(1<<1):0)))
203
/* block argument */
204
#define MRB_ARGS_BLOCK() ((mrb_aspec)1)
205
206
/* accept any number of arguments */
207
#define MRB_ARGS_ANY() ARGS_REST()
208
/* accept no arguments */
209
#define MRB_ARGS_NONE() ((mrb_aspec)0)
210
211
/* compatibility macros; will be removed */
212
#define ARGS_REQ(n) MRB_ARGS_REQ(n)
213
#define ARGS_OPT(n) MRB_ARGS_OPT(n)
214
#define ARGS_REST() MRB_ARGS_REST()
215
#define ARGS_POST(n) MRB_ARGS_POST()
216
#define ARGS_KEY(n1,n2) MRB_ARGS_KEY(n1,n2)
217
#define ARGS_BLOCK() MRB_ARGS_BLOCK()
218
#define ARGS_ANY() MRB_ARGS_ANY()
219
#define ARGS_NONE() MRB_ARGS_NONE()
220
221
int
mrb_get_args
(
mrb_state
*mrb,
const
char
*format, ...);
222
223
mrb_value
mrb_funcall
(
mrb_state
*,
mrb_value
,
const
char
*,
int
,...);
224
mrb_value
mrb_funcall_argv
(
mrb_state
*,
mrb_value
,
mrb_sym
,
int
,
mrb_value
*);
225
mrb_value
mrb_funcall_with_block
(
mrb_state
*,
mrb_value
,
mrb_sym
,
int
,
mrb_value
*,
mrb_value
);
226
mrb_sym
mrb_intern_cstr
(
mrb_state
*,
const
char
*);
227
mrb_sym
mrb_intern2
(
mrb_state
*,
const
char
*,
size_t
);
228
mrb_sym
mrb_intern_str
(
mrb_state
*,
mrb_value
);
229
mrb_value
mrb_check_intern_cstr
(
mrb_state
*,
const
char
*);
230
mrb_value
mrb_check_intern
(
mrb_state
*,
const
char
*,
size_t
);
231
mrb_value
mrb_check_intern_str
(
mrb_state
*,
mrb_value
);
232
const
char
*
mrb_sym2name
(
mrb_state
*,
mrb_sym
);
233
const
char
*
mrb_sym2name_len
(
mrb_state
*,
mrb_sym
,
size_t
*);
234
mrb_value
mrb_sym2str
(
mrb_state
*,
mrb_sym
);
235
mrb_value
mrb_str_format
(
mrb_state
*,
int
,
const
mrb_value
*,
mrb_value
);
236
237
/* For backward compatibility. */
238
static
inline
239
mrb_sym
mrb_intern(
mrb_state
*mrb,
const
char
*cstr)
240
{
241
return
mrb_intern_cstr
(mrb, cstr);
242
}
243
244
void
*
mrb_malloc
(
mrb_state
*,
size_t
);
/* raise RuntimeError if no mem */
245
void
*
mrb_calloc
(
mrb_state
*,
size_t
,
size_t
);
/* ditto */
246
void
*
mrb_realloc
(
mrb_state
*,
void
*,
size_t
);
/* ditto */
247
void
*
mrb_realloc_simple
(
mrb_state
*,
void
*,
size_t
);
/* return NULL if no memory available */
248
void
*
mrb_malloc_simple
(
mrb_state
*,
size_t
);
/* return NULL if no memory available */
249
struct
RBasic
*
mrb_obj_alloc
(
mrb_state
*,
enum
mrb_vtype
,
struct
RClass
*);
250
void
mrb_free
(
mrb_state
*,
void
*);
251
252
mrb_value
mrb_str_new
(
mrb_state
*mrb,
const
char
*p,
size_t
len);
253
mrb_value
mrb_str_new_cstr
(
mrb_state
*,
const
char
*);
254
mrb_value
mrb_str_new_static
(
mrb_state
*mrb,
const
char
*p,
size_t
len);
255
256
mrb_state
*
mrb_open
(
void
);
257
mrb_state
*
mrb_open_allocf
(
mrb_allocf
,
void
*ud);
258
void
mrb_irep_free
(
mrb_state
*,
struct
mrb_irep
*);
259
void
mrb_close
(
mrb_state
*);
260
261
mrb_value
mrb_top_self
(
mrb_state
*);
262
mrb_value
mrb_run
(
mrb_state
*,
struct
RProc
*,
mrb_value
);
263
264
void
mrb_p
(
mrb_state
*,
mrb_value
);
265
mrb_int
mrb_obj_id
(
mrb_value
obj);
266
mrb_sym
mrb_obj_to_sym
(
mrb_state
*mrb,
mrb_value
name);
267
268
mrb_bool
mrb_obj_eq
(
mrb_state
*,
mrb_value
,
mrb_value
);
269
mrb_bool
mrb_obj_equal
(
mrb_state
*,
mrb_value
,
mrb_value
);
270
mrb_bool
mrb_equal
(
mrb_state
*mrb,
mrb_value
obj1,
mrb_value
obj2);
271
mrb_value
mrb_Integer
(
mrb_state
*mrb,
mrb_value
val);
272
mrb_value
mrb_Float
(
mrb_state
*mrb,
mrb_value
val);
273
mrb_value
mrb_inspect
(
mrb_state
*mrb,
mrb_value
obj);
274
mrb_bool
mrb_eql
(
mrb_state
*mrb,
mrb_value
obj1,
mrb_value
obj2);
275
276
void
mrb_garbage_collect
(
mrb_state
*);
277
void
mrb_full_gc
(
mrb_state
*);
278
void
mrb_incremental_gc
(
mrb_state
*);
279
int
mrb_gc_arena_save
(
mrb_state
*);
280
void
mrb_gc_arena_restore
(
mrb_state
*,
int
);
281
void
mrb_gc_mark
(
mrb_state
*,
struct
RBasic
*);
282
#define mrb_gc_mark_value(mrb,val) do {\
283
if (mrb_type(val) >= MRB_TT_HAS_BASIC) mrb_gc_mark((mrb), mrb_basic_ptr(val));\
284
} while (0)
285
void
mrb_field_write_barrier
(
mrb_state
*,
struct
RBasic
*,
struct
RBasic
*);
286
#define mrb_field_write_barrier_value(mrb, obj, val) do{\
287
if ((val.tt >= MRB_TT_HAS_BASIC)) mrb_field_write_barrier((mrb), (obj), mrb_basic_ptr(val));\
288
} while (0)
289
void
mrb_write_barrier
(
mrb_state
*,
struct
RBasic
*);
290
291
mrb_value
mrb_check_convert_type
(
mrb_state
*mrb,
mrb_value
val,
enum
mrb_vtype
type
,
const
char
*tname,
const
char
*method);
292
mrb_value
mrb_any_to_s
(
mrb_state
*mrb,
mrb_value
obj);
293
const
char
*
mrb_obj_classname
(
mrb_state
*mrb,
mrb_value
obj);
294
struct
RClass
*
mrb_obj_class
(
mrb_state
*mrb,
mrb_value
obj);
295
mrb_value
mrb_class_path
(
mrb_state
*mrb,
struct
RClass
*c);
296
mrb_value
mrb_convert_type
(
mrb_state
*mrb,
mrb_value
val,
enum
mrb_vtype
type
,
const
char
*tname,
const
char
*method);
297
mrb_bool
mrb_obj_is_kind_of
(
mrb_state
*mrb,
mrb_value
obj,
struct
RClass
*c);
298
mrb_value
mrb_obj_inspect
(
mrb_state
*mrb,
mrb_value
self
);
299
mrb_value
mrb_obj_clone
(
mrb_state
*mrb,
mrb_value
self
);
300
301
/* need to include <ctype.h> to use these macros */
302
#ifndef ISPRINT
303
//#define ISASCII(c) isascii((int)(unsigned char)(c))
304
#define ISASCII(c) 1
305
#define ISPRINT(c) (ISASCII(c) && isprint((int)(unsigned char)(c)))
306
#define ISSPACE(c) (ISASCII(c) && isspace((int)(unsigned char)(c)))
307
#define ISUPPER(c) (ISASCII(c) && isupper((int)(unsigned char)(c)))
308
#define ISLOWER(c) (ISASCII(c) && islower((int)(unsigned char)(c)))
309
#define ISALNUM(c) (ISASCII(c) && isalnum((int)(unsigned char)(c)))
310
#define ISALPHA(c) (ISASCII(c) && isalpha((int)(unsigned char)(c)))
311
#define ISDIGIT(c) (ISASCII(c) && isdigit((int)(unsigned char)(c)))
312
#define ISXDIGIT(c) (ISASCII(c) && isxdigit((int)(unsigned char)(c)))
313
#define TOUPPER(c) (ISASCII(c) ? toupper((int)(unsigned char)(c)) : (c))
314
#define TOLOWER(c) (ISASCII(c) ? tolower((int)(unsigned char)(c)) : (c))
315
#endif
316
317
mrb_value
mrb_exc_new
(
mrb_state
*mrb,
struct
RClass
*c,
const
char
*ptr,
long
len);
318
void
mrb_exc_raise
(
mrb_state
*mrb,
mrb_value
exc);
319
320
void
mrb_raise
(
mrb_state
*mrb,
struct
RClass
*c,
const
char
*msg);
321
void
mrb_raisef
(
mrb_state
*mrb,
struct
RClass
*c,
const
char
*fmt, ...);
322
void
mrb_name_error
(
mrb_state
*mrb,
mrb_sym
id
,
const
char
*fmt, ...);
323
void
mrb_warn
(
mrb_state
*mrb,
const
char
*fmt, ...);
324
void
mrb_bug
(
mrb_state
*mrb,
const
char
*fmt, ...);
325
void
mrb_print_backtrace
(
mrb_state
*mrb);
326
void
mrb_print_verbose_backtrace
(
mrb_state
*mrb);
327
void
mrb_print_error
(
mrb_state
*mrb);
328
329
/* macros to get typical exception objects
330
note:
331
+ those E_* macros requires mrb_state* variable named mrb.
332
+ exception objects obtained from those macros are local to mrb
333
*/
334
#define E_RUNTIME_ERROR (mrb_class_get(mrb, "RuntimeError"))
335
#define E_TYPE_ERROR (mrb_class_get(mrb, "TypeError"))
336
#define E_ARGUMENT_ERROR (mrb_class_get(mrb, "ArgumentError"))
337
#define E_INDEX_ERROR (mrb_class_get(mrb, "IndexError"))
338
#define E_RANGE_ERROR (mrb_class_get(mrb, "RangeError"))
339
#define E_NAME_ERROR (mrb_class_get(mrb, "NameError"))
340
#define E_NOMETHOD_ERROR (mrb_class_get(mrb, "NoMethodError"))
341
#define E_SCRIPT_ERROR (mrb_class_get(mrb, "ScriptError"))
342
#define E_SYNTAX_ERROR (mrb_class_get(mrb, "SyntaxError"))
343
#define E_LOCALJUMP_ERROR (mrb_class_get(mrb, "LocalJumpError"))
344
#define E_REGEXP_ERROR (mrb_class_get(mrb, "RegexpError"))
345
346
#define E_NOTIMP_ERROR (mrb_class_get(mrb, "NotImplementedError"))
347
#define E_FLOATDOMAIN_ERROR (mrb_class_get(mrb, "FloatDomainError"))
348
349
#define E_KEY_ERROR (mrb_class_get(mrb, "KeyError"))
350
351
mrb_value
mrb_yield
(
mrb_state
*mrb,
mrb_value
b
,
mrb_value
arg);
352
mrb_value
mrb_yield_argv
(
mrb_state
*mrb,
mrb_value
b
,
int
argc,
mrb_value
*argv);
353
354
void
mrb_gc_protect
(
mrb_state
*mrb,
mrb_value
obj);
355
mrb_value
mrb_to_int
(
mrb_state
*mrb,
mrb_value
val);
356
void
mrb_check_type
(
mrb_state
*mrb,
mrb_value
x,
enum
mrb_vtype
t);
357
358
typedef
enum
call_type
{
359
CALL_PUBLIC
,
360
CALL_FCALL
,
361
CALL_VCALL
,
362
CALL_TYPE_MAX
363
}
call_type
;
364
365
void
mrb_define_alias
(
mrb_state
*mrb,
struct
RClass
*klass,
const
char
*name1,
const
char
*name2);
366
const
char
*
mrb_class_name
(
mrb_state
*mrb,
struct
RClass
* klass);
367
void
mrb_define_global_const
(
mrb_state
*mrb,
const
char
*name,
mrb_value
val);
368
369
mrb_value
mrb_block_proc
(
void
);
370
mrb_value
mrb_attr_get
(
mrb_state
*mrb,
mrb_value
obj,
mrb_sym
id
);
371
372
mrb_bool
mrb_respond_to
(
mrb_state
*mrb,
mrb_value
obj,
mrb_sym
mid);
373
mrb_bool
mrb_obj_is_instance_of
(
mrb_state
*mrb,
mrb_value
obj,
struct
RClass
* c);
374
375
/* memory pool implementation */
376
typedef
struct
mrb_pool
mrb_pool
;
377
struct
mrb_pool
*
mrb_pool_open
(
mrb_state
*);
378
void
mrb_pool_close
(
struct
mrb_pool
*);
379
void
*
mrb_pool_alloc
(
struct
mrb_pool
*,
size_t
);
380
void
*
mrb_pool_realloc
(
struct
mrb_pool
*,
void
*,
size_t
oldlen,
size_t
newlen);
381
mrb_bool
mrb_pool_can_realloc
(
struct
mrb_pool
*,
void
*,
size_t
);
382
void
*
mrb_alloca
(
mrb_state
*mrb,
size_t
);
383
384
#ifdef MRB_DEBUG
385
#include <assert.h>
386
#define mrb_assert(p) assert(p)
387
#else
388
#define mrb_assert(p) ((void)0)
389
#endif
390
391
#if defined(__cplusplus)
392
}
/* extern "C" { */
393
#endif
394
395
#endif
/* MRUBY_H */
Generated on Sun Nov 10 2013 09:49:05 for Groonga 3.0.9 Source Code Document by
1.8.1.2