summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-11-07 03:54:22 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-11-07 03:54:22 +0900
commite92d4e2680716d3e16a264e46394cb6e458699f9 (patch)
tree4b0a9bb35ba4e75126436ce71ad5ece67b7193cd /include
parentf80401de6c9b7dd9e0676c4414aae7a6e033ac5f (diff)
downloadmruby-e92d4e2680716d3e16a264e46394cb6e458699f9.tar.gz
mruby-e92d4e2680716d3e16a264e46394cb6e458699f9.zip
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.
Diffstat (limited to 'include')
-rw-r--r--include/mruby.h1
-rw-r--r--include/mruby/dump.h22
-rw-r--r--include/mruby/irep.h5
3 files changed, 9 insertions, 19 deletions
diff --git a/include/mruby.h b/include/mruby.h
index 445bc5e11..6f2f12320 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -256,7 +256,6 @@ mrb_value mrb_str_new_static(mrb_state *mrb, const char *p, size_t len);
mrb_state* mrb_open(void);
mrb_state* mrb_open_allocf(mrb_allocf, void *ud);
-void mrb_irep_free(mrb_state*, struct mrb_irep*);
void mrb_close(mrb_state*);
mrb_value mrb_top_self(mrb_state *);
diff --git a/include/mruby/dump.h b/include/mruby/dump.h
index e75be9f07..c21f225c0 100644
--- a/include/mruby/dump.h
+++ b/include/mruby/dump.h
@@ -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 {
diff --git a/include/mruby/irep.h b/include/mruby/irep.h
index 56e043e74..83cd4b9e8 100644
--- a/include/mruby/irep.h
+++ b/include/mruby/irep.h
@@ -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" { */