本文整理汇总了C++中PropertySlot::setCacheableGetterSlot方法的典型用法代码示例。如果您正苦于以下问题:C++ PropertySlot::setCacheableGetterSlot方法的具体用法?C++ PropertySlot::setCacheableGetterSlot怎么用?C++ PropertySlot::setCacheableGetterSlot使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PropertySlot
的用法示例。
在下文中一共展示了PropertySlot::setCacheableGetterSlot方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setUpStaticFunctionSlot
bool setUpStaticFunctionSlot(VM& vm, const HashTableValue* entry, JSObject* thisObject, PropertyName propertyName, PropertySlot& slot)
{
ASSERT(thisObject->globalObject());
ASSERT(entry->attributes() & BuiltinOrFunctionOrAccessorOrLazyProperty);
unsigned attributes;
bool isAccessor = entry->attributes() & Accessor;
PropertyOffset offset = thisObject->getDirectOffset(vm, propertyName, attributes);
if (!isValidOffset(offset)) {
// If a property is ever deleted from an object with a static table, then we reify
// all static functions at that time - after this we shouldn't be re-adding anything.
if (thisObject->staticPropertiesReified())
return false;
reifyStaticProperty(vm, propertyName, *entry, *thisObject);
offset = thisObject->getDirectOffset(vm, propertyName, attributes);
if (!isValidOffset(offset)) {
dataLog("Static hashtable initialiation for ", propertyName, " did not produce a property.\n");
RELEASE_ASSERT_NOT_REACHED();
}
}
if (isAccessor)
slot.setCacheableGetterSlot(thisObject, attributes, jsCast<GetterSetter*>(thisObject->getDirect(offset)), offset);
else
slot.setValue(thisObject, attributes, thisObject->getDirect(offset), offset);
return true;
}
示例2: fillGetterPropertySlot
NEVER_INLINE void JSObject::fillGetterPropertySlot(PropertySlot& slot, JSValue* location)
{
if (JSObject* getterFunction = asGetterSetter(*location)->getter()) {
if (!structure()->isDictionary())
slot.setCacheableGetterSlot(this, getterFunction, offsetForLocation(location));
else
slot.setGetterSlot(getterFunction);
} else
slot.setUndefined();
}
示例3: setUpStaticFunctionSlot
bool setUpStaticFunctionSlot(VM& vm, const HashTableValue* entry, JSObject* thisObject, PropertyName propertyName, PropertySlot& slot)
{
ASSERT(thisObject->globalObject());
ASSERT(entry->attributes() & BuiltinOrFunctionOrAccessorOrLazyProperty);
unsigned attributes;
bool isAccessor = entry->attributes() & Accessor;
PropertyOffset offset = thisObject->getDirectOffset(vm, propertyName, attributes);
if (!isValidOffset(offset)) {
// If a property is ever deleted from an object with a static table, then we reify
// all static functions at that time - after this we shouldn't be re-adding anything.
if (thisObject->staticFunctionsReified())
return false;
if (entry->attributes() & Builtin)
thisObject->putDirectBuiltinFunction(vm, thisObject->globalObject(), propertyName, entry->builtinGenerator()(vm), attributesForStructure(entry->attributes()));
else if (entry->attributes() & Function) {
thisObject->putDirectNativeFunction(
vm, thisObject->globalObject(), propertyName, entry->functionLength(),
entry->function(), entry->intrinsic(), attributesForStructure(entry->attributes()));
} else if (isAccessor)
reifyStaticAccessor(vm, *entry, *thisObject, propertyName);
else if (entry->attributes() & CellProperty) {
LazyCellProperty* property = bitwise_cast<LazyCellProperty*>(
bitwise_cast<char*>(thisObject) + entry->lazyCellPropertyOffset());
JSCell* result = property->get(thisObject);
thisObject->putDirect(vm, propertyName, result, attributesForStructure(entry->attributes()));
} else if (entry->attributes() & ClassStructure) {
LazyClassStructure* structure = bitwise_cast<LazyClassStructure*>(
bitwise_cast<char*>(thisObject) + entry->lazyClassStructureOffset());
structure->get(jsCast<JSGlobalObject*>(thisObject));
} else if (entry->attributes() & PropertyCallback) {
JSValue result = entry->lazyPropertyCallback()(vm, thisObject);
thisObject->putDirect(vm, propertyName, result, attributesForStructure(entry->attributes()));
} else {
dataLog("Static hashtable entry for ", propertyName, " has weird attributes: ", entry->attributes(), "\n");
RELEASE_ASSERT_NOT_REACHED();
}
offset = thisObject->getDirectOffset(vm, propertyName, attributes);
if (!isValidOffset(offset)) {
dataLog("Static hashtable initialiation for ", propertyName, " did not produce a property.\n");
RELEASE_ASSERT_NOT_REACHED();
}
}
if (isAccessor)
slot.setCacheableGetterSlot(thisObject, attributes, jsCast<GetterSetter*>(thisObject->getDirect(offset)), offset);
else
slot.setValue(thisObject, attributes, thisObject->getDirect(offset), offset);
return true;
}