本文整理汇总了C++中PropertyNameArray::shouldCache方法的典型用法代码示例。如果您正苦于以下问题:C++ PropertyNameArray::shouldCache方法的具体用法?C++ PropertyNameArray::shouldCache怎么用?C++ PropertyNameArray::shouldCache使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PropertyNameArray
的用法示例。
在下文中一共展示了PropertyNameArray::shouldCache方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getEnumerablePropertyNames
void Structure::getEnumerablePropertyNames(ExecState* exec, PropertyNameArray& propertyNames, JSObject* baseObject)
{
bool shouldCache = propertyNames.shouldCache() && !(propertyNames.size() || isDictionary());
if (shouldCache && m_cachedPropertyNameArrayData) {
if (m_cachedPropertyNameArrayData->cachedPrototypeChain() == prototypeChain(exec)) {
propertyNames.setData(m_cachedPropertyNameArrayData);
return;
}
clearEnumerationCache();
}
baseObject->getOwnPropertyNames(exec, propertyNames);
if (m_prototype.isObject()) {
propertyNames.setShouldCache(false); // No need for our prototypes to waste memory on caching, since they're not being enumerated directly.
JSObject* prototype = asObject(m_prototype);
while(1) {
if (!prototype->structure()->typeInfo().hasDefaultGetPropertyNames()) {
prototype->getPropertyNames(exec, propertyNames);
break;
}
prototype->getOwnPropertyNames(exec, propertyNames);
JSValue nextProto = prototype->prototype();
if (!nextProto.isObject())
break;
prototype = asObject(nextProto);
}
}
if (shouldCache) {
StructureChain* protoChain = prototypeChain(exec);
m_cachedPropertyNameArrayData = propertyNames.data();
if (!protoChain->isCacheable())
return;
m_cachedPropertyNameArrayData->setCachedPrototypeChain(protoChain);
m_cachedPropertyNameArrayData->setCachedStructure(this);
}
}