summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-06-29 08:34:56 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-10-12 16:21:22 +0900
commit3d8a38bea4de5ca3a65ec9bce9359b9c62326f9f (patch)
tree3f8ebdcc96896f7cdde31064026ffa588c77776d /src
parent639946a006c29f648551512af8aa0bb0cd969412 (diff)
downloadmruby-3d8a38bea4de5ca3a65ec9bce9359b9c62326f9f.tar.gz
mruby-3d8a38bea4de5ca3a65ec9bce9359b9c62326f9f.zip
You don't need to keep index in local variables info in `irep`.
Diffstat (limited to 'src')
-rw-r--r--src/codedump.c17
-rw-r--r--src/dump.c14
-rw-r--r--src/load.c12
3 files changed, 14 insertions, 29 deletions
diff --git a/src/codedump.c b/src/codedump.c
index 67bd8754d..24fc94ef7 100644
--- a/src/codedump.c
+++ b/src/codedump.c
@@ -9,17 +9,9 @@
static void
print_r(mrb_state *mrb, const mrb_irep *irep, size_t n)
{
- size_t i;
-
if (n == 0) return;
-
- for (i=0; i+1<irep->nlocals; i++) {
- if (irep->lv[i].r == n) {
- mrb_sym sym = irep->lv[i].name;
- printf(" R%d:%s", (int)n, mrb_sym_dump(mrb, sym));
- break;
- }
- }
+ if (n > irep->nlocals) return;
+ printf(" R%d:%s", (int)n, mrb_sym_dump(mrb, irep->lv[n-1]));
}
static void
@@ -82,9 +74,8 @@ codedump(mrb_state *mrb, const mrb_irep *irep)
printf("local variable names:\n");
for (i = 1; i < irep->nlocals; ++i) {
- char const *s = mrb_sym_dump(mrb, irep->lv[i - 1].name);
- int n = irep->lv[i - 1].r ? irep->lv[i - 1].r : i;
- printf(" R%d:%s\n", n, s ? s : "");
+ char const *s = mrb_sym_dump(mrb, irep->lv[i - 1]);
+ printf(" R%d:%s\n", i, s ? s : "");
}
}
diff --git a/src/dump.c b/src/dump.c
index 8cd69cd29..aeb23d033 100644
--- a/src/dump.c
+++ b/src/dump.c
@@ -585,7 +585,7 @@ create_lv_sym_table(mrb_state *mrb, const mrb_irep *irep, mrb_sym **syms, uint32
}
for (i = 0; i + 1 < irep->nlocals; ++i) {
- mrb_sym const name = irep->lv[i].name;
+ mrb_sym const name = irep->lv[i];
if (name == 0) continue;
if (find_filename_index(*syms, *syms_len, name) != -1) continue;
@@ -628,16 +628,14 @@ write_lv_record(mrb_state *mrb, const mrb_irep *irep, uint8_t **start, mrb_sym c
int i;
for (i = 0; i + 1 < irep->nlocals; ++i) {
- if (irep->lv[i].name == 0) {
+ if (irep->lv[i] == 0) {
cur += uint16_to_bin(RITE_LV_NULL_MARK, cur);
- cur += uint16_to_bin(0, cur);
}
else {
- int const sym_idx = find_filename_index(syms, syms_len, irep->lv[i].name);
+ int const sym_idx = find_filename_index(syms, syms_len, irep->lv[i]);
mrb_assert(sym_idx != -1); /* local variable name must be in syms */
cur += uint16_to_bin(sym_idx, cur);
- cur += uint16_to_bin(irep->lv[i].r, cur);
}
}
@@ -656,7 +654,7 @@ get_lv_record_size(mrb_state *mrb, const mrb_irep *irep)
size_t ret = 0;
int i;
- ret += (sizeof(uint16_t) + sizeof(uint16_t)) * (irep->nlocals - 1);
+ ret += sizeof(uint16_t) * (irep->nlocals - 1);
for (i = 0; i < irep->rlen; ++i) {
ret += get_lv_record_size(mrb, irep->reps[i]);
@@ -1033,9 +1031,9 @@ dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp,
/* dump lv */
if (irep->lv) {
len=irep->nlocals;
- fprintf(fp, "static const struct mrb_lvinfo %s_lv_%d[%d] = {", name, n, len);
+ fprintf(fp, "static const mrb_sym %s_lv_%d[%d] = {", name, n, len);
for (i=0; i+1<len; i++) {
- fprintf(fp, "{%u,%d},\n", irep->lv[i].name, irep->lv[i].r);
+ fprintf(fp, "%u, ", irep->lv[i]);
}
fputs("};\n", fp);
}
diff --git a/src/load.c b/src/load.c
index 2002af3ab..1118fc2ad 100644
--- a/src/load.c
+++ b/src/load.c
@@ -426,28 +426,24 @@ static int
read_lv_record(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, size_t *record_len, mrb_sym const *syms, uint32_t syms_len)
{
const uint8_t *bin = start;
- struct mrb_lvinfo *lv;
+ mrb_sym *lv;
ptrdiff_t diff;
int i;
- irep->lv = lv = (struct mrb_lvinfo*)mrb_malloc(mrb, sizeof(struct mrb_lvinfo) * (irep->nlocals - 1));
+ irep->lv = lv = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) * (irep->nlocals - 1));
for (i = 0; i + 1< irep->nlocals; ++i) {
uint16_t const sym_idx = bin_to_uint16(bin);
bin += sizeof(uint16_t);
if (sym_idx == RITE_LV_NULL_MARK) {
- lv[i].name = 0;
- lv[i].r = 0;
+ lv[i] = 0;
}
else {
if (sym_idx >= syms_len) {
return MRB_DUMP_GENERAL_FAILURE;
}
- lv[i].name = syms[sym_idx];
-
- lv[i].r = bin_to_uint16(bin);
+ lv[i] = syms[sym_idx];
}
- bin += sizeof(uint16_t);
}
for (i = 0; i < irep->rlen; ++i) {