[macruby-changes] [3381] MacRuby/branches/0.5/vm.cpp

source_changes at macosforge.org source_changes at macosforge.org
Sun Jan 31 14:40:47 PST 2010


Revision: 3381
          http://trac.macosforge.org/projects/ruby/changeset/3381
Author:   lsansonetti at apple.com
Date:     2010-01-31 14:40:44 -0800 (Sun, 31 Jan 2010)
Log Message:
-----------
backporting symbolication fixes from trunk

Modified Paths:
--------------
    MacRuby/branches/0.5/vm.cpp

Modified: MacRuby/branches/0.5/vm.cpp
===================================================================
--- MacRuby/branches/0.5/vm.cpp	2010-01-31 05:57:38 UTC (rev 3380)
+++ MacRuby/branches/0.5/vm.cpp	2010-01-31 22:40:44 UTC (rev 3381)
@@ -569,37 +569,40 @@
 	*startp = start;
     }
 
-    if (name != NULL || path != NULL || ln != NULL) {
-	std::map<IMP, rb_vm_method_node_t *>::iterator iter = 
-	    ruby_imps.find((IMP)start);
-	if (iter == ruby_imps.end()) {
-	    // TODO symbolize objc selectors
-	    return false;
-	}
-
-	rb_vm_method_node_t *node = iter->second;
+    if (f != NULL) {
 	if (ln != NULL) {
 	    *ln = 0;
-	    if (f != NULL) {
-		for (std::vector<RoxorFunction::Line>::iterator iter =
-			f->lines.begin(); iter != f->lines.end(); ++iter) {
-		    if ((*iter).address == (uintptr_t)addr) {
-			*ln = (*iter).line;
-			break;
-		    }
+	    for (std::vector<RoxorFunction::Line>::iterator iter =
+		    f->lines.begin(); iter != f->lines.end(); ++iter) {
+		*ln = (*iter).line;
+		if ((*iter).address <= (uintptr_t)addr) {
+		    break;
 		}
 	    }
 	}
 	if (path != NULL) {
-	    if (f != NULL && f->file.size() > 0) {
-		strncpy(path, f->file.c_str(), path_len);
+	    strncpy(path, f->file.c_str(), path_len);
+	}
+	if (name != NULL) {
+	    std::map<IMP, rb_vm_method_node_t *>::iterator iter = 
+		ruby_imps.find((IMP)start);
+	    if (iter == ruby_imps.end()) {
+		strncpy(name, "block", name_len);
 	    }
 	    else {
-		strncpy(path, "core", path_len);
+		strncpy(name, sel_getName(iter->second->sel), name_len);
 	    }
 	}
+    }
+    else {
+	if (ln != NULL) {
+	    *ln = 0;
+	}
+	if (path != NULL) {
+	    strncpy(path, "core", path_len);
+	}
 	if (name != NULL) {
-	    strncpy(name, sel_getName(node->sel), name_len);
+	    name[0] = '\0';
 	}
     }
 
@@ -3531,8 +3534,11 @@
 	char name[100];
 	unsigned long ln = 0;
 
+	path[0] = name[0] = '\0';
+
 	if (GET_CORE()->symbolize_call_address(callstack[i], NULL,
-		    path, sizeof path, &ln, name, sizeof name)) {
+		    path, sizeof path, &ln, name, sizeof name)
+		&& path[0] != '\0' && name[0] != '\0') {
 	    char entry[PATH_MAX];
 	    if (ln == 0) {
 		snprintf(entry, sizeof entry, "%s:in `%s'",
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100131/fa825972/attachment.html>


More information about the macruby-changes mailing list