* 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.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51168 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2015-07-06 19:08:05 +00:00
Родитель ce45744254
Коммит 5c4d7b9a9e
6 изменённых файлов: 20 добавлений и 59 удалений

Просмотреть файл

@ -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.

58
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

1
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);

1
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;
}

2
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) {

Просмотреть файл

@ -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 */