JSValue jsTestSerializedScriptValueInterfaceCachedReadonlyValue(ExecState* exec, JSValue slotBase, PropertyName) { JSTestSerializedScriptValueInterface* castedThis = jsCast<JSTestSerializedScriptValueInterface*>(asObject(slotBase)); UNUSED_PARAM(exec); if (JSValue cachedValue = castedThis->m_cachedReadonlyValue.get()) return cachedValue; TestSerializedScriptValueInterface* impl = static_cast<TestSerializedScriptValueInterface*>(castedThis->impl()); JSValue result = impl->cachedReadonlyValue() ? impl->cachedReadonlyValue()->deserialize(exec, castedThis->globalObject(), 0) : jsNull(); castedThis->m_cachedReadonlyValue.set(exec->vm(), castedThis, result); return result; }
static v8::Handle<v8::Value> cachedReadonlyValueAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { v8::Handle<v8::String> propertyName = v8::String::NewSymbol("cachedReadonlyValue"); v8::Handle<v8::Value> value = info.Holder()->GetHiddenValue(propertyName); if (!value.IsEmpty()) return value; TestSerializedScriptValueInterface* imp = V8TestSerializedScriptValueInterface::toNative(info.Holder()); RefPtr<SerializedScriptValue> serialized = imp->cachedReadonlyValue(); value = serialized ? serialized->deserialize() : v8::Handle<v8::Value>(v8Null(info.GetIsolate())); info.Holder()->SetHiddenValue(propertyName, value); return value; }