toString: function () "[module " + this.constructor.className + "]"
});
+var _id = 0;
+
var Modules = function Modules(window) {
/**
* @constructor Module
}
},
- newContext: function newContext(proto, normal) {
+ newContext: function newContext(proto, normal, name) {
if (normal)
return create(proto);
var sandbox = services.dactyl.createGlobal();
else
sandbox = Components.utils.Sandbox(window, { sandboxPrototype: proto || modules,
+ sandboxName: name || ("Dactyl Sandbox " + ++_id),
wantXrays: false });
// Hack:
this.loaded = {};
modules.loaded = this.loaded;
- defineModule.modules.forEach(function defModule(mod) {
- let names = Set(Object.keys(mod.INIT));
- if ("init" in mod.INIT)
- Set.add(names, "init");
-
- keys(names).forEach(function (name) { self.deferInit(name, mod.INIT, mod); });
- });
this.modules = modules;
this.scanModules();
let className = mod.className || mod.constructor.className;
- init[className] = function callee() {
- function finish() {
- this.currentDependency = className;
- defineModule.time(className, name, INIT[name], mod,
- modules.dactyl, modules, window);
- }
- if (!callee.frobbed) {
- callee.frobbed = true;
- if (modules[name] instanceof Class)
- modules[name].withSavedValues(["currentDependency"], finish);
- else
- finish.call({});
- }
- };
+ if (!Set.has(init, className)) {
+ init[className] = function callee() {
+ function finish() {
+ this.currentDependency = className;
+ defineModule.time(className, name, INIT[name], mod,
+ modules.dactyl, modules, window);
+ }
+ if (!callee.frobbed) {
+ callee.frobbed = true;
+ if (modules[name] instanceof Class)
+ modules[name].withSavedValues(["currentDependency"], finish);
+ else
+ finish.call({});
+ }
+ };
- INIT[name].require = function (name) { init[name](); };
+ INIT[name].require = function (name) { init[name](); };
+ }
},
scanModules: function scanModules() {
let self = this;
let { Module, modules } = this.modules;
+ defineModule.modules.forEach(function defModule(mod) {
+ let names = Set(Object.keys(mod.INIT));
+ if ("init" in mod.INIT)
+ Set.add(names, "init");
+
+ keys(names).forEach(function (name) { self.deferInit(name, mod.INIT, mod); });
+ });
+
Module.list.forEach(function frobModule(mod) {
if (!mod.frobbed) {
modules.__defineGetter__(mod.className, function () {