Changeset 846 for trunk/src/script/bridge/qscriptclassobject.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/qscriptclassobject.cpp
r769 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) … … 79 79 if (flags & QScriptClass::HandlesReadAccess) { 80 80 QScriptValue value = m_scriptClass->property(scriptObject, scriptName, id); 81 if (!value.isValid()) { 82 // The class claims to have the property, but returned an invalid 83 // value. Silently convert to undefined to avoid the invalid value 84 // "escaping" into JS. 85 value = QScriptValue(QScriptValue::UndefinedValue); 86 } 81 87 slot.setValue(engine->scriptValueToJSCValue(value)); 88 return true; 89 } 90 return false; 91 } 92 93 bool ClassObjectDelegate::getOwnPropertyDescriptor(QScriptObject *object, 94 JSC::ExecState *exec, 95 const JSC::Identifier &propertyName, 96 JSC::PropertyDescriptor &descriptor) 97 { 98 QScriptEnginePrivate *engine = scriptEngineFromExec(exec); 99 QScript::SaveFrameHelper saveFrame(engine, exec); 100 // for compatibility with the old back-end, normal JS properties 101 // are queried first. 102 if (QScriptObjectDelegate::getOwnPropertyDescriptor(object, exec, propertyName, descriptor)) 103 return true; 104 105 QScriptValue scriptObject = engine->scriptValueFromJSCValue(object); 106 QScriptString scriptName; 107 QScriptStringPrivate scriptName_d(engine, propertyName, QScriptStringPrivate::StackAllocated); 108 QScriptStringPrivate::init(scriptName, &scriptName_d); 109 uint id = 0; 110 QScriptClass::QueryFlags qflags = m_scriptClass->queryProperty( 111 scriptObject, scriptName, QScriptClass::HandlesReadAccess, &id); 112 if (qflags & QScriptClass::HandlesReadAccess) { 113 QScriptValue::PropertyFlags pflags = m_scriptClass->propertyFlags(scriptObject, scriptName, id); 114 unsigned attribs = 0; 115 if (pflags & QScriptValue::ReadOnly) 116 attribs |= JSC::ReadOnly; 117 if (pflags & QScriptValue::SkipInEnumeration) 118 attribs |= JSC::DontEnum; 119 if (pflags & QScriptValue::Undeletable) 120 attribs |= JSC::DontDelete; 121 if (pflags & QScriptValue::PropertyGetter) 122 attribs |= JSC::Getter; 123 if (pflags & QScriptValue::PropertySetter) 124 attribs |= JSC::Setter; 125 attribs |= pflags & QScriptValue::UserRange; 126 // Rather than calling the getter, we could return an access descriptor here. 127 QScriptValue value = m_scriptClass->property(scriptObject, scriptName, id); 128 if (!value.isValid()) { 129 // The class claims to have the property, but returned an invalid 130 // value. Silently convert to undefined to avoid the invalid value 131 // "escaping" into JS. 132 value = QScriptValue(QScriptValue::UndefinedValue); 133 } 134 descriptor.setDescriptor(engine->scriptValueToJSCValue(value), attribs); 82 135 return true; 83 136 } … … 106 159 107 160 bool ClassObjectDelegate::deleteProperty(QScriptObject* object, JSC::ExecState *exec, 108 const JSC::Identifier &propertyName, 109 bool checkDontDelete) 161 const JSC::Identifier &propertyName) 110 162 { 111 163 // ### avoid duplication of put() … … 125 177 return true; 126 178 } 127 return QScriptObjectDelegate::deleteProperty(object, exec, propertyName, checkDontDelete); 128 } 129 130 bool ClassObjectDelegate::getPropertyAttributes(const QScriptObject* object, JSC::ExecState *exec, 131 const JSC::Identifier &propertyName, 132 unsigned &attribs) const 133 { 134 QScriptEnginePrivate *engine = scriptEngineFromExec(exec); 135 QScript::SaveFrameHelper saveFrame(engine, exec); 136 QScriptValue scriptObject = engine->scriptValueFromJSCValue(object); 137 QScriptString scriptName; 138 QScriptStringPrivate scriptName_d(engine, propertyName, QScriptStringPrivate::StackAllocated); 139 QScriptStringPrivate::init(scriptName, &scriptName_d); 140 uint id = 0; 141 QScriptClass::QueryFlags flags = m_scriptClass->queryProperty( 142 scriptObject, scriptName, QScriptClass::HandlesReadAccess, &id); 143 if (flags & QScriptClass::HandlesReadAccess) { 144 QScriptValue::PropertyFlags flags = m_scriptClass->propertyFlags(scriptObject, scriptName, id); 145 attribs = 0; 146 if (flags & QScriptValue::ReadOnly) 147 attribs |= JSC::ReadOnly; 148 if (flags & QScriptValue::SkipInEnumeration) 149 attribs |= JSC::DontEnum; 150 if (flags & QScriptValue::Undeletable) 151 attribs |= JSC::DontDelete; 152 if (flags & QScriptValue::PropertyGetter) 153 attribs |= JSC::Getter; 154 if (flags & QScriptValue::PropertySetter) 155 attribs |= JSC::Setter; 156 attribs |= flags & QScriptValue::UserRange; 157 return true; 158 } 159 return QScriptObjectDelegate::getPropertyAttributes(object, exec, propertyName, attribs); 179 return QScriptObjectDelegate::deleteProperty(object, exec, propertyName); 160 180 } 161 181 162 182 void ClassObjectDelegate::getOwnPropertyNames(QScriptObject* object, JSC::ExecState *exec, 163 183 JSC::PropertyNameArray &propertyNames, 164 bool includeNonEnumerable)184 JSC::EnumerationMode mode) 165 185 { 166 186 QScriptEnginePrivate *engine = scriptEngineFromExec(exec); … … 176 196 delete it; 177 197 } 178 QScriptObjectDelegate::getOwnPropertyNames(object, exec, propertyNames, includeNonEnumerable);198 QScriptObjectDelegate::getOwnPropertyNames(object, exec, propertyNames, mode); 179 199 } 180 200 … … 207 227 eng_p->popContext(); 208 228 eng_p->currentFrame = oldFrame; 209 return eng_p->jscValueFromVariant(result);229 return QScriptEnginePrivate::jscValueFromVariant(exec, result); 210 230 } 211 231
Note:
See TracChangeset
for help on using the changeset viewer.