diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-05-17 05:02:58 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-05-17 05:02:58 +0000 |
commit | 589ec2beb565ffae7e387e951539da03a1d0b255 (patch) | |
tree | 53b415c17fd0f99a4fd0e444dcb08123df63c917 /vm.c | |
parent | 52b3bf363ad4f67d79226e2d0e3143d4f85f31c5 (diff) |
* ruby.c (ruby_script): sets also VM toplevel program name.
* ruby.c (process_options): no longer needs additional frame.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23473 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm.c')
-rw-r--r-- | vm.c | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -671,13 +671,13 @@ rb_vm_get_sourceline(const rb_control_frame_t *cfp) int line_no = 0; const rb_iseq_t *iseq = cfp->iseq; - if (RUBY_VM_NORMAL_ISEQ_P(iseq)) { + if (RUBY_VM_NORMAL_ISEQ_P(iseq) && iseq->insn_info_size > 0) { rb_num_t i; size_t pos = cfp->pc - cfp->iseq->iseq_encoded; - for (i = 0; i < iseq->insn_info_size; i++) { + if (iseq->insn_info_table[0].position == pos) goto found; + for (i = 1; i < iseq->insn_info_size; i++) { if (iseq->insn_info_table[i].position == pos) { - if (i == 0) goto found; line_no = iseq->insn_info_table[i - 1].line_no; goto found; } @@ -1939,6 +1939,15 @@ Init_VM(void) vm_init_redefined_flag(); } +void +rb_vm_set_progname(VALUE filename) +{ + rb_thread_t *th = GET_VM()->main_thread; + rb_control_frame_t *cfp = (void *)(th->stack + th->stack_size); + --cfp; + cfp->iseq->filename = filename; +} + #if defined(ENABLE_VM_OBJSPACE) && ENABLE_VM_OBJSPACE struct rb_objspace *rb_objspace_alloc(void); #endif |