2 * (C) Copyright 2004-2007 Shawn Betts
3 * (C) Copyright 2007-2009 John J. Foerch
4 * (C) Copyright 2007-2008 Jeremy Maitin-Shepard
6 * Use, modification, and distribution are subject to the terms specified in the
12 require_later("external-editor.js");
14 var conkeror_source_code_path = null;
16 function source_code_reference (uri, line_number) {
18 this.line_number = line_number;
20 source_code_reference.prototype = {
21 constructor: source_code_reference,
23 if (this.uri.indexOf(module_uri_prefix) == 0)
24 return this.uri.substring(module_uri_prefix.length);
29 var file_uri_prefix = "file://";
30 if (this.uri.indexOf(file_uri_prefix) == 0)
31 return this.uri.substring(file_uri_prefix.length);
36 if (conkeror_source_code_path != null) {
37 var module_name = this.module_name;
38 if (module_name != null)
39 return "file://" + conkeror_source_code_path + "/modules/" + module_name;
44 open_in_editor : function() {
45 yield open_with_external_editor(load_spec(this.best_uri),
46 $line = this.line_number);
50 var get_caller_source_code_reference_ignored_functions = {};
52 function get_caller_source_code_reference (extra_frames_back) {
53 /* Skip at least this function itself and whoever called it (and
54 * more if the caller wants to be skipped). */
55 var frames_to_skip = 2;
56 if (extra_frames_back != null)
57 frames_to_skip += extra_frames_back;
59 for (let f = Components.stack; f != null; f = f.caller) {
60 if (frames_to_skip > 0) {
64 if (get_caller_source_code_reference_ignored_functions[f.name])
66 return new source_code_reference(f.filename, f.lineNumber);
72 function ignore_function_for_get_caller_source_code_reference (func_name) {
73 get_caller_source_code_reference_ignored_functions[func_name] = 1;
76 provide("source-code");