зеркало из https://github.com/github/ruby.git
* 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:
Родитель
ce45744254
Коммит
5c4d7b9a9e
16
ChangeLog
16
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.
|
||||
|
|
58
eval.c
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
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
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
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 */
|
||||
|
|
Загрузка…
Ссылка в новой задаче