From f58eb1e276a2db3ff2062c80a7acf97860aca8ca Mon Sep 17 00:00:00 2001 From: ko1 Date: Sun, 24 Jun 2007 20:33:04 +0000 Subject: * eval.c: remove ruby_current_node and change eval() prototype. fix to use rb_sourcefile/line() instead of ruby_sourcefile/line. * error.c, eval_error.ci, eval_load.c, eval_safe.ci, gc.c, include/ruby/intern.h, parse.y, process.c, ruby.c: ditto. * vm.c: fix spaces. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12608 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval_error.ci | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) (limited to 'eval_error.ci') diff --git a/eval_error.ci b/eval_error.ci index 63428991f3..d719953f2d 100644 --- a/eval_error.ci +++ b/eval_error.ci @@ -2,6 +2,34 @@ * included by eval.c */ +const char * +rb_sourcefile(void) +{ + rb_thread_t *th = GET_THREAD(); + rb_control_frame_t *cfp = vm_get_ruby_level_cfp(th, th->cfp); + + if (cfp) { + return RSTRING_PTR(cfp->iseq->filename); + } + else { + return 0; + } +} + +int +rb_sourceline(void) +{ + rb_thread_t *th = GET_THREAD(); + rb_control_frame_t *cfp = vm_get_ruby_level_cfp(th, th->cfp); + + if (cfp) { + return vm_get_sourceline(cfp); + } + else { + return 0; + } +} + static void warn_printf(const char *fmt, ...) { @@ -20,16 +48,19 @@ warn_printf(const char *fmt, ...) static void error_pos(void) { - if (ruby_sourcefile) { - if (ruby_sourceline == 0) { - warn_printf("%s", ruby_sourcefile); + const char *sourcefile = rb_sourcefile(); + int sourceline = rb_sourceline(); + + if (sourcefile) { + if (sourceline == 0) { + warn_printf("%s", sourcefile); } else if (rb_frame_callee()) { - warn_printf("%s:%d:in `%s'", ruby_sourcefile, ruby_sourceline, + warn_printf("%s:%d:in `%s'", sourcefile, sourceline, rb_id2name(rb_frame_callee())); } else { - warn_printf("%s:%d", ruby_sourcefile, ruby_sourceline); + warn_printf("%s:%d", sourcefile, sourceline); } } } @@ -72,10 +103,10 @@ error_print(void) if (EXEC_TAG()) goto error; if (NIL_P(errat)) { - if (ruby_sourcefile) - warn_printf("%s:%d", ruby_sourcefile, ruby_sourceline); + if (rb_sourcefile()) + warn_printf("%s:%d", rb_sourcefile(), rb_sourceline()); else - warn_printf("%d", ruby_sourceline); + warn_printf("%d", rb_sourceline()); } else if (RARRAY_LEN(errat) == 0) { error_pos(); -- cgit v1.2.3