[macruby-changes] [3524] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Sat Feb 13 18:39:37 PST 2010
Revision: 3524
http://trac.macosforge.org/projects/ruby/changeset/3524
Author: lsansonetti at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100213/da529387/attachment.html>
More information about the macruby-changes
mailing list