diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2010-05-25 06:23:40 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2010-05-25 06:23:40 (GMT) |
commit | b02bf4ef805e33a763d86ec8ff496a27fddc8ad8 (patch) | |
tree | 3a4b532176e4c59f13d8d4d6e42291b45eb0f179 /src/declarative/qml | |
parent | a32987d32033a07e5a7440d7928cc8234db144bb (diff) | |
download | Qt-b02bf4ef805e33a763d86ec8ff496a27fddc8ad8.zip Qt-b02bf4ef805e33a763d86ec8ff496a27fddc8ad8.tar.gz Qt-b02bf4ef805e33a763d86ec8ff496a27fddc8ad8.tar.bz2 |
Revert "Reading/writing a non-existent property throws an exception"
This reverts commit 2b3e7706f4459569520c77b9fb3ff2bc006e60f1.
Diffstat (limited to 'src/declarative/qml')
4 files changed, 26 insertions, 14 deletions
diff --git a/src/declarative/qml/qdeclarativeglobalscriptclass.cpp b/src/declarative/qml/qdeclarativeglobalscriptclass.cpp index 35cb2b4..6e107fb 100644 --- a/src/declarative/qml/qdeclarativeglobalscriptclass.cpp +++ b/src/declarative/qml/qdeclarativeglobalscriptclass.cpp @@ -98,9 +98,7 @@ QDeclarativeGlobalScriptClass::property(const QScriptValue &object, Q_UNUSED(object); Q_UNUSED(name); Q_UNUSED(id); - QString error = QLatin1String("Cannot access non-existent property \"") + - name.toString() + QLatin1Char('\"'); - return engine()->currentContext()->throwError(error); + return engine()->undefinedValue(); } void QDeclarativeGlobalScriptClass::setProperty(QScriptValue &object, @@ -115,5 +113,24 @@ void QDeclarativeGlobalScriptClass::setProperty(QScriptValue &object, engine()->currentContext()->throwError(error); } +/* This method is for the use of tst_qdeclarativeecmascript::callQtInvokables() only */ +void QDeclarativeGlobalScriptClass::explicitSetProperty(const QString &name, const QScriptValue &value) +{ + QScriptValue globalObject = engine()->globalObject(); + + QScriptValue v = engine()->newObject(); + + QScriptValueIterator iter(v); + while (iter.hasNext()) { + iter.next(); + v.setProperty(iter.scriptName(), iter.value()); + } + + v.setProperty(name, value); + v.setScriptClass(this); + + engine()->setGlobalObject(v); +} + QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativeglobalscriptclass_p.h b/src/declarative/qml/qdeclarativeglobalscriptclass_p.h index 3fe766f..7690edd 100644 --- a/src/declarative/qml/qdeclarativeglobalscriptclass_p.h +++ b/src/declarative/qml/qdeclarativeglobalscriptclass_p.h @@ -73,6 +73,8 @@ public: virtual void setProperty(QScriptValue &object, const QScriptString &name, uint id, const QScriptValue &value); + void explicitSetProperty(const QString &, const QScriptValue &); + const QScriptValue &globalObject() const { return m_globalObject; } const QSet<QString> &illegalNames() const { return m_illegalNames; } diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp index be2be8b..aca01b2 100644 --- a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp +++ b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp @@ -93,7 +93,6 @@ QDeclarativeObjectScriptClass::QDeclarativeObjectScriptClass(QDeclarativeEngine m_destroyId = createPersistentIdentifier(QLatin1String("destroy")); m_toString = scriptEngine->newFunction(tostring); m_toStringId = createPersistentIdentifier(QLatin1String("toString")); - m_valueOfId = createPersistentIdentifier(QLatin1String("valueOf")); } QDeclarativeObjectScriptClass::~QDeclarativeObjectScriptClass() @@ -158,8 +157,7 @@ QDeclarativeObjectScriptClass::queryProperty(QObject *obj, const Identifier &nam lastTNData = 0; if (name == m_destroyId.identifier || - name == m_toStringId.identifier || - name == m_valueOfId.identifier) + name == m_toStringId.identifier) return QScriptClass::HandlesReadAccess; if (!obj) @@ -213,15 +211,11 @@ QDeclarativeObjectScriptClass::property(QObject *obj, const Identifier &name) if (name == m_destroyId.identifier) return Value(scriptEngine, m_destroy); - else if (name == m_toStringId.identifier || - name == m_valueOfId.identifier) + else if (name == m_toStringId.identifier) return Value(scriptEngine, m_toString); - if (lastData && !lastData->isValid()) { - QString error = QLatin1String("Cannot access non-existent property \"") + - toString(name) + QLatin1Char('\"'); - return Value(scriptEngine, context()->throwError(error)); - } + if (lastData && !lastData->isValid()) + return Value(); Q_ASSERT(obj); diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass_p.h b/src/declarative/qml/qdeclarativeobjectscriptclass_p.h index 34c71a0..4b27e53 100644 --- a/src/declarative/qml/qdeclarativeobjectscriptclass_p.h +++ b/src/declarative/qml/qdeclarativeobjectscriptclass_p.h @@ -139,7 +139,6 @@ private: PersistentIdentifier m_destroyId; PersistentIdentifier m_toStringId; - PersistentIdentifier m_valueOfId; QScriptValue m_destroy; QScriptValue m_toString; |