From 60c858b59b3eb452382627411eaf4b8644640ede Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Mon, 22 Aug 2011 01:45:41 -0400 Subject: [PATCH] After some profiling, give all modules a common prototype. --- common/modules/addons.jsm | 3 +-- common/modules/base.jsm | 28 ++++++++++++---------------- common/modules/commands.jsm | 3 +-- common/modules/completion.jsm | 3 +-- common/modules/config.jsm | 3 +-- common/modules/contexts.jsm | 3 +-- common/modules/dom.jsm | 3 +-- common/modules/downloads.jsm | 3 +-- common/modules/finder.jsm | 3 +-- common/modules/help.jsm | 3 +-- common/modules/highlight.jsm | 3 +-- common/modules/io.jsm | 3 +-- common/modules/javascript.jsm | 3 +-- common/modules/options.jsm | 3 +-- common/modules/prefs.jsm | 3 +-- common/modules/sanitizer.jsm | 1 - common/modules/services.jsm | 3 +-- common/modules/storage.jsm | 4 ++-- common/modules/styles.jsm | 3 +-- common/modules/template.jsm | 3 +-- common/modules/util.jsm | 4 ++-- 21 files changed, 33 insertions(+), 55 deletions(-) diff --git a/common/modules/addons.jsm b/common/modules/addons.jsm index dfb59413..7613eb79 100644 --- a/common/modules/addons.jsm +++ b/common/modules/addons.jsm @@ -10,8 +10,7 @@ try { Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("addons", { exports: ["AddonManager", "Addons", "Addon", "addons"], - require: ["services"], - use: ["completion", "config", "io", "messages", "prefs", "template", "util"] + require: ["services"] }, this); var callResult = function callResult(method) { diff --git a/common/modules/base.jsm b/common/modules/base.jsm index 44e630ad..b0abfece 100644 --- a/common/modules/base.jsm +++ b/common/modules/base.jsm @@ -122,6 +122,7 @@ if (!Object.keys) let getGlobalForObject = Cu.getGlobalForObject || function (obj) obj.__parent__; +let jsmodules = {}; let use = {}; let loaded = {}; let currentModule; @@ -132,18 +133,15 @@ function defineModule(name, params, module) { module.NAME = name; module.EXPORTED_SYMBOLS = params.exports || []; + delete module.File; + defineModule.loadLog.push("[Begin " + name + "]"); defineModule.prefix += " "; - for (let [, mod] in Iterator(params.require || [])) - require(module, mod); - for (let [, mod] in Iterator(params.use || [])) - if (loaded.hasOwnProperty(mod)) - require(module, mod, "use"); - else { - use[mod] = use[mod] || []; - use[mod].push(module); - } + for (let [, mod] in Iterator(params.require || [])) + require(jsmodules, mod, null, name); + module.__proto__ = jsmodules; + module._lastModule = currentModule; currentModule = module; module.startTime = Date.now(); @@ -189,14 +187,12 @@ function endModule() { defineModule.prefix = defineModule.prefix.slice(0, -2); defineModule.loadLog.push("(End " + currentModule.NAME + ")"); - for (let [, mod] in Iterator(use[currentModule.NAME] || [])) - require(mod, currentModule.NAME, "use"); - loaded[currentModule.NAME] = 1; + require(jsmodules, currentModule.NAME); currentModule = currentModule._lastModule; } -function require(obj, name, from) { +function require(obj, name, from, targetName) { try { if (arguments.length === 1) [obj, name] = [{}, obj]; @@ -204,7 +200,8 @@ function require(obj, name, from) { let caller = Components.stack.caller; if (!loaded[name]) - defineModule.loadLog.push((from || "require") + ": loading " + name + " into " + (obj.NAME || caller.filename + ":" + caller.lineNumber)); + defineModule.loadLog.push((from || "require") + ": loading " + name + + " into " + (targetName || obj.NAME || caller.filename + ":" + caller.lineNumber)); JSMLoader.load(name + ".jsm", obj); return obj; @@ -228,8 +225,7 @@ defineModule("base", { "isGenerator", "isinstance", "isObject", "isString", "isSubclass", "iter", "iterAll", "iterOwnProperties", "keys", "memoize", "octal", "properties", "require", "set", "update", "values", "withCallerGlobal" - ], - use: ["config", "services", "util"] + ] }, this); function Runnable(self, func, args) { diff --git a/common/modules/commands.jsm b/common/modules/commands.jsm index ecc55582..28784a83 100644 --- a/common/modules/commands.jsm +++ b/common/modules/commands.jsm @@ -11,8 +11,7 @@ try { Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("commands", { exports: ["ArgType", "Command", "Commands", "CommandOption", "Ex", "commands"], - require: ["contexts", "messages", "util"], - use: ["config", "help", "options", "services", "template"] + require: ["contexts", "messages", "util"] }, this); /** diff --git a/common/modules/completion.jsm b/common/modules/completion.jsm index 6155b423..f23f2330 100644 --- a/common/modules/completion.jsm +++ b/common/modules/completion.jsm @@ -10,8 +10,7 @@ try { Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("completion", { - exports: ["CompletionContext", "Completion", "completion"], - use: ["config", "messages", "template", "util"] + exports: ["CompletionContext", "Completion", "completion"] }, this); /** diff --git a/common/modules/config.jsm b/common/modules/config.jsm index 313b17fa..5120728e 100644 --- a/common/modules/config.jsm +++ b/common/modules/config.jsm @@ -10,8 +10,7 @@ let global = this; Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("config", { exports: ["ConfigBase", "Config", "config"], - require: ["dom", "protocol", "services", "storage", "util", "template"], - use: ["io", "messages", "prefs", "styles"] + require: ["dom", "protocol", "services", "storage", "util", "template"] }, this); function AboutHandler() {} diff --git a/common/modules/contexts.jsm b/common/modules/contexts.jsm index c71b7ee8..85525269 100644 --- a/common/modules/contexts.jsm +++ b/common/modules/contexts.jsm @@ -8,8 +8,7 @@ try { Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("contexts", { - exports: ["Contexts", "Group", "contexts"], - use: ["commands", "messages", "options", "services", "storage", "styles", "template", "util"] + exports: ["Contexts", "Group", "contexts"] }, this); var Const = function Const(val) Class.Property({ enumerable: true, value: val }); diff --git a/common/modules/dom.jsm b/common/modules/dom.jsm index 9193dd34..c2a94257 100644 --- a/common/modules/dom.jsm +++ b/common/modules/dom.jsm @@ -7,8 +7,7 @@ Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("dom", { - exports: ["$", "DOM", "NS", "XBL", "XHTML", "XUL"], - use: ["config", "highlight", "template", "util"], + exports: ["$", "DOM", "NS", "XBL", "XHTML", "XUL"] }, this); var XBL = Namespace("xbl", "http://www.mozilla.org/xbl"); diff --git a/common/modules/downloads.jsm b/common/modules/downloads.jsm index ac311027..2f72662e 100644 --- a/common/modules/downloads.jsm +++ b/common/modules/downloads.jsm @@ -6,8 +6,7 @@ Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("downloads", { - exports: ["Download", "Downloads", "downloads"], - use: ["io", "messages", "prefs", "services", "util"] + exports: ["Download", "Downloads", "downloads"] }, this); Cu.import("resource://gre/modules/DownloadUtils.jsm", this); diff --git a/common/modules/finder.jsm b/common/modules/finder.jsm index f5dde18d..b3a11e15 100644 --- a/common/modules/finder.jsm +++ b/common/modules/finder.jsm @@ -7,8 +7,7 @@ Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("finder", { exports: ["RangeFind", "RangeFinder", "rangefinder"], - require: ["prefs"], - use: ["dom", "messages", "services", "util"] + require: ["prefs"] }, this); function equals(a, b) XPCNativeWrapper(a) == XPCNativeWrapper(b); diff --git a/common/modules/help.jsm b/common/modules/help.jsm index cc4ee5c7..9ae7622c 100644 --- a/common/modules/help.jsm +++ b/common/modules/help.jsm @@ -7,8 +7,7 @@ Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("help", { exports: ["help"], - require: ["dom", "protocol", "services", "util"], - use: ["config", "highlight", "messages", "template"] + require: ["dom", "protocol", "services", "util"] }, this); var Help = Module("Help", { diff --git a/common/modules/highlight.jsm b/common/modules/highlight.jsm index 73b6b06a..1d4c4b3f 100644 --- a/common/modules/highlight.jsm +++ b/common/modules/highlight.jsm @@ -7,8 +7,7 @@ Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("highlight", { exports: ["Highlight", "Highlights", "highlight"], - require: ["services", "styles", "util"], - use: ["messages", "template"] + require: ["services", "styles", "util"] }, this); var Highlight = Struct("class", "selector", "sites", diff --git a/common/modules/io.jsm b/common/modules/io.jsm index a5477b21..948167d9 100644 --- a/common/modules/io.jsm +++ b/common/modules/io.jsm @@ -12,8 +12,7 @@ try { Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("io", { exports: ["IO", "io"], - require: ["services"], - use: ["config", "help", "messages", "storage", "styles", "template", "util"] + require: ["services"] }, this); // TODO: why are we passing around strings rather than file objects? diff --git a/common/modules/javascript.jsm b/common/modules/javascript.jsm index 9326ff73..aa2ab6f3 100644 --- a/common/modules/javascript.jsm +++ b/common/modules/javascript.jsm @@ -10,8 +10,7 @@ try { Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("javascript", { - exports: ["JavaScript", "javascript"], - use: ["messages", "services", "template", "util"] + exports: ["JavaScript", "javascript"] }, this); let isPrototypeOf = Object.prototype.isPrototypeOf; diff --git a/common/modules/options.jsm b/common/modules/options.jsm index 7b8b4ded..dabd29a5 100644 --- a/common/modules/options.jsm +++ b/common/modules/options.jsm @@ -11,8 +11,7 @@ try { Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("options", { exports: ["Option", "Options", "ValueError", "options"], - require: ["contexts", "messages", "storage"], - use: ["commands", "completion", "config", "prefs", "services", "styles", "template", "util"] + require: ["contexts", "messages", "storage"] }, this); /** @scope modules */ diff --git a/common/modules/prefs.jsm b/common/modules/prefs.jsm index af3ea15e..ee00b88c 100644 --- a/common/modules/prefs.jsm +++ b/common/modules/prefs.jsm @@ -11,8 +11,7 @@ try { Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("prefs", { exports: ["Prefs", "localPrefs", "prefs"], - require: ["services", "util"], - use: ["config", "messages", "template"] + require: ["services", "util"] }, this); var Prefs = Module("prefs", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]), { diff --git a/common/modules/sanitizer.jsm b/common/modules/sanitizer.jsm index 1b4fd099..22552b3b 100644 --- a/common/modules/sanitizer.jsm +++ b/common/modules/sanitizer.jsm @@ -17,7 +17,6 @@ try { Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("sanitizer", { exports: ["Range", "Sanitizer", "sanitizer"], - use: ["config"], require: ["messages", "prefs", "services", "storage", "template", "util"] }, this); diff --git a/common/modules/services.jsm b/common/modules/services.jsm index b0d30e2b..01f1331c 100644 --- a/common/modules/services.jsm +++ b/common/modules/services.jsm @@ -9,8 +9,7 @@ try { var global = this; Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("services", { - exports: ["services"], - use: ["util"] + exports: ["services"] }, this); /** diff --git a/common/modules/storage.jsm b/common/modules/storage.jsm index 6697060f..dbc71555 100644 --- a/common/modules/storage.jsm +++ b/common/modules/storage.jsm @@ -293,7 +293,7 @@ var Storage = Module("Storage", { * @param {boolean} checkPWD Whether to allow expansion relative to the * current directory. @default true */ -var File = Class("File", { +this.File = Class("File", { init: function (path, checkPWD) { let file = services.File(); @@ -621,6 +621,6 @@ var File = Class("File", { endModule(); -// catch(e){dump(e.fileName+":"+e.lineNumber+": "+e+"\n" + e.stack);} +// catch(e){ dump(e + "\n" + (e.stack || Error().stack)); Components.utils.reportError(e) } // vim: set fdm=marker sw=4 sts=4 et ft=javascript: diff --git a/common/modules/styles.jsm b/common/modules/styles.jsm index 9c444621..af4ebf3e 100644 --- a/common/modules/styles.jsm +++ b/common/modules/styles.jsm @@ -7,8 +7,7 @@ Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("styles", { exports: ["Style", "Styles", "styles"], - require: ["services", "util"], - use: ["contexts", "dom", "messages", "template"] + require: ["services", "util"] }, this); function cssUri(css) "chrome-data:text/css," + encodeURI(css); diff --git a/common/modules/template.jsm b/common/modules/template.jsm index e5fa86e4..d232855e 100644 --- a/common/modules/template.jsm +++ b/common/modules/template.jsm @@ -7,8 +7,7 @@ Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("template", { exports: ["Binding", "Template", "template"], - require: ["util"], - use: ["help", "messages", "services"] + require: ["util"] }, this); default xml namespace = XHTML; diff --git a/common/modules/util.jsm b/common/modules/util.jsm index 8f478e99..383a9e5e 100644 --- a/common/modules/util.jsm +++ b/common/modules/util.jsm @@ -8,11 +8,11 @@ try { + let global=this; Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("util", { exports: ["DOM", "$", "FailedAssertion", "Math", "NS", "Point", "Util", "XBL", "XHTML", "XUL", "util"], - require: ["dom", "services"], - use: ["commands", "config", "highlight", "messages", "overlay", "storage", "template"] + require: ["dom", "services"] }, this); var FailedAssertion = Class("FailedAssertion", ErrorBase, {