[Conkeror] [PATCH 1/3] Rewrite get_caller_source_code_reference to use Components.stack

David Glasser glasser at davidglasser.net
Fri Mar 28 15:25:17 PDT 2008


diff --git a/modules/utils.js b/modules/utils.js
index c855960..f3677fb 100644
--- a/modules/utils.js
+++ b/modules/utils.js
@@ -420,18 +420,17 @@ source_code_reference.prototype = {
 };
 
 function get_caller_source_code_reference(extra_frames_back) {
-    var stack = Error().stack.split("\n");
-    if (extra_frames_back == null)
-        extra_frames_back = 0;
-    var i = extra_frames_back + 3;
-    if (stack.length <= i)
-        return null;
-    var s = stack[i];
-    var regexp = /^[^@]*@(.*):([0-9]*)$/m;
-    var match = regexp.exec(s);
-    if (match.index != 0)
-        return null;
-    return new source_code_reference(match[1], match[2]);
+    var frames_to_skip = 2;
+    if (extra_frames_back != null)
+        frames_to_skip += extra_frames_back;
+
+    for (let f = Components.stack; f != null; f = f.caller) {
+        if (frames_to_skip > 0) {
+            --frames_to_skip;
+            continue;
+        }
+        return new source_code_reference(f.filename, f.sourceLine);
+    }
 }
 
 require_later("external-editor.js");
-- 
1.5.2.5



More information about the Conkeror mailing list