* 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:
parent
ce45744254
commit
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>
|
Tue Jul 7 03:47:26 2015 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
* vm_core.h: remove a useless declaration.
|
* vm_core.h: remove a useless declaration.
|
||||||
|
58
eval.c
58
eval.c
@ -922,81 +922,31 @@ rb_ensure(VALUE (*b_proc)(ANYARGS), VALUE data1, VALUE (*e_proc)(ANYARGS), VALUE
|
|||||||
return result;
|
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
|
static ID
|
||||||
frame_func_id(rb_control_frame_t *cfp)
|
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);
|
const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(cfp);
|
||||||
|
|
||||||
if (me) {
|
if (me) {
|
||||||
return me->def->original_id;
|
return me->def->original_id;
|
||||||
}
|
}
|
||||||
while (iseq) {
|
else {
|
||||||
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;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static ID
|
static ID
|
||||||
frame_called_id(rb_control_frame_t *cfp)
|
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);
|
const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(cfp);
|
||||||
|
|
||||||
if (me) {
|
if (me) {
|
||||||
return me->called_id;
|
return me->called_id;
|
||||||
}
|
}
|
||||||
while (iseq) {
|
else {
|
||||||
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;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ID
|
ID
|
||||||
rb_frame_this_func(void)
|
rb_frame_this_func(void)
|
||||||
|
1
iseq.c
1
iseq.c
@ -268,7 +268,6 @@ prepare_iseq_build(rb_iseq_t *iseq,
|
|||||||
if (iseq != iseq->local_iseq) {
|
if (iseq != iseq->local_iseq) {
|
||||||
RB_OBJ_WRITE(iseq->self, &iseq->location.base_label, iseq->local_iseq->location.label);
|
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);
|
RB_OBJ_WRITE(iseq->self, &iseq->mark_ary, 0);
|
||||||
|
|
||||||
iseq->compile_data = ZALLOC(struct iseq_compile_data);
|
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);
|
body = proc_dup(body);
|
||||||
GetProcPtr(body, proc);
|
GetProcPtr(body, proc);
|
||||||
if (!RUBY_VM_IFUNC_P(proc->block.iseq)) {
|
if (!RUBY_VM_IFUNC_P(proc->block.iseq)) {
|
||||||
proc->block.iseq->defined_method_id = id;
|
|
||||||
proc->is_lambda = TRUE;
|
proc->is_lambda = TRUE;
|
||||||
proc->is_from_method = 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;
|
visi = METHOD_VISI_PUBLIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dup */
|
|
||||||
miseq->defined_method_id = id;
|
|
||||||
rb_add_method_iseq(klass, id, iseqval, cref, visi);
|
rb_add_method_iseq(klass, id, iseqval, cref, visi);
|
||||||
|
|
||||||
if (!is_singleton && scope_visi->module_func) {
|
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 */
|
const VALUE orig; /* non-NULL if its data have origin */
|
||||||
|
|
||||||
/* misc */
|
/* misc */
|
||||||
ID defined_method_id; /* for define_method */
|
|
||||||
rb_num_t flip_cnt;
|
rb_num_t flip_cnt;
|
||||||
|
|
||||||
/* used at compile time */
|
/* used at compile time */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user