diff options
author | Olivier Goffart <ogoffart@trolltech.com> | 2009-07-16 12:19:59 (GMT) |
---|---|---|
committer | Olivier Goffart <ogoffart@trolltech.com> | 2009-07-16 15:13:36 (GMT) |
commit | dbff4e318aaba904f0c7dbf7720954d3514c904a (patch) | |
tree | dc14a7b23cf56332c77a5cee3b080c186784733a | |
parent | 11ba9df469af573dbfdf0754569b623b5ea44542 (diff) | |
download | Qt-dbff4e318aaba904f0c7dbf7720954d3514c904a.zip Qt-dbff4e318aaba904f0c7dbf7720954d3514c904a.tar.gz Qt-dbff4e318aaba904f0c7dbf7720954d3514c904a.tar.bz2 |
We cant rely on property attributes from JavaScriptCore for the setter and getter
-rw-r--r-- | src/script/api/qscriptvalue.cpp | 6 | ||||
-rw-r--r-- | src/script/bridge/qscriptobject.cpp | 10 | ||||
-rw-r--r-- | src/script/bridge/qscriptobject_p.h | 2 | ||||
-rw-r--r-- | tests/auto/qscriptvalue/tst_qscriptvalue.cpp | 8 |
4 files changed, 10 insertions, 16 deletions
diff --git a/src/script/api/qscriptvalue.cpp b/src/script/api/qscriptvalue.cpp index 4d5361e..9fe9041 100644 --- a/src/script/api/qscriptvalue.cpp +++ b/src/script/api/qscriptvalue.cpp @@ -1821,13 +1821,13 @@ QScriptValue::PropertyFlags QScriptValue::propertyFlags(const QString &name, result |= QScriptValue::SkipInEnumeration; if (attribs & JSC::DontDelete) result |= QScriptValue::Undeletable; - if (attribs & JSC::Getter) + //We cannot rely on attribs JSC::Setter/Getter because they are not necesserly set by JSC (bug?) + if (attribs & JSC::Getter || !JSC::asObject(d->jscValue)->lookupGetter(exec, id).isUndefinedOrNull()) result |= QScriptValue::PropertyGetter; - if (attribs & JSC::Setter) + if (attribs & JSC::Setter || !JSC::asObject(d->jscValue)->lookupSetter(exec, id).isUndefinedOrNull()) result |= QScriptValue::PropertySetter; if (attribs & QScript::QObjectMemberAttribute) result |= QScriptValue::QObjectMember; - result |= QScriptValue::PropertyFlag(attribs & QScriptValue::UserRange); return result; } diff --git a/src/script/bridge/qscriptobject.cpp b/src/script/bridge/qscriptobject.cpp index 5cf415a..da31579 100644 --- a/src/script/bridge/qscriptobject.cpp +++ b/src/script/bridge/qscriptobject.cpp @@ -144,16 +144,6 @@ bool QScriptObject::hasInstance(JSC::ExecState* exec, JSC::JSValue value, JSC::J return d->delegate->hasInstance(this, exec, value, proto); } -JSC::JSValue QScriptObject::lookupGetter(JSC::ExecState*, const JSC::Identifier& propertyName) -{ - Q_ASSERT_X(false, Q_FUNC_INFO, "implement me"); -} - -JSC::JSValue QScriptObject::lookupSetter(JSC::ExecState*, const JSC::Identifier& propertyName) -{ - Q_ASSERT_X(false, Q_FUNC_INFO, "implement me"); -} - QScriptObjectPrototype::QScriptObjectPrototype(JSC::ExecState*, WTF::PassRefPtr<JSC::Structure> structure, JSC::Structure* /*prototypeFunctionStructure*/) : QScriptObject(structure) diff --git a/src/script/bridge/qscriptobject_p.h b/src/script/bridge/qscriptobject_p.h index a4ed94c..eaa89b2 100644 --- a/src/script/bridge/qscriptobject_p.h +++ b/src/script/bridge/qscriptobject_p.h @@ -59,8 +59,6 @@ public: virtual bool getPropertyAttributes(JSC::ExecState*, const JSC::Identifier&, unsigned&) const; virtual void getPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&); - virtual JSC::JSValue lookupGetter(JSC::ExecState*, const JSC::Identifier& propertyName); - virtual JSC::JSValue lookupSetter(JSC::ExecState*, const JSC::Identifier& propertyName); virtual void mark(); virtual JSC::CallType getCallData(JSC::CallData&); virtual JSC::ConstructType getConstructData(JSC::ConstructData&); diff --git a/tests/auto/qscriptvalue/tst_qscriptvalue.cpp b/tests/auto/qscriptvalue/tst_qscriptvalue.cpp index 0986fd3..f29fa82 100644 --- a/tests/auto/qscriptvalue/tst_qscriptvalue.cpp +++ b/tests/auto/qscriptvalue/tst_qscriptvalue.cpp @@ -1832,6 +1832,9 @@ void tst_QScriptValue::getSetProperty() // getter() returns this.x object4.setProperty("foo", eng.newFunction(getter), QScriptValue::PropertyGetter | QScriptValue::UserRange); + QCOMPARE(object4.propertyFlags("foo") & ~QScriptValue::UserRange, + QScriptValue::PropertyGetter ); + QEXPECT_FAIL("", "User-range flags are not retained", Continue); QCOMPARE(object4.propertyFlags("foo"), QScriptValue::PropertyGetter | QScriptValue::UserRange); @@ -1841,9 +1844,12 @@ void tst_QScriptValue::getSetProperty() // setter() sets this.x object4.setProperty("foo", eng.newFunction(setter), QScriptValue::PropertySetter | QScriptValue::UserRange); + QCOMPARE(object4.propertyFlags("foo") & ~QScriptValue::UserRange, + QScriptValue::PropertySetter | QScriptValue::PropertyGetter); + QEXPECT_FAIL("", "User-range flags are not retained", Continue); QCOMPARE(object4.propertyFlags("foo"), - QScriptValue::PropertySetter | QScriptValue::UserRange); + QScriptValue::PropertySetter | QScriptValue::PropertyGetter | QScriptValue::UserRange); object4.setProperty("foo", str); QCOMPARE(object4.property("x").strictlyEquals(str), true); QCOMPARE(object4.property("foo").strictlyEquals(str), true); |