[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