commit d02fe6d9ab87f6bb888c8f00ac433da414643222
parent 6586d309444fd7661d9e7693884a87cbeeb31344
Author: Simon Kornblith <simon@simonster.com>
Date: Wed, 4 Jul 2012 18:22:45 -0400
Include speed of Fx5DOMWrapper
Diffstat:
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/chrome/content/zotero/xpcom/translation/translate_firefox.js b/chrome/content/zotero/xpcom/translation/translate_firefox.js
@@ -96,19 +96,19 @@ Zotero.Translate.SandboxManager.Fx5DOMWrapper = function(obj, parent) {
return null;
}
- var type = typeof obj;
- if(type === "function") {
+ if(typeof obj === "function") {
var me = this;
var val = function() {
var nArgs = arguments.length;
var args = new Array(nArgs);
for(var i=0; i<nArgs; i++) {
- args[i] = (arguments[i] instanceof Object && arguments[i].__wrappedDOMObject
- ? arguments[i].__wrappedDOMObject : arguments[i]);
+ var arg = arguments[i];
+ args[i] = ((typeof arg === "object" || typeof arg === "function")
+ && "__wrappedDOMObject" in arg ? arg.__wrappedDOMObject : arg);
}
return Zotero.Translate.SandboxManager.Fx5DOMWrapper(obj.apply(parent ? parent : null, args));
}
- } else if(type === "object") {
+ } else if(typeof obj === "object") {
if(val instanceof Array) {
var val = [];
} else {
@@ -121,10 +121,12 @@ Zotero.Translate.SandboxManager.Fx5DOMWrapper = function(obj, parent) {
val.__wrappedDOMObject = obj;
val.__exposedProps__ = {};
for(var prop in obj) {
- let localProp = prop;
+ let localProp = prop,
+ cachedWrapper;
val.__exposedProps__[localProp] = "r";
val.__defineGetter__(localProp, function() {
- return Zotero.Translate.SandboxManager.Fx5DOMWrapper(obj[localProp], obj);
+ if(!cachedWrapper) cachedWrapper = Zotero.Translate.SandboxManager.Fx5DOMWrapper(obj[localProp], obj);
+ return cachedWrapper;
});
}