1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-04-25 02:21:25 +02:00

Deal with debuggerless cr^wapps in JS completion.

This commit is contained in:
Kris Maglione
2009-11-14 01:21:38 -05:00
parent 86142105a1
commit be0228be64
2 changed files with 48 additions and 15 deletions
+22 -4
View File
@@ -18,10 +18,28 @@ function array(obj) {
function allkeys(obj) { function allkeys(obj) {
let ret = {}; let ret = {};
for (; obj; obj = obj.__proto__) { try {
services.get("debugger").wrapValue(obj).getProperties(ret, {}); for (; obj; obj = obj.__proto__) {
for (let prop in values(ret.value)) services.get("debugger").wrapValue(obj).getProperties(ret, {});
yield prop.name.stringValue; for (let prop in values(ret.value))
yield prop.name.stringValue;
}
return;
}
catch (e) {}
let __iterator__ = obj.__iterator__;
try {
if ('__iterator__' in obj) {
yield '__iterator__';
delete obj.__iterator__;
}
for (let k in obj)
yield k;
}
finally {
if (__iterator__)
obj.__iterator__ = __iterator__;
} }
} }
+26 -11
View File
@@ -783,20 +783,35 @@ const Completion = Module("completion", {
} }
this.iter = function iter(obj, toplevel) { this.iter = function iter(obj, toplevel) {
toplevel = !!toplevel;
let seen = {}; let seen = {};
let ret = {}; let ret = {};
let top = services.get("debugger").wrapValue(obj);
if (!toplevel) try {
obj = obj.__proto__; let top = services.get("debugger").wrapValue(obj);
for (; obj; obj = !toplevel && obj.__proto__) {
services.get("debugger").wrapValue(obj).getProperties(ret, {}); if (!toplevel)
for (let prop in values(ret.value)) { obj = obj.__proto__;
let name = '|' + prop.name.stringValue;
if (name in seen) for (; obj; obj = !toplevel && obj.__proto__) {
continue; services.get("debugger").wrapValue(obj).getProperties(ret, {});
seen[name] = 1; for (let prop in values(ret.value)) {
yield [prop.name.stringValue, top.getProperty(prop.name.stringValue).value.getWrappedValue()] let name = '|' + prop.name.stringValue;
if (name in seen)
continue;
seen[name] = 1;
yield [prop.name.stringValue, top.getProperty(prop.name.stringValue).value.getWrappedValue()]
}
} }
for (let k in obj) {
if (k in obj && !(k in seen) && obj.hasOwnProperty(k) == toplevel)
yield [k, getKey(obj, k)]
}
}
catch(e) {
for (k in allkeys(obj))
if (obj.hasOwnProperty(k) == toplevel)
yield [k, getKey(obj, k)];
} }
}; };