1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-21 18:57:59 +01:00

Merge changes from bootstrapped.

This commit is contained in:
Kris Maglione
2010-12-25 16:00:56 -05:00
parent ce13a4629e
commit dca9f2df86
27 changed files with 82 additions and 67 deletions

View File

@@ -23,7 +23,7 @@ default xml namespace = XHTML;
memoize(this, "Commands", function () {
// FIXME
let obj = {};
let obj = { Module: Class };
services.subscriptLoader.loadSubScript("chrome://dactyl/content/commands.js", obj);
return obj.Commands;
});
@@ -94,20 +94,28 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
addObserver: function (obj) {
let observers = obj._observe || obj.observe;
obj._observe = observers;
function register(meth) {
services.observer[meth](obj, "quit-application", true);
services.observer[meth](obj, "dactyl-cleanup", true);
for (let target in keys(observers))
services.observer[meth](obj, target, true);
for (let target in set(["dactyl-cleanup", "quit-application"].concat(Object.keys(observers))))
try {
services.observer[meth](obj, target, true);
}
catch (e) {}
}
Class.replaceProperty(obj, "observe",
function (subject, target, data) {
if (target == "quit-application" || target == "dactyl-cleanup")
register("removeObserver");
if (observers[target])
observers[target].call(obj, subject, data);
try {
if (target == "quit-application" || target == "dactyl-cleanup")
register("removeObserver");
if (observers[target])
observers[target].call(obj, subject, data);
}
catch (e) {
util.reportError(e);
}
});
obj.observe.unRegister = function () register("removeObserver");
obj.observe.unregister = function () register("removeObserver");
register("addObserver");
},
@@ -457,6 +465,14 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
*/
dump: defineModule.dump,
stackLines: function (stack) {
let lines = [];
let match, re = /([^]*?)(@.*?)(?:\n|$)/g;
while (match = re.exec(stack))
lines.push(match[1].replace(/\n/g, "\\n").substr(0, 80) + match[2]);
return lines;
},
/**
* Dumps a stack trace to the console.
*
@@ -464,9 +480,8 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
* @param {number} frames The number of frames to print.
*/
dumpStack: function dumpStack(msg, frames) {
let stack = Error().stack.replace(/(?:.*\n){2}/, "");
if (frames != null)
[stack] = stack.match(RegExp("(?:.*\n){0," + frames + "}"));
let stack = util.stackLines(Error().stack);
stack = stack.slice(2, 2 + (frames || 0)).join("\n");
util.dump((arguments.length == 0 ? "Stack" : msg) + "\n" + stack + "\n");
},
@@ -1126,7 +1141,7 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
try {
let obj = update({}, error, {
toString: function () String(error),
stack: <>{String.replace(error.stack || Error().stack, /^/mg, "\t")}</>
stack: <>{util.stackLines(String(error.stack || Error().stack)).join("\n").replace(/^/mg, "\t")}</>
});
this.errors.push([new Date, obj + "\n" + obj.stack]);
@@ -1140,7 +1155,7 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
catch (e) {
try {
this.dump(String(error));
this.dump(error.stack)
this.dump(util.stackLines(error.stack).join("\n"))
}
catch (e) { dump(e + "\n"); }
}