summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2010-05-25 06:23:40 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2010-05-25 06:23:40 (GMT)
commitb02bf4ef805e33a763d86ec8ff496a27fddc8ad8 (patch)
tree3a4b532176e4c59f13d8d4d6e42291b45eb0f179 /src/declarative/qml
parenta32987d32033a07e5a7440d7928cc8234db144bb (diff)
downloadQt-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')
-rw-r--r--src/declarative/qml/qdeclarativeglobalscriptclass.cpp23
-rw-r--r--src/declarative/qml/qdeclarativeglobalscriptclass_p.h2
-rw-r--r--src/declarative/qml/qdeclarativeobjectscriptclass.cpp14
-rw-r--r--src/declarative/qml/qdeclarativeobjectscriptclass_p.h1
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;