summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog16
-rw-r--r--eval.c58
-rw-r--r--iseq.c1
-rw-r--r--proc.c1
-rw-r--r--vm.c2
-rw-r--r--vm_core.h1
6 files changed, 20 insertions, 59 deletions
diff --git a/ChangeLog b/ChangeLog
index c65f7e2..c95614e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+Tue Jul 7 03:57:28 2015 Koichi Sasada <ko1@atdot.net>
+
+ * vm_core.h: remove rb_iseq_t::defined_method_id because it is not
+ needed.
+
+ * eval.c (frame_func_id): simplify. rb_callable_method_entry_t
+ has enough information.
+
+ * eval.c (frame_called_id): ditto.
+
+ * iseq.c (prepare_iseq_build): catch up this fix.
+
+ * proc.c (rb_mod_define_method): ditto.
+
+ * vm.c (vm_define_method): ditto.
+
Tue Jul 7 03:47:26 2015 Koichi Sasada <ko1@atdot.net>
* vm_core.h: remove a useless declaration.
diff --git a/eval.c b/eval.c
index 3462a80..e50bc25 100644
--- a/eval.c
+++ b/eval.c
@@ -922,80 +922,30 @@ rb_ensure(VALUE (*b_proc)(ANYARGS), VALUE data1, VALUE (*e_proc)(ANYARGS), VALUE
return result;
}
-static const rb_callable_method_entry_t *
-method_entry_of_iseq(const rb_control_frame_t *cfp, const rb_iseq_t *iseq)
-{
- rb_thread_t *th = GET_THREAD();
- const rb_control_frame_t *cfp_limit;
-
- cfp_limit = (rb_control_frame_t *)(th->stack + th->stack_size);
- while (cfp_limit > cfp) {
- if (cfp->iseq == iseq) return rb_vm_frame_method_entry(cfp); /* TODO: fix me */
- cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp);
- }
- return 0;
-}
-
static ID
frame_func_id(rb_control_frame_t *cfp)
{
- const rb_iseq_t *iseq = cfp->iseq;
- const rb_callable_method_entry_t *me_local;
const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(cfp);
if (me) {
return me->def->original_id;
}
- while (iseq) {
- if (RUBY_VM_IFUNC_P(iseq)) {
- const struct vm_ifunc *ifunc = (struct vm_ifunc *)iseq;
- if (ifunc->id) return ifunc->id;
- return idIFUNC;
- }
- me_local = method_entry_of_iseq(cfp, iseq);
- if (me_local) {
- return me_local->def->original_id;
- }
- if (iseq->defined_method_id) {
- return iseq->defined_method_id;
- }
- if (iseq->local_iseq == iseq) {
- break;
- }
- iseq = iseq->parent_iseq;
+ else {
+ return 0;
}
- return 0;
}
static ID
frame_called_id(rb_control_frame_t *cfp)
{
- const rb_iseq_t *iseq = cfp->iseq;
- const rb_callable_method_entry_t *me_local;
const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(cfp);
if (me) {
return me->called_id;
}
- while (iseq) {
- if (RUBY_VM_IFUNC_P(iseq)) {
- const struct vm_ifunc *ifunc = (struct vm_ifunc *)iseq;
- if (ifunc->id) return ifunc->id;
- return idIFUNC;
- }
- me_local = method_entry_of_iseq(cfp, iseq);
- if (me_local) {
- return me_local->called_id;
- }
- if (iseq->defined_method_id) {
- return iseq->defined_method_id;
- }
- if (iseq->local_iseq == iseq) {
- break;
- }
- iseq = iseq->parent_iseq;
+ else {
+ return 0;
}
- return 0;
}
ID
diff --git a/iseq.c b/iseq.c
index 1bdb5f7..d071815 100644
--- a/iseq.c
+++ b/iseq.c
@@ -268,7 +268,6 @@ prepare_iseq_build(rb_iseq_t *iseq,
if (iseq != iseq->local_iseq) {
RB_OBJ_WRITE(iseq->self, &iseq->location.base_label, iseq->local_iseq->location.label);
}
- iseq->defined_method_id = 0;
RB_OBJ_WRITE(iseq->self, &iseq->mark_ary, 0);
iseq->compile_data = ZALLOC(struct iseq_compile_data);
diff --git a/proc.c b/proc.c
index 1b57b31..51c3436 100644
--- a/proc.c
+++ b/proc.c
@@ -1724,7 +1724,6 @@ rb_mod_define_method(int argc, VALUE *argv, VALUE mod)
body = proc_dup(body);
GetProcPtr(body, proc);
if (!RUBY_VM_IFUNC_P(proc->block.iseq)) {
- proc->block.iseq->defined_method_id = id;
proc->is_lambda = TRUE;
proc->is_from_method = TRUE;
}
diff --git a/vm.c b/vm.c
index 0ae5c45..1b255c7 100644
--- a/vm.c
+++ b/vm.c
@@ -2287,8 +2287,6 @@ vm_define_method(rb_thread_t *th, VALUE obj, ID id, VALUE iseqval,
visi = METHOD_VISI_PUBLIC;
}
- /* dup */
- miseq->defined_method_id = id;
rb_add_method_iseq(klass, id, iseqval, cref, visi);
if (!is_singleton && scope_visi->module_func) {
diff --git a/vm_core.h b/vm_core.h
index 390e790..41d0ff6 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -348,7 +348,6 @@ struct rb_iseq_struct {
const VALUE orig; /* non-NULL if its data have origin */
/* misc */
- ID defined_method_id; /* for define_method */
rb_num_t flip_cnt;
/* used at compile time */