diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-12-15 19:13:15 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-12-15 19:13:15 +0000 |
commit | a3450f473382f091973d874128883a1cad04c1ba (patch) | |
tree | ff0fb186da6f8f14b385349e41ade5bbb38bc153 /iseq.c | |
parent | 20748861d4fa27997a174e4511b9454456483e91 (diff) | |
download | ruby-a3450f473382f091973d874128883a1cad04c1ba.tar.gz |
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
Diffstat (limited to 'iseq.c')
-rw-r--r-- | iseq.c | 22 |
1 files changed, 18 insertions, 4 deletions
@@ -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("<compiled>"); + 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("<compiled>"); - 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("<compiled>"); - 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; |