bool DOMProxyHandler::enumerate(JSContext* cx, JS::Handle<JSObject*> proxy, AutoIdVector& props) { JS::Rooted<JSObject*> proto(cx); if (!JS_GetPrototype(cx, proxy, &proto)) { return false; } return getOwnPropertyNames(cx, proxy, props) && (!proto || js::GetPropertyNames(cx, proto, 0, &props)); }
void JSObject::getPropertyNames(ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) { getOwnPropertyNames(exec, propertyNames, mode); if (prototype().isNull()) return; JSObject* prototype = asObject(this->prototype()); while(1) { if (prototype->structure()->typeInfo().overridesGetPropertyNames()) { prototype->getPropertyNames(exec, propertyNames, mode); break; } prototype->getOwnPropertyNames(exec, propertyNames, mode); JSValue nextProto = prototype->prototype(); if (nextProto.isNull()) break; prototype = asObject(nextProto); } }
void TiObject::getPropertyNames(TiExcState* exec, PropertyNameArray& propertyNames) { getOwnPropertyNames(exec, propertyNames); if (prototype().isNull()) return; TiObject* prototype = asObject(this->prototype()); while(1) { if (prototype->structure()->typeInfo().overridesGetPropertyNames()) { prototype->getPropertyNames(exec, propertyNames); break; } prototype->getOwnPropertyNames(exec, propertyNames); TiValue nextProto = prototype->prototype(); if (nextProto.isNull()) break; prototype = asObject(nextProto); } }