Revision: 3524 http://trac.macosforge.org/projects/ruby/changeset/3524 Author: lsansonetti@apple.com Date: 2010-02-13 18:39:35 -0800 (Sat, 13 Feb 2010) Log Message: ----------- Kernel#caller: now honor the skip argument Modified Paths: -------------- MacRuby/trunk/debugger.cpp MacRuby/trunk/vm.cpp MacRuby/trunk/vm.h MacRuby/trunk/vm_eval.c Modified: MacRuby/trunk/debugger.cpp =================================================================== --- MacRuby/trunk/debugger.cpp 2010-02-13 09:21:24 UTC (rev 3523) +++ MacRuby/trunk/debugger.cpp 2010-02-14 02:39:35 UTC (rev 3524) @@ -315,7 +315,7 @@ continue; } if (strcmp(cmd, "backtrace") == 0) { - VALUE bt = rb_vm_backtrace(100); + VALUE bt = rb_vm_backtrace(0); VALUE str = rb_ary_join(bt, rb_str_new2("\n")); send(RSTRING_PTR(str)); continue; Modified: MacRuby/trunk/vm.cpp =================================================================== --- MacRuby/trunk/vm.cpp 2010-02-13 09:21:24 UTC (rev 3523) +++ MacRuby/trunk/vm.cpp 2010-02-14 02:39:35 UTC (rev 3524) @@ -3503,7 +3503,7 @@ { VALUE exception = GET_VM()->current_exception(); assert(exception != Qnil); - rb_iv_set(exception, "bt", rb_vm_backtrace(100)); + rb_iv_set(exception, "bt", rb_vm_backtrace(0)); __vm_raise(); } @@ -3511,7 +3511,7 @@ void rb_vm_raise(VALUE exception) { - rb_iv_set(exception, "bt", rb_vm_backtrace(100)); + rb_iv_set(exception, "bt", rb_vm_backtrace(0)); rb_objc_retain((void *)exception); GET_VM()->push_current_exception(exception); __vm_raise(); @@ -3678,8 +3678,10 @@ extern "C" VALUE -rb_vm_backtrace(int level) +rb_vm_backtrace(int skip) { + assert(skip >= 0); + void *callstack[128]; int callstack_n = backtrace(callstack, 128); @@ -3710,6 +3712,10 @@ } } + while (skip-- > 0) { + rb_ary_shift(ary); + } + return ary; } Modified: MacRuby/trunk/vm.h =================================================================== --- MacRuby/trunk/vm.h 2010-02-13 09:21:24 UTC (rev 3523) +++ MacRuby/trunk/vm.h 2010-02-14 02:39:35 UTC (rev 3524) @@ -453,7 +453,7 @@ void rb_vm_raise_current_exception(void); VALUE rb_vm_current_exception(void); void rb_vm_set_current_exception(VALUE exception); -VALUE rb_vm_backtrace(int level); +VALUE rb_vm_backtrace(int skip); void rb_vm_print_current_exception(void); #define TEST_THREAD_CANCEL() (pthread_testcancel()) Modified: MacRuby/trunk/vm_eval.c =================================================================== --- MacRuby/trunk/vm_eval.c 2010-02-13 09:21:24 UTC (rev 3523) +++ MacRuby/trunk/vm_eval.c 2010-02-14 02:39:35 UTC (rev 3524) @@ -736,10 +736,9 @@ rb_f_caller(VALUE klass, SEL sel, int argc, VALUE *argv) { VALUE level; - int lev; - rb_scan_args(argc, argv, "01", &level); + int lev; if (NIL_P(level)) { lev = 1; } @@ -751,19 +750,14 @@ rb_raise(rb_eArgError, "negative level (%d)", lev); } - VALUE ary = rb_vm_backtrace(lev); - rb_ary_shift(ary); // remove #caller - return ary; + return rb_vm_backtrace(lev); } void rb_backtrace(void) { - long i, count; - VALUE ary; - - ary = rb_vm_backtrace(-1); - for (i = 0, count = RARRAY_LEN(ary); i < count; i++) { + VALUE ary = rb_vm_backtrace(0); + for (long i = 0, count = RARRAY_LEN(ary); i < count; i++) { printf("\tfrom %s\n", RSTRING_PTR(RARRAY_AT(ary, i))); } } @@ -771,7 +765,7 @@ VALUE rb_make_backtrace(void) { - return rb_vm_backtrace(-1); + return rb_vm_backtrace(0); } void
participants (1)
-
source_changes@macosforge.org