mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
modified to use irep->reps to reference child ireps. preparation for
removing irep array from mrb_state. note that instructions OP_LAMBDA, OP_EXEC and OP_EPUSH are incompatible, and dumped mrb format has changed.
This commit is contained in:
+6
-16
@@ -12,17 +12,15 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#include "mruby.h"
|
||||
#include "mruby/irep.h"
|
||||
|
||||
#ifdef ENABLE_STDIO
|
||||
int mrb_dump_irep_binary(mrb_state*, size_t, int, FILE*);
|
||||
int mrb_dump_irep_cfunc(mrb_state *mrb, size_t n, int, FILE *f, const char *initname);
|
||||
int32_t mrb_read_irep_file(mrb_state*, FILE*);
|
||||
#endif
|
||||
int32_t mrb_read_irep(mrb_state*, const uint8_t*);
|
||||
|
||||
#ifdef ENABLE_STDIO
|
||||
int mrb_dump_irep_binary(mrb_state*, mrb_irep*, int, FILE*);
|
||||
int mrb_dump_irep_cfunc(mrb_state *mrb, mrb_irep*, int, FILE *f, const char *initname);
|
||||
mrb_irep *mrb_read_irep_file(mrb_state*, FILE*);
|
||||
mrb_value mrb_load_irep_file(mrb_state*,FILE*);
|
||||
#endif
|
||||
mrb_irep *mrb_read_irep(mrb_state*, const uint8_t*);
|
||||
|
||||
/* dump/load error code
|
||||
*
|
||||
@@ -43,7 +41,7 @@ mrb_value mrb_load_irep_file(mrb_state*,FILE*);
|
||||
|
||||
/* Rite Binary File header */
|
||||
#define RITE_BINARY_IDENTIFIER "RITE"
|
||||
#define RITE_BINARY_FORMAT_VER "0001"
|
||||
#define RITE_BINARY_FORMAT_VER "0002"
|
||||
#define RITE_COMPILER_NAME "MATZ"
|
||||
#define RITE_COMPILER_VERSION "0000"
|
||||
|
||||
@@ -79,22 +77,14 @@ struct rite_section_irep_header {
|
||||
RITE_SECTION_HEADER;
|
||||
|
||||
uint8_t rite_version[4]; // Rite Instruction Specification Version
|
||||
uint8_t nirep[2]; // Number of ireps
|
||||
uint8_t sirep[2]; // Start index
|
||||
};
|
||||
|
||||
struct rite_section_lineno_header {
|
||||
RITE_SECTION_HEADER;
|
||||
|
||||
uint8_t nirep[2]; // Number of ireps
|
||||
uint8_t sirep[2]; // Start index
|
||||
};
|
||||
|
||||
struct rite_section_debug_header {
|
||||
RITE_SECTION_HEADER;
|
||||
|
||||
uint8_t nirep[2]; // Number of ireps
|
||||
uint8_t sirep[2]; // Start index
|
||||
};
|
||||
|
||||
struct rite_binary_footer {
|
||||
|
||||
@@ -13,7 +13,6 @@ extern "C" {
|
||||
|
||||
/* Program data array struct */
|
||||
typedef struct mrb_irep {
|
||||
uint32_t idx;
|
||||
uint16_t nlocals; /* Number of local variables */
|
||||
uint16_t nregs; /* Number of register variables */
|
||||
uint8_t flags;
|
||||
@@ -21,19 +20,21 @@ typedef struct mrb_irep {
|
||||
mrb_code *iseq;
|
||||
mrb_value *pool;
|
||||
mrb_sym *syms;
|
||||
struct mrb_irep **reps;
|
||||
|
||||
/* debug info */
|
||||
const char *filename;
|
||||
uint16_t *lines;
|
||||
struct mrb_irep_debug_info* debug_info;
|
||||
|
||||
size_t ilen, plen, slen;
|
||||
size_t ilen, plen, slen, rlen;
|
||||
} mrb_irep;
|
||||
|
||||
#define MRB_ISEQ_NO_FREE 1
|
||||
|
||||
mrb_irep *mrb_add_irep(mrb_state *mrb);
|
||||
mrb_value mrb_load_irep(mrb_state*, const uint8_t*);
|
||||
void mrb_irep_free(mrb_state*, struct mrb_irep*);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
} /* extern "C" { */
|
||||
|
||||
Reference in New Issue
Block a user