summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog26
-rw-r--r--blockinlining.c2
-rw-r--r--compile.c102
-rw-r--r--compile.h2
-rw-r--r--eval.c21
-rw-r--r--iseq.c63
-rw-r--r--proc.c2
-rw-r--r--version.h6
-rw-r--r--vm.c6
-rw-r--r--vm_dump.c2
-rw-r--r--yarvcore.h7
11 files changed, 136 insertions, 103 deletions
diff --git a/ChangeLog b/ChangeLog
index fffe7294ba..5fd9c8c3ff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,29 @@
+Sun Feb 25 09:39:50 2007 Koichi Sasada <ko1@atdot.net>
+
+ * yarvcore.h:
+ rename:
+ rb_iseq_t#file_name -> filename
+ rb_iseq_t#local_tbl -> local_table
+ add:
+ rb_iseq_t#local_table_size
+
+ * compile.c: separate local_table_size and local_size
+ (local variable size)
+
+ * blockinlining.c: apply above rename.
+
+ * compile.h: ditto.
+
+ * eval.c: ditto.
+
+ * iseq.c: ditto.
+
+ * proc.c: ditto.
+
+ * vm.c: ditto.
+
+ * vm_dump.c: ditto.
+
Sun Feb 25 10:27:17 2007 Minero Aoki <aamine@loveruby.net>
* bootstraptest/runner.rb: add lib/ to load path.
diff --git a/blockinlining.c b/blockinlining.c
index b2c2f04412..f5c6a41d87 100644
--- a/blockinlining.c
+++ b/blockinlining.c
@@ -43,7 +43,7 @@ yarv_iseq_special_block(rb_iseq_t *iseq, void *builder)
if (iseq->parent_iseq) {
parent = iseq->parent_iseq->self;
}
- iseqval = rb_iseq_new_with_bopt(iseq->node, iseq->name, iseq->file_name,
+ iseqval = rb_iseq_new_with_bopt(iseq->node, iseq->name, iseq->filename,
parent, iseq->type,
GC_GUARDED_PTR(builder));
if (0) {
diff --git a/compile.c b/compile.c
index d498f4a3e2..d75d8242ac 100644
--- a/compile.c
+++ b/compile.c
@@ -773,9 +773,9 @@ set_exception_tbl(rb_iseq_t *iseq)
if (!id_dollar_bang) {
id_dollar_bang = rb_intern("#$!");
}
- iseq->local_tbl = (ID *)ALLOC_N(ID *, 1);
- iseq->local_size = 1;
- iseq->local_tbl[0] = id_dollar_bang;
+ iseq->local_table = (ID *)ALLOC_N(ID *, 1);
+ iseq->local_table_size = iseq->local_size = 1;
+ iseq->local_table[0] = id_dollar_bang;
return COMPILE_OK;
}
@@ -904,13 +904,13 @@ search_block_local_parameters(rb_iseq_t *iseq, NODE * lnode)
int i, size = RARRAY_LEN(local_vars);
if (size > 0) {
- iseq->local_tbl = ALLOC_N(ID, size);
+ iseq->local_table = ALLOC_N(ID, size);
for (i = 0; i < size; i++) {
- iseq->local_tbl[i] = SYM2ID(RARRAY_PTR(local_vars)[i]);
- debugi("block local variable", iseq->local_tbl[i]);
+ iseq->local_table[i] = SYM2ID(RARRAY_PTR(local_vars)[i]);
+ debugi("block local variable", iseq->local_table[i]);
}
}
- iseq->local_size = size;
+ iseq->local_table_size = iseq->local_size = size;
}
return node;
}
@@ -1013,14 +1013,14 @@ set_block_local_tbl(rb_iseq_t *iseq, NODE * node, LINK_ANCHOR *anchor)
local_tbl[i] = id;
}
- if (iseq->local_tbl) {
+ if (iseq->local_table) {
/* copy from old local tbl and delete it */
for (i=1; i<iseq->local_size; i++) {
- local_tbl[argc + i - 1] = iseq->local_tbl[i];
+ local_tbl[argc + i - 1] = iseq->local_table[i];
}
- ruby_xfree(iseq->local_tbl);
+ ruby_xfree(iseq->local_table);
}
- iseq->local_tbl = local_tbl;
+ iseq->local_table = local_tbl;
iseq->local_size = local_size;
iseq->argc = argc;
break;
@@ -1051,8 +1051,9 @@ static int
get_dyna_var_idx_at_raw(rb_iseq_t *iseq, ID id)
{
int i;
- for (i = 0; i < iseq->local_size; i++) {
- if (iseq->local_tbl[i] == id) {
+
+ for (i = 0; i < iseq->local_table_size; i++) {
+ if (iseq->local_table[i] == id) {
return i;
}
}
@@ -1060,6 +1061,18 @@ get_dyna_var_idx_at_raw(rb_iseq_t *iseq, ID id)
}
static int
+get_local_var_idx(rb_iseq_t *iseq, ID id)
+{
+ int idx = get_dyna_var_idx_at_raw(iseq->local_iseq, id);
+
+ if (idx == -1) {
+ rb_bug("get_local_var_idx: -1");
+ }
+
+ return idx;
+}
+
+static int
get_dyna_var_idx(rb_iseq_t *iseq, ID id, int *level, int *ls)
{
int lv = 0, idx;
@@ -1073,6 +1086,8 @@ get_dyna_var_idx(rb_iseq_t *iseq, ID id, int *level, int *ls)
iseq = iseq->parent_iseq;
lv++;
}
+
+ rb_bug("get_dyna_var_idx: -1");
return -1;
}
@@ -1089,6 +1104,7 @@ set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_arg)
ID post_start_id = 0;
int post_len = 0;
NODE *node_init = 0;
+ int d = iseq->local_size - iseq->local_table_size;
iseq->argc = node_arg->nd_frml;
node_opt = node_arg->nd_opt;
@@ -1142,16 +1158,17 @@ set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_arg)
}
if ((long)rest_id == -1) {
- iseq->arg_rest = get_dyna_var_idx_at_raw(iseq, 0 /* dummy var */);
+ iseq->arg_rest = get_dyna_var_idx_at_raw(iseq, 0 /* dummy var */) + d;
}
else if (rest_id) {
- iseq->arg_rest = get_dyna_var_idx_at_raw(iseq, rest_id);
+ iseq->arg_rest = get_dyna_var_idx_at_raw(iseq, rest_id) + d;
+ }
+ if (iseq->arg_rest == -1) {
+ rb_bug("arg_rest: -1");
}
- if (iseq->arg_rest == -1) rb_bug("arg_rest: -1");
-
if (block_id) {
- iseq->arg_block = get_dyna_var_idx_at_raw(iseq, block_id);
+ iseq->arg_block = get_dyna_var_idx_at_raw(iseq, block_id) + d;
}
if (iseq->arg_rest != 0 || iseq->arg_opts != 0 || iseq->arg_block != 0) {
@@ -1238,17 +1255,22 @@ static int
set_localtbl(rb_iseq_t *iseq, ID *tbl)
{
int size;
+
if (tbl) {
- size = *tbl - 2 /* $~, $_ */ + 1 /* svar location */ ;
+ size = *tbl - 2 /* $~, $_ */;
}
else {
- size = 1;
+ size = 0;
}
- iseq->local_tbl = (ID *)ALLOC_N(ID *, size);
- if (tbl && size > 1) {
- MEMCPY(iseq->local_tbl + 1, tbl + 3, ID *, size - 1);
+
+ if (size > 0) {
+ iseq->local_table = (ID *)ALLOC_N(ID *, size);
+ MEMCPY(iseq->local_table, tbl + 3 /* size, $~, $_ */, ID *, size);
}
- iseq->local_size = size;
+
+ iseq->local_table_size = size;
+ iseq->local_size = size + 1 /* svar */;
+
return COMPILE_OK;
}
@@ -1263,10 +1285,10 @@ set_localtbl_eval(rb_iseq_t *iseq, ID *tbl)
size = 0;
}
if (tbl) {
- iseq->local_tbl = (ID *)ALLOC_N(ID *, size);
- MEMCPY(iseq->local_tbl, tbl + 1, ID *, size);
+ iseq->local_table = (ID *)ALLOC_N(ID *, size);
+ MEMCPY(iseq->local_table, tbl + 1, ID *, size);
}
- iseq->local_size = size;
+ iseq->local_table_size = iseq->local_size = size;
return COMPILE_OK;
}
@@ -3354,8 +3376,10 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
}
case NODE_LASGN:{
- int idx = iseq->local_iseq->local_size + 2 - node->nd_cnt;
- debugs("lvar: %d\n", idx);
+ ID id = node->nd_vid;
+ int idx = iseq->local_iseq->local_size - get_local_var_idx(iseq, id);
+
+ debugs("lvar: %s idx: %d\n", rb_id2name(id), idx);
COMPILE(ret, "lvalue", node->nd_value);
if (!poped) {
@@ -3962,8 +3986,10 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
}
case NODE_LVAR:{
if (!poped) {
- int idx = iseq->local_iseq->local_size + 2 - node->nd_cnt;
- debugs("idx: %d\n", idx);
+ ID id = node->nd_vid;
+ int idx = iseq->local_iseq->local_size - get_local_var_idx(iseq, id);
+
+ debugs("id: %s idx: %d\n", rb_id2name(id), idx);
ADD_INSN1(ret, nd_line(node), getlocal, INT2FIX(idx));
}
break;
@@ -4029,12 +4055,12 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
break;
}
case NODE_NTH_REF:{
- ADD_INSN2(ret, nd_line(node), getspecial, INT2FIX(node->nd_cnt),
+ ADD_INSN2(ret, nd_line(node), getspecial, INT2FIX(1) /* '~' */,
INT2FIX(node->nd_nth << 1));
break;
}
case NODE_BACK_REF:{
- ADD_INSN2(ret, nd_line(node), getspecial, INT2FIX(node->nd_cnt),
+ ADD_INSN2(ret, nd_line(node), getspecial, INT2FIX(1) /* '~' */,
INT2FIX(0x01 | (node->nd_nth << 1)));
break;
}
@@ -4195,11 +4221,6 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
COMPILE_ERROR(("BUG: unknown node: NODE_TO_ARY"));
break;
}
- case NODE_BLOCK_ARG:{
- iseq->arg_block = node->nd_cnt - 2 + 1;
- iseq->arg_simple = 0;
- break;
- }
case NODE_BLOCK_PASS:{
/* OK */
COMPILE_ERROR(("BUG: unknown node: NODE_BLOCK_PASS"));
@@ -4987,8 +5008,9 @@ iseq_build_from_ary(rb_iseq_t *iseq, VALUE line,
}
iseq->local_size = opt + RARRAY_LEN(locals);
- iseq->local_tbl = (ID *)ALLOC_N(ID *, iseq->local_size);
- tbl = iseq->local_tbl + opt;
+ iseq->local_table_size = iseq->local_size;
+ iseq->local_table = (ID *)ALLOC_N(ID *, iseq->local_size);
+ tbl = iseq->local_table + opt;
for (i=0; i<RARRAY_LEN(locals); i++) {
tbl[i] = SYM2ID(RARRAY_PTR(locals)[i]);
diff --git a/compile.h b/compile.h
index f1e7bfa86a..d2adee60d1 100644
--- a/compile.h
+++ b/compile.h
@@ -103,7 +103,7 @@ r_value(VALUE value)
#define NEW_LABEL(l) new_label_body(iseq, l)
#define iseq_filename(iseq) \
- (((rb_iseq_t*)DATA_PTR(iseq))->file_name)
+ (((rb_iseq_t*)DATA_PTR(iseq))->filename)
#define NEW_ISEQVAL(node, name, type) \
new_child_iseq(iseq, node, name, 0, type)
diff --git a/eval.c b/eval.c
index a728a9eeba..eea1098c05 100644
--- a/eval.c
+++ b/eval.c
@@ -1881,7 +1881,7 @@ rb_sourcefile(void)
{
rb_iseq_t *iseq = GET_THREAD()->cfp->iseq;
if (RUBY_VM_NORMAL_ISEQ_P(iseq)) {
- return RSTRING_PTR(iseq->file_name);
+ return RSTRING_PTR(iseq->filename);
}
return 0;
}
@@ -1909,6 +1909,7 @@ eval(VALUE self, VALUE src, VALUE scope, char *file, int line)
file = ruby_sourcefile;
line = ruby_sourceline;
}
+
PUSH_TAG(PROT_NONE);
if ((state = EXEC_TAG()) == 0) {
rb_iseq_t *iseq;
@@ -1935,7 +1936,6 @@ eval(VALUE self, VALUE src, VALUE scope, char *file, int line)
th->base_block->iseq = cfp->iseq; /* TODO */
}
-
/* make eval iseq */
th->parse_in_eval++;
iseqval = th_compile(th, src, rb_str_new2(file), INT2FIX(line));
@@ -1958,6 +1958,7 @@ eval(VALUE self, VALUE src, VALUE scope, char *file, int line)
stored_cref_stack =
th_set_special_cref(th, env->block.lfp, stored_cref_stack);
}
+
/* kick */
result = th_eval_body(th);
}
@@ -2797,12 +2798,8 @@ rb_f_local_variables(void)
while (1) {
if (cfp->iseq) {
- int start = 0;
- if (cfp->lfp == cfp->dfp) {
- start = 1;
- }
- for (i = start; i < cfp->iseq->local_size; i++) {
- ID lid = cfp->iseq->local_tbl[i];
+ for (i = 0; i < cfp->iseq->local_table_size; i++) {
+ ID lid = cfp->iseq->local_table[i];
if (lid) {
rb_ary_push(ary, rb_str_new2(rb_id2name(lid)));
}
@@ -2942,10 +2939,11 @@ rb_dvar_defined(ID id)
iseq->type == ISEQ_TYPE_ENSURE ||
iseq->type == ISEQ_TYPE_EVAL) {
int i;
+
/* printf("local size: %d\n", iseq->local_size); */
- for (i = 0; i < iseq->local_size; i++) {
+ for (i = 0; i < iseq->local_table_size; i++) {
/* printf("id (%4d): %s\n", i, rb_id2name(iseq->local_tbl[i])); */
- if (iseq->local_tbl[i] == id) {
+ if (iseq->local_table[i] == id) {
return Qtrue;
}
}
@@ -2994,8 +2992,7 @@ rb_scope_base_local_tbl_id(int i)
case 1:
return rb_intern("$~");
default:
- return th->base_block->iseq->local_iseq->
- local_tbl[i - 1 /* tbl[0] is reserved by svar */ ];
+ return th->base_block->iseq->local_iseq->local_table[i-2];
}
}
diff --git a/iseq.c b/iseq.c
index 1fc0cff963..050ad03936 100644
--- a/iseq.c
+++ b/iseq.c
@@ -47,7 +47,7 @@ iseq_free(void *ptr)
iseq = ptr;
/* It's possible that strings are freed
* GC_INFO("%s @ %s\n", RSTRING_PTR(iseq->name),
- * RSTRING_PTR(iseq->file_name));
+ * RSTRING_PTR(iseq->filename));
*/
if (iseq->iseq != iseq->iseq_encoded) {
FREE_UNLESS_NULL(iseq->iseq_encoded);
@@ -55,7 +55,7 @@ iseq_free(void *ptr)
FREE_UNLESS_NULL(iseq->iseq);
FREE_UNLESS_NULL(iseq->insn_info_tbl);
- FREE_UNLESS_NULL(iseq->local_tbl);
+ FREE_UNLESS_NULL(iseq->local_table);
FREE_UNLESS_NULL(iseq->catch_table);
FREE_UNLESS_NULL(iseq->arg_opt_tbl);
compile_data_free(iseq->compile_data);
@@ -72,10 +72,10 @@ iseq_mark(void *ptr)
if (ptr) {
iseq = ptr;
- GC_INFO("%s @ %s\n", RSTRING_PTR(iseq->name), RSTRING_PTR(iseq->file_name));
+ GC_INFO("%s @ %s\n", RSTRING_PTR(iseq->name), RSTRING_PTR(iseq->filename));
MARK_UNLESS_NULL(iseq->iseq_mark_ary);
MARK_UNLESS_NULL(iseq->name);
- MARK_UNLESS_NULL(iseq->file_name);
+ MARK_UNLESS_NULL(iseq->filename);
MARK_UNLESS_NULL((VALUE)iseq->cref_stack);
MARK_UNLESS_NULL(iseq->klass);
MARK_UNLESS_NULL((VALUE)iseq->node);
@@ -103,13 +103,13 @@ iseq_alloc(VALUE klass)
static VALUE
prepare_iseq_build(rb_iseq_t *iseq,
- VALUE name, VALUE file_name,
+ VALUE name, VALUE filename,
VALUE parent, VALUE type, VALUE block_opt,
const rb_compile_option_t *option)
{
iseq->name = name;
iseq->defined_method_id = 0;
- iseq->file_name = file_name;
+ iseq->filename = filename;
iseq->iseq_mark_ary = rb_ary_new();
RBASIC(iseq->iseq_mark_ary)->klass = 0;
@@ -251,15 +251,15 @@ make_compile_option_value(rb_compile_option_t *option)
}
VALUE
-rb_iseq_new(NODE *node, VALUE name, VALUE file_name,
+rb_iseq_new(NODE *node, VALUE name, VALUE filename,
VALUE parent, VALUE type)
{
- return rb_iseq_new_with_opt(node, name, file_name, parent, type,
+ return rb_iseq_new_with_opt(node, name, filename, parent, type,
&COMPILE_OPTION_DEFAULT);
}
static VALUE
-rb_iseq_new_with_bopt_and_opt(NODE *node, VALUE name, VALUE file_name,
+rb_iseq_new_with_bopt_and_opt(NODE *node, VALUE name, VALUE filename,
VALUE parent, VALUE type, VALUE bopt,
const rb_compile_option_t *option)
{
@@ -269,26 +269,26 @@ rb_iseq_new_with_bopt_and_opt(NODE *node, VALUE name, VALUE file_name,
GetISeqPtr(self, iseq);
iseq->self = self;
- prepare_iseq_build(iseq, name, file_name, parent, type, bopt, option);
+ prepare_iseq_build(iseq, name, filename, parent, type, bopt, option);
iseq_compile(self, node);
cleanup_iseq_build(iseq);
return self;
}
VALUE
-rb_iseq_new_with_opt(NODE *node, VALUE name, VALUE file_name,
+rb_iseq_new_with_opt(NODE *node, VALUE name, VALUE filename,
VALUE parent, VALUE type,
const rb_compile_option_t *option)
{
- return rb_iseq_new_with_bopt_and_opt(node, name, file_name, parent, type,
+ return rb_iseq_new_with_bopt_and_opt(node, name, filename, parent, type,
Qfalse, option);
}
VALUE
-rb_iseq_new_with_bopt(NODE *node, VALUE name, VALUE file_name,
+rb_iseq_new_with_bopt(NODE *node, VALUE name, VALUE filename,
VALUE parent, VALUE type, VALUE bopt)
{
- return rb_iseq_new_with_bopt_and_opt(node, name, file_name, parent, type,
+ return rb_iseq_new_with_bopt_and_opt(node, name, filename, parent, type,
bopt, &COMPILE_OPTION_DEFAULT);
}
@@ -466,7 +466,7 @@ iseq_inspect(VALUE self)
rb_iseq_t *iseq = iseq_check(self);
snprintf(buff, sizeof(buff), "<ISeq:%s@%s>",
- RSTRING_PTR(iseq->name), RSTRING_PTR(iseq->file_name));
+ RSTRING_PTR(iseq->name), RSTRING_PTR(iseq->filename));
return rb_str_new2(buff);
}
@@ -542,8 +542,8 @@ insn_operand_intern(rb_iseq_t *iseq,
case TS_LINDEX:
{
rb_iseq_t *ip = iseq->local_iseq;
- int lidx = ip->local_size - op + 1;
- ID id = ip->local_tbl[lidx];
+ int lidx = ip->local_size - op;
+ ID id = ip->local_table[lidx];
if (id) {
ret = rb_str_new2(rb_id2name(id));
@@ -561,9 +561,7 @@ insn_operand_intern(rb_iseq_t *iseq,
for (i = 0; i < level; i++) {
ip = ip->parent_iseq;
}
- ret =
- rb_str_new2(rb_id2name
- (ip->local_tbl[ip->local_size - op]));
+ ret = rb_str_new2(rb_id2name(ip->local_table[ip->local_size - op]));
}
else {
ret = rb_inspect(INT2FIX(op));
@@ -740,23 +738,16 @@ ruby_iseq_disasm(VALUE self)
}
/* show local table information */
- tbl = iseqdat->local_tbl;
+ tbl = iseqdat->local_table;
if (tbl) {
- int opt = 0;
- if (iseqdat->type == ISEQ_TYPE_METHOD ||
- iseqdat->type == ISEQ_TYPE_TOP ||
- iseqdat->type == ISEQ_TYPE_CLASS) {
- opt = 1;
- }
-
snprintf(buff, sizeof(buff),
"local scope table (size: %d, argc: %d)\n",
iseqdat->local_size, iseqdat->argc);
rb_str_cat2(str, buff);
- for (i = 0; i < iseqdat->local_size - opt; i++) {
- const char *name = rb_id2name(tbl[i + opt]);
+ for (i = 0; i < iseqdat->local_table_size; i++) {
+ const char *name = rb_id2name(tbl[i]);
char info[0x100];
char argi[0x100] = "";
char opti[0x100] = "";
@@ -1132,15 +1123,9 @@ iseq_data_to_ary(rb_iseq_t *iseq)
default: rb_bug("unsupported iseq type");
};
- if (iseq->type == ISEQ_TYPE_METHOD ||
- iseq->type == ISEQ_TYPE_TOP ||
- iseq->type == ISEQ_TYPE_CLASS) {
- opt = 1;
- }
-
/* locals */
- for (i=opt; i<iseq->local_size; i++) {
- ID lid = iseq->local_tbl[i];
+ for (i=0; i<iseq->local_table_size; i++) {
+ ID lid = iseq->local_table[i];
if (lid) {
rb_ary_push(locals, ID2SYM(lid));
}
@@ -1304,7 +1289,7 @@ iseq_data_to_ary(rb_iseq_t *iseq)
rb_ary_push(val, INT2FIX(1));
rb_ary_push(val, Qnil);
rb_ary_push(val, iseq->name);
- rb_ary_push(val, iseq->file_name);
+ rb_ary_push(val, iseq->filename);
rb_ary_push(val, line);
rb_ary_push(val, type);
rb_ary_push(val, locals);
diff --git a/proc.c b/proc.c
index 0ab110d96a..dbfefe601d 100644
--- a/proc.c
+++ b/proc.c
@@ -526,7 +526,7 @@ proc_to_s(VALUE self)
line_no = iseq->insn_info_tbl[0].line_no;
}
str = rb_sprintf("#<%s:%lx@%s:%d>", cname, self,
- RSTRING_PTR(iseq->file_name),
+ RSTRING_PTR(iseq->filename),
line_no);
}
else {
diff --git a/version.h b/version.h
index dda11aa49e..82429e6f0b 100644
--- a/version.h
+++ b/version.h
@@ -1,7 +1,7 @@
#define RUBY_VERSION "1.9.0"
-#define RUBY_RELEASE_DATE "2007-02-24"
+#define RUBY_RELEASE_DATE "2007-02-25"
#define RUBY_VERSION_CODE 190
-#define RUBY_RELEASE_CODE 20070224
+#define RUBY_RELEASE_CODE 20070225
#define RUBY_PATCHLEVEL 0
#define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
#define RUBY_VERSION_TEENY 0
#define RUBY_RELEASE_YEAR 2007
#define RUBY_RELEASE_MONTH 2
-#define RUBY_RELEASE_DAY 24
+#define RUBY_RELEASE_DAY 25
RUBY_EXTERN const char ruby_version[];
RUBY_EXTERN const char ruby_release_date[];
diff --git a/vm.c b/vm.c
index 4867e05444..6a7fa42824 100644
--- a/vm.c
+++ b/vm.c
@@ -376,8 +376,8 @@ collect_local_variables_in_env(rb_env_t *env, VALUE ary)
if (env->block.lfp == env->block.dfp) {
return 0;
}
- for (i = 0; i < env->block.iseq->local_size; i++) {
- ID lid = env->block.iseq->local_tbl[i];
+ for (i = 0; i < env->block.iseq->local_table_size; i++) {
+ ID lid = env->block.iseq->local_table[i];
if (lid) {
rb_ary_push(ary, rb_str_new2(rb_id2name(lid)));
}
@@ -986,7 +986,7 @@ th_backtrace_each(rb_thread_t *th,
rb_iseq_t *iseq = cfp->iseq;
line_no = th_get_sourceline(cfp);
- file = RSTRING_PTR(iseq->file_name);
+ file = RSTRING_PTR(iseq->filename);
str = rb_sprintf("%s:%d:in `%s'",
file, line_no, RSTRING_PTR(iseq->name));
rb_ary_push(ary, str);
diff --git a/vm_dump.c b/vm_dump.c
index 691e988fe2..8bb016bf99 100644
--- a/vm_dump.c
+++ b/vm_dump.c
@@ -103,7 +103,7 @@ control_frame_dump(rb_thread_t *th, rb_control_frame_t *cfp)
line = th_get_sourceline(cfp);
if (line) {
char fn[MAX_POSBUF+1];
- snprintf(fn, MAX_POSBUF, "%s", RSTRING_PTR(cfp->iseq->file_name));
+ snprintf(fn, MAX_POSBUF, "%s", RSTRING_PTR(cfp->iseq->filename));
snprintf(posbuf, MAX_POSBUF, "%s:%d", fn, line);
}
}
diff --git a/yarvcore.h b/yarvcore.h
index f755e21790..dc1963ab62 100644
--- a/yarvcore.h
+++ b/yarvcore.h
@@ -240,9 +240,12 @@ struct rb_iseq_struct {
unsigned int insn_info_size;
/* file information where this sequence from */
- VALUE file_name;
+ VALUE filename;
- ID *local_tbl; /* must free */
+ ID *local_table; /* must free */
+ int local_table_size;
+
+ /* method, class frame: sizeof(vars) + 1, block frame: sizeof(vars) */
int local_size;
/* jit compiled or not */