mruby/c VM Source Code release 3.4
Loading...
Searching...
No Matches
vm.h
Go to the documentation of this file.
1
15
16#ifndef MRBC_SRC_VM_H_
17#define MRBC_SRC_VM_H_
18
19/***** Feature test switches ************************************************/
20/***** System headers *******************************************************/
21//@cond
22#include "vm_config.h"
23#include <stdint.h>
24//@endcond
25
26
27/***** Local headers ********************************************************/
28#include "value.h"
29#include "class.h"
30#include "c_proc.h"
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35/***** Constat values *******************************************************/
36/***** Macros ***************************************************************/
37/***** Typedefs *************************************************************/
38//================================================================
42typedef struct IREP {
43#if defined(MRBC_DEBUG)
44 uint8_t obj_mark_[2];
45#endif
46
47 uint16_t ref_count;
48#if defined(MRBC_DEBUG)
49 uint16_t nlocals;
50#endif
51 uint16_t nregs;
52 uint16_t rlen;
53 uint16_t clen;
54 uint16_t ilen;
55#if defined(MRBC_DEBUG)
56 uint16_t plen;
57 uint16_t slen;
58#endif
59 uint16_t ofs_pools;
60 uint16_t ofs_ireps;
61
62 const uint8_t *inst;
63 const uint8_t *pool;
64
65 uint8_t data[];
70typedef struct IREP mrb_irep;
71
72// mrbc_irep manipulate macro.
74#define mrbc_irep_tbl_syms(irep) ((mrbc_sym *)(irep)->data)
75
77#define mrbc_irep_symbol_id(irep, n) mrbc_irep_tbl_syms(irep)[(n)]
78
80#define mrbc_irep_symbol_cstr(irep, n) mrbc_symid_to_str( mrbc_irep_symbol_id(irep, n) )
81
82
84#define mrbc_irep_tbl_pools(irep) \
85 ( (uint16_t *)((irep)->data + (irep)->ofs_pools) )
86
88#define mrbc_irep_pool_ptr(irep, n) \
89 ( (irep)->pool + mrbc_irep_tbl_pools(irep)[(n)] )
90
91
93#define mrbc_irep_tbl_ireps(irep) \
94 ( (mrbc_irep **)((irep)->data + (irep)->ofs_ireps) )
95
97#define mrbc_irep_child_irep(irep, n) \
98 ( mrbc_irep_tbl_ireps(irep)[(n)] )
99
100
101
102//================================================================
106typedef struct IREP_CATCH_HANDLER {
107 uint8_t type;
108 uint8_t begin[4];
109 uint8_t end[4];
110 uint8_t target[4];
112
113
114//================================================================
133typedef struct CALLINFO mrb_callinfo;
134
135
136//================================================================
140typedef struct VM {
141#if defined(MRBC_DEBUG)
142 uint8_t obj_mark_[2]; // set "VM" for debug
143#endif
144 uint8_t vm_id;
145 volatile int8_t flag_preemption;
146 unsigned int flag_need_memfree : 1;
147 unsigned int flag_stop : 1;
148 unsigned int flag_permanence : 1;
149
150 uint16_t regs_size;
151
154 const uint8_t *inst;
159
163typedef struct VM mrb_vm;
164
165
166/***** Global variables *****************************************************/
167/***** Function prototypes **************************************************/
168//@cond
169void mrbc_cleanup_vm(void);
171const char *mrbc_get_callee_name(struct VM *vm);
172mrbc_callinfo *mrbc_push_callinfo(struct VM *vm, mrbc_sym method_id, int reg_offset, int n_args);
173void mrbc_pop_callinfo(struct VM *vm);
175mrbc_vm *mrbc_vm_open(struct VM *vm);
176void mrbc_vm_close(struct VM *vm);
177void mrbc_vm_begin(struct VM *vm);
178void mrbc_vm_end(struct VM *vm);
179int mrbc_vm_run(struct VM *vm);
180//@endcond
181
182
183/***** Inline functions *****************************************************/
184//================================================================
191static inline mrbc_value * mrbc_get_self( struct VM *vm, mrbc_value *regs )
192{
193 return regs[0].tt == MRBC_TT_PROC ? &(regs[0].proc->self) : &regs[0];
194}
195
196
197//================================================================
205static inline int mrbc_c_block_given( struct VM *vm, mrbc_value v[], int argc )
206{
207 int ofs = 1 + (v[argc+1].tt == MRBC_TT_HASH);
208
209 return v[argc + ofs].tt == MRBC_TT_PROC;
210}
211
212#ifdef __cplusplus
213}
214#endif
215#endif
mruby/c Proc class
struct RProc mrbc_proc
Proc object.
Class related functions.
struct RClass mrbc_class
Class object.
Call information.
Definition vm.h:118
uint8_t is_called_super
this is called by op_super.
Definition vm.h:130
const mrbc_irep * cur_irep
copy from mrbc_vm.
Definition vm.h:120
mrbc_sym method_id
called method ID.
Definition vm.h:127
struct RHash * karg_keep
keyword argument backup for OP_ARGARY.
Definition vm.h:126
uint8_t n_args
num of arguments.
Definition vm.h:129
mrbc_class * target_class
copy from mrbc_vm.
Definition vm.h:123
struct CALLINFO * prev
previous linked list.
Definition vm.h:119
mrbc_class * own_class
class that owns method.
Definition vm.h:125
const uint8_t * inst
copy from mrbc_vm.
Definition vm.h:121
mrbc_value * cur_regs
copy from mrbc_vm.
Definition vm.h:122
uint8_t reg_offset
register offset after call.
Definition vm.h:128
IREP Catch Handler.
Definition vm.h:106
uint8_t target[4]
The address to jump to if a match is made.
Definition vm.h:110
uint8_t begin[4]
The starting address to match the handler. Includes this.
Definition vm.h:108
uint8_t type
enum mrb_catch_type, 1 byte. 0=rescue, 1=ensure
Definition vm.h:107
uint8_t end[4]
The endpoint address that matches the handler. Not Includes this.
Definition vm.h:109
IREP Internal REPresentation.
Definition vm.h:42
uint16_t ofs_pools
offset of data->tbl_pools.
Definition vm.h:59
const uint8_t * inst
pointer to instruction in RITE binary
Definition vm.h:62
const uint8_t * pool
pointer to pool in RITE binary
Definition vm.h:63
uint16_t ilen
num of bytes in OpCode
Definition vm.h:54
uint16_t ref_count
reference counter
Definition vm.h:47
uint16_t ofs_ireps
offset of data->tbl_ireps. (32bit aligned)
Definition vm.h:60
uint16_t rlen
num of child IREP blocks
Definition vm.h:52
uint16_t clen
num of catch handlers
Definition vm.h:53
uint16_t nregs
num of register variables
Definition vm.h:51
uint8_t data[]
Definition vm.h:65
Hash object.
Definition c_hash.h:40
struct RProc * proc
Definition value.h:162
mrbc_vtype tt
Definition value.h:152
mrbc_value self
Definition c_proc.h:47
Virtual Machine.
Definition vm.h:140
mrbc_class * target_class
Target class.
Definition vm.h:156
unsigned int flag_need_memfree
Definition vm.h:146
uint16_t regs_size
size of regs[]
Definition vm.h:150
const mrbc_irep * cur_irep
IREP currently running.
Definition vm.h:153
unsigned int flag_stop
Definition vm.h:147
mrbc_callinfo * callinfo_tail
Last point of CALLINFO link.
Definition vm.h:157
uint8_t vm_id
vm_id : 1..MAX_VM_COUNT
Definition vm.h:144
volatile int8_t flag_preemption
Definition vm.h:145
mrbc_value exception
Raised exception or nil.
Definition vm.h:160
unsigned int flag_permanence
Definition vm.h:148
const uint8_t * inst
Instruction pointer.
Definition vm.h:154
mrbc_value regs[]
Definition vm.h:161
mrbc_value * cur_regs
Current register top.
Definition vm.h:155
mrbc_proc * ret_blk
Return block.
Definition vm.h:158
mrbc_irep * top_irep
IREP tree top.
Definition vm.h:152
mruby/c value definitions
int16_t mrbc_sym
mruby/c symbol ID
Definition value.h:59
@ MRBC_TT_PROC
Proc.
Definition value.h:93
@ MRBC_TT_HASH
Hash.
Definition value.h:97
struct RObject mrbc_value
Definition value.h:174
mrbc_callinfo * mrbc_push_callinfo(struct VM *vm, mrbc_sym method_id, int reg_offset, int n_args)
Definition vm.c:219
mrbc_vm * mrbc_vm_new(int regs_size)
Definition vm.c:292
void mrbc_vm_end(struct VM *vm)
Definition vm.c:375
void mrbc_pop_callinfo(struct VM *vm)
Definition vm.c:246
mrbc_vm * mrbc_vm_open(struct VM *vm)
Definition vm.c:316
mrbc_sym mrbc_get_callee_symid(struct VM *vm)
Definition vm.c:192
void mrbc_vm_begin(struct VM *vm)
Definition vm.c:348
void mrbc_cleanup_vm(void)
Definition vm.c:180
int mrbc_vm_run(struct VM *vm)
Definition vm.c:2889
const char * mrbc_get_callee_name(struct VM *vm)
Definition vm.c:209
void mrbc_vm_close(struct VM *vm)
Definition vm.c:411
static mrbc_value * mrbc_get_self(struct VM *vm, mrbc_value *regs)
Definition vm.h:191
struct CALLINFO mrbc_callinfo
Call information.
struct IREP_CATCH_HANDLER mrbc_irep_catch_handler
IREP Catch Handler.
static int mrbc_c_block_given(struct VM *vm, mrbc_value v[], int argc)
Definition vm.h:205
struct CALLINFO mrb_callinfo
Definition vm.h:133
struct IREP mrbc_irep
IREP Internal REPresentation.
struct VM mrbc_vm
Virtual Machine.
struct VM mrb_vm
Definition vm.h:163
struct IREP mrb_irep
Definition vm.h:70
Global configuration of mruby/c VM's.