From fab932713af6dfa7aad06ddfde774d25f5222472 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Mon, 10 Aug 2009 13:01:42 +0200 Subject: implement QScriptClass property query semantics of old back-end Look up the property as a normal JS property before falling back to the dynamic query mechanism. This is the documented behavior. --- src/script/bridge/qscriptclassobject.cpp | 7 ++++++- 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()); } } -- cgit v0.12