Changeset 846 for trunk/src/script/bridge/qscriptdeclarativeobject.cpp
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/script/bridge/qscriptdeclarativeobject.cpp
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 67 67 JSC::PropertySlot &slot) 68 68 { 69 QScriptEnginePrivate *engine = scriptEngineFromExec(exec);70 69 QScriptDeclarativeClass::Identifier identifier = (void *)propertyName.ustring().rep(); 71 70 … … 75 74 m_class->queryProperty(m_object, identifier, QScriptClass::HandlesReadAccess); 76 75 if (flags & QScriptClass::HandlesReadAccess) { 77 QScript Value value= m_class->property(m_object, identifier);76 QScriptDeclarativeClass::Value val = m_class->property(m_object, identifier); 78 77 p->context = 0; 79 slot.setValue( engine->scriptValueToJSCValue(value));78 slot.setValue((const JSC::JSValue &)val); 80 79 return true; 81 80 } … … 90 89 { 91 90 QScriptEnginePrivate *engine = scriptEngineFromExec(exec); 91 QScript::SaveFrameHelper saveFrame(engine, exec); 92 92 QScriptDeclarativeClass::Identifier identifier = (void *)propertyName.ustring().rep(); 93 93 … … 107 107 108 108 bool DeclarativeObjectDelegate::deleteProperty(QScriptObject* object, JSC::ExecState *exec, 109 const JSC::Identifier &propertyName, 110 bool checkDontDelete) 109 const JSC::Identifier &propertyName) 111 110 { 112 return QScriptObjectDelegate::deleteProperty(object, exec, propertyName, checkDontDelete); 113 } 114 115 bool DeclarativeObjectDelegate::getPropertyAttributes(const QScriptObject* object, 116 JSC::ExecState *exec, 117 const JSC::Identifier &propertyName, 118 unsigned &attribs) const 119 { 120 QScriptDeclarativeClass::Identifier identifier = (void *)propertyName.ustring().rep(); 121 122 QScriptClass::QueryFlags flags = 123 m_class->queryProperty(m_object, identifier, QScriptClass::HandlesReadAccess); 124 if (flags & QScriptClass::HandlesReadAccess) { 125 QScriptValue::PropertyFlags flags = m_class->propertyFlags(m_object, identifier); 126 attribs = 0; 127 if (flags & QScriptValue::ReadOnly) 128 attribs |= JSC::ReadOnly; 129 if (flags & QScriptValue::SkipInEnumeration) 130 attribs |= JSC::DontEnum; 131 if (flags & QScriptValue::Undeletable) 132 attribs |= JSC::DontDelete; 133 if (flags & QScriptValue::PropertyGetter) 134 attribs |= JSC::Getter; 135 if (flags & QScriptValue::PropertySetter) 136 attribs |= JSC::Setter; 137 attribs |= flags & QScriptValue::UserRange; 138 return true; 139 } 140 return QScriptObjectDelegate::getPropertyAttributes(object, exec, propertyName, attribs); 111 return QScriptObjectDelegate::deleteProperty(object, exec, propertyName); 141 112 } 142 113 143 114 void DeclarativeObjectDelegate::getOwnPropertyNames(QScriptObject* object, JSC::ExecState *exec, 144 115 JSC::PropertyNameArray &propertyNames, 145 bool includeNonEnumerable)116 JSC::EnumerationMode mode) 146 117 { 147 118 QStringList properties = m_class->propertyNames(m_object); … … 151 122 } 152 123 153 QScriptObjectDelegate::getOwnPropertyNames(object, exec, propertyNames, includeNonEnumerable);124 QScriptObjectDelegate::getOwnPropertyNames(object, exec, propertyNames, mode); 154 125 } 155 126 156 127 JSC::CallType DeclarativeObjectDelegate::getCallData(QScriptObject *object, JSC::CallData &callData) 157 128 { 158 return QScriptObjectDelegate::getCallData(object, callData); 129 if (!QScriptDeclarativeClassPrivate::get(m_class)->supportsCall) 130 return JSC::CallTypeNone; 131 callData.native.function = call; 132 return JSC::CallTypeHost; 133 } 134 135 JSC::JSValue DeclarativeObjectDelegate::call(JSC::ExecState *exec, JSC::JSObject *callee, 136 JSC::JSValue thisValue, const JSC::ArgList &args) 137 { 138 if (!callee->inherits(&QScriptObject::info)) 139 return JSC::throwError(exec, JSC::TypeError, "callee is not a DeclarativeObject object"); 140 QScriptObject *obj = static_cast<QScriptObject*>(callee); 141 QScriptObjectDelegate *delegate = obj->delegate(); 142 if (!delegate || (delegate->type() != QScriptObjectDelegate::DeclarativeClassObject)) 143 return JSC::throwError(exec, JSC::TypeError, "callee is not a DeclarativeObject object"); 144 145 QScriptDeclarativeClass *scriptClass = static_cast<DeclarativeObjectDelegate*>(delegate)->m_class; 146 QScriptEnginePrivate *eng_p = scriptEngineFromExec(exec); 147 148 QScript::SaveFrameHelper saveFrame(eng_p, exec); 149 eng_p->pushContext(exec, thisValue, args, callee); 150 QScriptContext *ctxt = eng_p->contextForFrame(eng_p->currentFrame); 151 152 QScriptValue scriptObject = eng_p->scriptValueFromJSCValue(obj); 153 QScriptDeclarativeClass::Value result = 154 scriptClass->call(static_cast<DeclarativeObjectDelegate*>(delegate)->m_object, ctxt); 155 156 eng_p->popContext(); 157 return (JSC::JSValue &)(result); 159 158 } 160 159 … … 170 169 } 171 170 171 bool DeclarativeObjectDelegate::compareToObject(QScriptObject *o, JSC::ExecState *exec, JSC::JSObject *o2) 172 { 173 if (!o2->inherits(&QScriptObject::info)) 174 return false; 175 176 QScriptObject *scriptObject = static_cast<QScriptObject*>(o2); 177 QScriptObjectDelegate *delegate = scriptObject->delegate(); 178 if (!delegate || (delegate->type() != QScriptObjectDelegate::DeclarativeClassObject)) 179 return false; 180 181 DeclarativeObjectDelegate *other = static_cast<DeclarativeObjectDelegate*>(delegate); 182 if (m_class != other->m_class) 183 return false; 184 else 185 return m_class->compare(m_object, other->m_object); 186 } 187 172 188 } // namespace QScript 173 189
Note:
See TracChangeset
for help on using the changeset viewer.