From a3450f473382f091973d874128883a1cad04c1ba Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 15 Dec 2014 19:13:15 +0000 Subject: iseq.c: use caller location * iseq.c (rb_method_for_self_aref, rb_method_for_self_aset): set same location as the caller. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48851 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- iseq.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/iseq.c b/iseq.c index 015c860d2f..de304906fe 100644 --- a/iseq.c +++ b/iseq.c @@ -548,13 +548,28 @@ iseq_load(VALUE self, VALUE data, VALUE parent, VALUE opt) return iseqval; } +static VALUE +caller_location(VALUE *path) +{ + rb_thread_t *th = GET_THREAD(); + rb_control_frame_t *cfp = rb_vm_get_ruby_level_next_cfp(th, th->cfp); + if (cfp) { + int line = rb_vm_get_sourceline(cfp); + *path = cfp->iseq->location.path; + return INT2FIX(line); + } + else { + *path = rb_str_new2(""); + return INT2FIX(1); + } +} + VALUE rb_method_for_self_aref(VALUE name, VALUE arg) { VALUE iseqval = iseq_alloc(rb_cISeq); rb_iseq_t *iseq; - VALUE path = rb_str_new2(""); - VALUE lineno = INT2FIX(1); + VALUE path, lineno = caller_location(&path); VALUE parent = 0; VALUE misc, locals, params, exception, body, send_arg; int flag = VM_CALL_FCALL | VM_CALL_ARGS_SIMPLE; @@ -603,8 +618,7 @@ rb_method_for_self_aset(VALUE name, VALUE arg) { VALUE iseqval = iseq_alloc(rb_cISeq); rb_iseq_t *iseq; - VALUE path = rb_str_new2(""); - VALUE lineno = INT2FIX(1); + VALUE path, lineno = caller_location(&path); VALUE parent = 0; VALUE misc, locals, params, exception, body, send_arg; int flag = VM_CALL_FCALL | VM_CALL_ARGS_SIMPLE; -- cgit v1.2.3