diff options
-rw-r--r-- | src/script/bridge/qscriptclassobject.cpp | 7 | ||||
-rw-r--r-- | tests/auto/qscriptclass/tst_qscriptclass.cpp | 4 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/script/bridge/qscriptclassobject.cpp b/src/script/bridge/qscriptclassobject.cpp index 2c28ca0..50547e81 100644 --- a/src/script/bridge/qscriptclassobject.cpp +++ b/src/script/bridge/qscriptclassobject.cpp @@ -89,6 +89,11 @@ bool ClassObjectDelegate::getOwnPropertySlot(QScriptObject* object, const JSC::Identifier &propertyName, JSC::PropertySlot &slot) { + // for compatibility with the old back-end, normal JS properties + // are queried first. + if (QScriptObjectDelegate::getOwnPropertySlot(object, exec, propertyName, slot)) + return true; + QScriptEnginePrivate *engine = scriptEngineFromExec(exec); QScriptValue scriptObject = engine->scriptValueFromJSCValue(object); QString name = qtStringFromJSCUString(propertyName.ustring()); @@ -101,7 +106,7 @@ bool ClassObjectDelegate::getOwnPropertySlot(QScriptObject* object, slot.setValue(engine->scriptValueToJSCValue(value)); return true; } - return QScriptObjectDelegate::getOwnPropertySlot(object, exec, propertyName, slot); + return false; } void ClassObjectDelegate::put(QScriptObject* object, JSC::ExecState *exec, diff --git a/tests/auto/qscriptclass/tst_qscriptclass.cpp b/tests/auto/qscriptclass/tst_qscriptclass.cpp index d957ee3..2bc8778 100644 --- a/tests/auto/qscriptclass/tst_qscriptclass.cpp +++ b/tests/auto/qscriptclass/tst_qscriptclass.cpp @@ -652,9 +652,11 @@ void tst_QScriptClass::getAndSetProperty() QVERIFY(cls.lastQueryPropertyFlags() == QScriptClass::HandlesWriteAccess); // re-read property + // When a QScriptClass doesn't want to handle a property write, + // that property becomes a normal property and the QScriptClass + // shall not be queried about it again. cls.clearReceivedArgs(); QVERIFY(o.property(s).strictlyEquals(num)); - QEXPECT_FAIL("", "What's the purpose of this check?", Continue); QVERIFY(!cls.lastQueryPropertyObject().isValid()); } } |