mruby 3.3.0
mruby is the lightweight implementation of the Ruby language
Loading...
Searching...
No Matches
internal.h
Go to the documentation of this file.
1
7#ifndef MRUBY_INTERNAL_H
8#define MRUBY_INTERNAL_H
9
10#ifdef MRUBY_ARRAY_H
11void mrb_ary_decref(mrb_state*, mrb_shared_array*);
12mrb_value mrb_ary_subseq(mrb_state *mrb, mrb_value ary, mrb_int beg, mrb_int len);
13#endif
14
15mrb_bool mrb_inspect_recursive_p(mrb_state *mrb, mrb_value self);
16
17#ifdef MRUBY_CLASS_H
18struct RClass *mrb_vm_define_class(mrb_state*, mrb_value, mrb_value, mrb_sym);
19struct RClass *mrb_vm_define_module(mrb_state*, mrb_value, mrb_sym);
20mrb_value mrb_instance_new(mrb_state *mrb, mrb_value cv);
21void mrb_class_name_class(mrb_state*, struct RClass*, struct RClass*, mrb_sym);
22mrb_bool mrb_const_name_p(mrb_state*, const char*, mrb_int);
23mrb_value mrb_class_find_path(mrb_state*, struct RClass*);
24mrb_value mrb_mod_to_s(mrb_state *, mrb_value);
25void mrb_method_added(mrb_state *mrb, struct RClass *c, mrb_sym mid);
26mrb_noreturn void mrb_method_missing(mrb_state *mrb, mrb_sym name, mrb_value self, mrb_value args);
27mrb_method_t mrb_vm_find_method(mrb_state *mrb, struct RClass *c, struct RClass **cp, mrb_sym mid);
28mrb_value mrb_mod_const_missing(mrb_state *mrb, mrb_value mod);
29mrb_value mrb_const_missing(mrb_state *mrb, mrb_value mod, mrb_sym sym);
30size_t mrb_class_mt_memsize(mrb_state*, struct RClass*);
31#endif
32
33mrb_value mrb_obj_equal_m(mrb_state *mrb, mrb_value);
34
35/* debug */
36size_t mrb_packed_int_len(uint32_t num);
37size_t mrb_packed_int_encode(uint32_t num, uint8_t *p);
38uint32_t mrb_packed_int_decode(const uint8_t *p, const uint8_t **newpos);
39
40/* dump */
41#ifdef MRUBY_IREP_H
42int mrb_dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size);
43#ifndef MRB_NO_STDIO
44int mrb_dump_irep_cfunc(mrb_state *mrb, const mrb_irep*, uint8_t flags, FILE *f, const char *initname);
45int mrb_dump_irep_cstruct(mrb_state *mrb, const mrb_irep*, uint8_t flags, FILE *f, const char *initname);
46#endif
47#endif
48
49/* codedump */
50void mrb_codedump_all(mrb_state *mrb, struct RProc *proc);
51#ifndef MRB_NO_STDIO
52void mrb_codedump_all_file(mrb_state *mrb, struct RProc *proc, FILE *out);
53#endif
54
55/* error */
56mrb_value mrb_exc_inspect(mrb_state *mrb, mrb_value exc);
57mrb_value mrb_exc_backtrace(mrb_state *mrb, mrb_value exc);
58mrb_value mrb_get_backtrace(mrb_state *mrb);
59void mrb_exc_mesg_set(mrb_state *mrb, struct RException *exc, mrb_value mesg);
60mrb_value mrb_exc_mesg_get(mrb_state *mrb, struct RException *exc);
61mrb_value mrb_f_raise(mrb_state*, mrb_value);
62mrb_value mrb_make_exception(mrb_state *mrb, mrb_value exc, mrb_value mesg);
63
64/* gc */
65void mrb_gc_mark_mt(mrb_state*, struct RClass*);
66size_t mrb_gc_mark_mt_size(mrb_state*, struct RClass*);
67void mrb_gc_free_mt(mrb_state*, struct RClass*);
68
69/* hash */
70size_t mrb_hash_memsize(mrb_value obj);
71void mrb_gc_mark_hash(mrb_state*, struct RHash*);
72size_t mrb_gc_mark_hash_size(mrb_state*, struct RHash*);
73void mrb_gc_free_hash(mrb_state*, struct RHash*);
74
75/* irep */
76struct mrb_insn_data mrb_decode_insn(const mrb_code *pc);
77#ifdef MRUBY_IREP_H
78void mrb_irep_free(mrb_state*, struct mrb_irep*);
79void mrb_irep_remove_lv(mrb_state *mrb, mrb_irep *irep);
80
81static inline const struct mrb_irep_catch_handler *
82mrb_irep_catch_handler_table(const struct mrb_irep *irep)
83{
84 if (irep->clen > 0) {
85 return (const struct mrb_irep_catch_handler*)(irep->iseq + irep->ilen);
86 }
87 else {
88 return (const struct mrb_irep_catch_handler*)NULL;
89 }
90}
91#endif
92
93/* numeric */
94mrb_value mrb_div_int_value(mrb_state *mrb, mrb_int x, mrb_int y);
95mrb_int mrb_div_int(mrb_int x, mrb_int y);
96mrb_value mrb_int_add(mrb_state *mrb, mrb_value x, mrb_value y);
97mrb_value mrb_int_sub(mrb_state *mrb, mrb_value x, mrb_value y);
98mrb_value mrb_int_mul(mrb_state *mrb, mrb_value x, mrb_value y);
99mrb_noreturn void mrb_int_zerodiv(mrb_state *mrb);
100mrb_noreturn void mrb_int_overflow(mrb_state *mrb, const char *reason);
101#ifndef MRB_NO_FLOAT
102void mrb_check_num_exact(mrb_state *mrb, mrb_float num);
103#endif
104
105#ifdef MRB_USE_COMPLEX
106mrb_value mrb_complex_new(mrb_state *mrb, mrb_float x, mrb_float y);
107mrb_value mrb_complex_add(mrb_state *mrb, mrb_value x, mrb_value y);
108mrb_value mrb_complex_sub(mrb_state *mrb, mrb_value x, mrb_value y);
109mrb_value mrb_complex_mul(mrb_state *mrb, mrb_value x, mrb_value y);
110mrb_value mrb_complex_div(mrb_state *mrb, mrb_value x, mrb_value y);
111void mrb_complex_copy(mrb_state *mrb, mrb_value x, mrb_value y);
112#endif
113#ifdef MRB_USE_RATIONAL
114mrb_value mrb_rational_new(mrb_state *mrb, mrb_int x, mrb_int y);
115mrb_value mrb_rational_add(mrb_state *mrb, mrb_value x, mrb_value y);
116mrb_value mrb_rational_sub(mrb_state *mrb, mrb_value x, mrb_value y);
117mrb_value mrb_rational_mul(mrb_state *mrb, mrb_value x, mrb_value y);
118mrb_value mrb_rational_div(mrb_state *mrb, mrb_value x, mrb_value y);
119void mrb_rational_copy(mrb_state *mrb, mrb_value x, mrb_value y);
120#endif
121
122#ifdef MRUBY_PROC_H
123struct RProc *mrb_closure_new(mrb_state*, const mrb_irep*);
124void mrb_proc_copy(mrb_state *mrb, struct RProc *a, struct RProc *b);
125mrb_int mrb_proc_arity(const struct RProc *p);
126struct REnv *mrb_env_new(mrb_state *mrb, struct mrb_context *c, mrb_callinfo *ci, int nstacks, mrb_value *stack, struct RClass *tc);
127void mrb_proc_merge_lvar(mrb_state *mrb, mrb_irep *irep, struct REnv *env, int num, const mrb_sym *lv, const mrb_value *stack);
128mrb_value mrb_proc_local_variables(mrb_state *mrb, const struct RProc *proc);
129const struct RProc *mrb_proc_get_caller(mrb_state *mrb, struct REnv **env);
130mrb_value mrb_proc_get_self(mrb_state *mrb, struct RProc *p, struct RClass **target_class_p);
131mrb_bool mrb_proc_eql(mrb_state *mrb, mrb_value self, mrb_value other);
132#endif
133
134/* range */
135#ifdef MRUBY_RANGE_H
136mrb_value mrb_get_values_at(mrb_state *mrb, mrb_value obj, mrb_int olen, mrb_int argc, const mrb_value *argv, mrb_value (*func)(mrb_state*, mrb_value, mrb_int));
137void mrb_gc_mark_range(mrb_state *mrb, struct RRange *r);
138#endif
139
140/* string */
141void mrb_gc_free_str(mrb_state*, struct RString*);
142uint32_t mrb_str_hash(mrb_state *mrb, mrb_value str);
143mrb_value mrb_str_dump(mrb_state *mrb, mrb_value str);
144mrb_value mrb_str_inspect(mrb_state *mrb, mrb_value str);
145mrb_bool mrb_str_beg_len(mrb_int str_len, mrb_int *begp, mrb_int *lenp);
146mrb_value mrb_str_byte_subseq(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len);
147mrb_value mrb_str_aref(mrb_state *mrb, mrb_value str, mrb_value idx, mrb_value len);
148uint32_t mrb_byte_hash(const uint8_t*, mrb_int);
149uint32_t mrb_byte_hash_step(const uint8_t*, mrb_int, uint32_t);
150
151#ifdef MRB_UTF8_STRING
152mrb_int mrb_utf8len(const char *str, const char *end);
153mrb_int mrb_utf8_strlen(const char *str, mrb_int byte_len);
154#endif
155
156/* variable */
157mrb_value mrb_vm_special_get(mrb_state*, mrb_sym);
158void mrb_vm_special_set(mrb_state*, mrb_sym, mrb_value);
159mrb_value mrb_vm_cv_get(mrb_state*, mrb_sym);
160void mrb_vm_cv_set(mrb_state*, mrb_sym, mrb_value);
161mrb_value mrb_vm_const_get(mrb_state*, mrb_sym);
162void mrb_vm_const_set(mrb_state*, mrb_sym, mrb_value);
163size_t mrb_obj_iv_tbl_memsize(mrb_value);
164mrb_value mrb_obj_iv_inspect(mrb_state*, struct RObject*);
165void mrb_obj_iv_set_force(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v);
166mrb_value mrb_mod_constants(mrb_state *mrb, mrb_value mod);
167mrb_value mrb_f_global_variables(mrb_state *mrb, mrb_value self);
168mrb_value mrb_obj_instance_variables(mrb_state*, mrb_value);
169mrb_value mrb_mod_class_variables(mrb_state*, mrb_value);
170mrb_value mrb_mod_cv_get(mrb_state *mrb, struct RClass * c, mrb_sym sym);
171mrb_bool mrb_mod_cv_defined(mrb_state *mrb, struct RClass * c, mrb_sym sym);
172mrb_bool mrb_ident_p(const char *s, mrb_int len);
173
174/* GC functions */
175void mrb_gc_mark_gv(mrb_state*);
176void mrb_gc_free_gv(mrb_state*);
177void mrb_gc_mark_iv(mrb_state*, struct RObject*);
178size_t mrb_gc_mark_iv_size(mrb_state*, struct RObject*);
179void mrb_gc_free_iv(mrb_state*, struct RObject*);
180
181/* VM */
182mrb_int mrb_ci_bidx(mrb_callinfo *ci);
183mrb_int mrb_ci_nregs(mrb_callinfo *ci);
184mrb_value mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p);
185mrb_value mrb_obj_instance_eval(mrb_state*, mrb_value);
186mrb_value mrb_mod_module_eval(mrb_state*, mrb_value);
187mrb_value mrb_f_send(mrb_state *mrb, mrb_value self);
188
189#ifdef MRB_USE_BIGINT
190mrb_value mrb_bint_new_int(mrb_state *mrb, mrb_int x);
191#ifdef MRB_INT64
192#define mrb_bint_new_int64(mrb,x) mrb_bint_new_int((mrb),(mrb_int)(x))
193#else
194mrb_value mrb_bint_new_int64(mrb_state *mrb, int64_t x);
195#endif
196mrb_value mrb_bint_new_uint64(mrb_state *mrb, uint64_t x);
197mrb_value mrb_bint_new_str(mrb_state *mrb, const char *x, mrb_int len, mrb_int base);
198mrb_value mrb_as_bint(mrb_state *mrb, mrb_value x);
199mrb_value mrb_bint_add(mrb_state *mrb, mrb_value x, mrb_value y);
200mrb_value mrb_bint_sub(mrb_state *mrb, mrb_value x, mrb_value y);
201mrb_value mrb_bint_add_d(mrb_state *mrb, mrb_value x, mrb_value y);
202mrb_value mrb_bint_sub_d(mrb_state *mrb, mrb_value x, mrb_value y);
203mrb_value mrb_bint_mul(mrb_state *mrb, mrb_value x, mrb_value y);
204mrb_value mrb_bint_div(mrb_state *mrb, mrb_value x, mrb_value y);
205mrb_value mrb_bint_divmod(mrb_state *mrb, mrb_value x, mrb_value y);
206mrb_value mrb_bint_add_ii(mrb_state *mrb, mrb_int x, mrb_int y);
207mrb_value mrb_bint_sub_ii(mrb_state *mrb, mrb_int x, mrb_int y);
208mrb_value mrb_bint_mul_ii(mrb_state *mrb, mrb_int x, mrb_int y);
209mrb_value mrb_bint_mod(mrb_state *mrb, mrb_value x, mrb_value y);
210mrb_value mrb_bint_rem(mrb_state *mrb, mrb_value x, mrb_value y);
211mrb_value mrb_bint_pow(mrb_state *mrb, mrb_value x, mrb_value y);
212mrb_value mrb_bint_powm(mrb_state *mrb, mrb_value x, mrb_value y, mrb_value z);
213mrb_value mrb_bint_and(mrb_state *mrb, mrb_value x, mrb_value y);
214mrb_value mrb_bint_or(mrb_state *mrb, mrb_value x, mrb_value y);
215mrb_value mrb_bint_xor(mrb_state *mrb, mrb_value x, mrb_value y);
216mrb_value mrb_bint_rev(mrb_state *mrb, mrb_value x);
217mrb_value mrb_bint_lshift(mrb_state *mrb, mrb_value x, mrb_int width);
218mrb_value mrb_bint_rshift(mrb_state *mrb, mrb_value x, mrb_int width);
219mrb_value mrb_bint_to_s(mrb_state *mrb, mrb_value x, mrb_int base);
220#ifndef MRB_NO_FLOAT
221mrb_value mrb_bint_new_float(mrb_state *mrb, mrb_float x);
222mrb_float mrb_bint_as_float(mrb_state *mrb, mrb_value x);
223#endif
224mrb_int mrb_bint_as_int(mrb_state *mrb, mrb_value x);
225#ifdef MRB_INT64
226#define mrb_bint_as_int64(mrb, x) mrb_bint_as_int((mrb), (x))
227#else
228int64_t mrb_bint_as_int64(mrb_state *mrb, mrb_value x);
229#endif
230uint64_t mrb_bint_as_uint64(mrb_state *mrb, mrb_value x);
231mrb_int mrb_bint_cmp(mrb_state *mrb, mrb_value x, mrb_value y);
232void mrb_gc_free_bint(mrb_state *mrb, struct RBasic *x);
233void mrb_bint_copy(mrb_state *mrb, mrb_value x, mrb_value y);
234size_t mrb_bint_memsize(mrb_value x);
235mrb_value mrb_bint_hash(mrb_state *mrb, mrb_value x);
236#endif
237
238#endif /* MRUBY_INTERNAL_H */
mruby Boolean.
mruby Symbol.
#define mrb_noreturn
Shared compiler macros.
Definition common.h:50
uint8_t mrb_code
mruby C API entry point
Definition mruby.h:146
Definition object.h:19
Class class.
Definition class.h:17
Proc class.
Definition proc.h:18
mruby error handling.
Definition error.h:17
Hash class.
Definition hash.h:18
Definition object.h:30
Definition proc.h:42
Definition range.h:36
Definition string.h:22
Definition mruby.h:175
Definition mruby.h:199
Definition irep.h:115
Definition irep.h:47
Definition irep.h:55
Definition array.h:17
Definition mruby.h:256
Definition boxing_nan.h:40