void QScriptStaticScopeObject::addSymbolTableProperty(const JSC::Identifier& name, JSC::JSValue value, unsigned attributes) { int index = growRegisterArray(1); JSC::SymbolTableEntry newEntry(index, attributes | JSC::DontDelete); symbolTable().add(name.ustring().rep(), newEntry); registerAt(index) = value; }
bool DeclarativeObjectDelegate::getPropertyAttributes(const QScriptObject* object, JSC::ExecState *exec, const JSC::Identifier &propertyName, unsigned &attribs) const { QScriptDeclarativeClass::Identifier identifier = (void *)propertyName.ustring().rep(); QScriptClass::QueryFlags flags = m_class->queryProperty(m_object, identifier, QScriptClass::HandlesReadAccess); if (flags & QScriptClass::HandlesReadAccess) { QScriptValue::PropertyFlags flags = m_class->propertyFlags(m_object, identifier); attribs = 0; if (flags & QScriptValue::ReadOnly) attribs |= JSC::ReadOnly; if (flags & QScriptValue::SkipInEnumeration) attribs |= JSC::DontEnum; if (flags & QScriptValue::Undeletable) attribs |= JSC::DontDelete; if (flags & QScriptValue::PropertyGetter) attribs |= JSC::Getter; if (flags & QScriptValue::PropertySetter) attribs |= JSC::Setter; attribs |= flags & QScriptValue::UserRange; return true; } return QScriptObjectDelegate::getPropertyAttributes(object, exec, propertyName, attribs); }
void DeclarativeObjectDelegate::put(QScriptObject* object, JSC::ExecState *exec, const JSC::Identifier &propertyName, JSC::JSValue value, JSC::PutPropertySlot &slot) { QScriptEnginePrivate *engine = scriptEngineFromExec(exec); QScriptDeclarativeClass::Identifier identifier = (void *)propertyName.ustring().rep(); QScriptDeclarativeClassPrivate *p = QScriptDeclarativeClassPrivate::get(m_class); p->context = reinterpret_cast<QScriptContext *>(exec); QScriptClass::QueryFlags flags = m_class->queryProperty(m_object, identifier, QScriptClass::HandlesWriteAccess); if (flags & QScriptClass::HandlesWriteAccess) { m_class->setProperty(m_object, identifier, engine->scriptValueFromJSCValue(value)); p->context = 0; return; } p->context = 0; QScriptObjectDelegate::put(object, exec, propertyName, value, slot); }
bool DeclarativeObjectDelegate::getOwnPropertySlot(QScriptObject* object, JSC::ExecState *exec, const JSC::Identifier &propertyName, JSC::PropertySlot &slot) { QScriptDeclarativeClass::Identifier identifier = (void *)propertyName.ustring().rep(); QScriptDeclarativeClassPrivate *p = QScriptDeclarativeClassPrivate::get(m_class); p->context = reinterpret_cast<QScriptContext *>(exec); QScriptClass::QueryFlags flags = m_class->queryProperty(m_object, identifier, QScriptClass::HandlesReadAccess); if (flags & QScriptClass::HandlesReadAccess) { QScriptDeclarativeClass::Value val = m_class->property(m_object, identifier); p->context = 0; slot.setValue((const JSC::JSValue &)val); return true; } p->context = 0; return QScriptObjectDelegate::getOwnPropertySlot(object, exec, propertyName, slot); }