summaryrefslogtreecommitdiffstats
path: root/src/script/api/qscriptvalue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/script/api/qscriptvalue.cpp')
-rw-r--r--src/script/api/qscriptvalue.cpp34
1 files changed, 16 insertions, 18 deletions
diff --git a/src/script/api/qscriptvalue.cpp b/src/script/api/qscriptvalue.cpp
index 2a33aead7b..f2716e4d71 100644
--- a/src/script/api/qscriptvalue.cpp
+++ b/src/script/api/qscriptvalue.cpp
@@ -399,7 +399,10 @@ QScriptValue::PropertyFlags QScriptValuePrivate::propertyFlags(const JSC::Identi
JSC::ExecState *exec = engine->currentFrame;
JSC::JSObject *object = JSC::asObject(jscValue);
unsigned attribs = 0;
- if (!object->getPropertyAttributes(exec, id, attribs)) {
+ JSC::PropertyDescriptor descriptor;
+ if (object->getOwnPropertyDescriptor(exec, id, descriptor))
+ attribs = descriptor.attributes();
+ else if (!object->getPropertyAttributes(exec, id, attribs)) {
if ((mode & QScriptValue::ResolvePrototype) && object->prototype() && object->prototype().isObject()) {
QScriptValue proto = engine->scriptValueFromJSCValue(object->prototype());
return QScriptValuePrivate::get(proto)->propertyFlags(id, mode);
@@ -426,7 +429,7 @@ QScriptValue::PropertyFlags QScriptValuePrivate::propertyFlags(const JSC::Identi
QVariant &QScriptValuePrivate::variantValue() const
{
- Q_ASSERT(jscValue.isObject(&QScriptObject::info));
+ Q_ASSERT(jscValue.inherits(&QScriptObject::info));
QScriptObjectDelegate *delegate = static_cast<QScriptObject*>(JSC::asObject(jscValue))->delegate();
Q_ASSERT(delegate && (delegate->type() == QScriptObjectDelegate::Variant));
return static_cast<QScript::QVariantDelegate*>(delegate)->value();
@@ -434,7 +437,7 @@ QVariant &QScriptValuePrivate::variantValue() const
void QScriptValuePrivate::setVariantValue(const QVariant &value)
{
- Q_ASSERT(jscValue.isObject(&QScriptObject::info));
+ Q_ASSERT(jscValue.inherits(&QScriptObject::info));
QScriptObjectDelegate *delegate = static_cast<QScriptObject*>(JSC::asObject(jscValue))->delegate();
Q_ASSERT(delegate && (delegate->type() == QScriptObjectDelegate::Variant));
static_cast<QScript::QVariantDelegate*>(delegate)->setValue(value);
@@ -759,7 +762,7 @@ bool QScriptValue::isError() const
Q_D(const QScriptValue);
if (!d || !d->isObject())
return false;
- return d->jscValue.isObject(&JSC::ErrorInstance::info);
+ return d->jscValue.inherits(&JSC::ErrorInstance::info);
}
/*!
@@ -773,7 +776,7 @@ bool QScriptValue::isArray() const
Q_D(const QScriptValue);
if (!d || !d->isObject())
return false;
- return d->jscValue.isObject(&JSC::JSArray::info);
+ return d->jscValue.inherits(&JSC::JSArray::info);
}
/*!
@@ -787,7 +790,7 @@ bool QScriptValue::isDate() const
Q_D(const QScriptValue);
if (!d || !d->isObject())
return false;
- return d->jscValue.isObject(&JSC::DateInstance::info);
+ return d->jscValue.inherits(&JSC::DateInstance::info);
}
/*!
@@ -801,7 +804,7 @@ bool QScriptValue::isRegExp() const
Q_D(const QScriptValue);
if (!d || !d->isObject())
return false;
- return d->jscValue.isObject(&JSC::RegExpObject::info);
+ return d->jscValue.inherits(&JSC::RegExpObject::info);
}
/*!
@@ -1153,11 +1156,6 @@ bool QScriptValue::equals(const QScriptValue &other) const
QScriptValuePrivate::saveException(exec, &savedException);
bool result = JSC::JSValue::equal(exec, d->jscValue, other.d_ptr->jscValue);
QScriptValuePrivate::restoreException(exec, savedException);
- // special QtScript rules
- if (!result && isQObject() && other.isQObject())
- result = (toQObject() == other.toQObject());
- else if (!result && isVariant() && other.isVariant())
- result = (toVariant() == other.toVariant());
return result;
}
}
@@ -2264,7 +2262,7 @@ bool QScriptValue::isObject() const
bool QScriptValue::isVariant() const
{
Q_D(const QScriptValue);
- if (!d || !d->isJSC() || !d->jscValue.isObject(&QScriptObject::info))
+ if (!d || !d->isJSC() || !d->jscValue.inherits(&QScriptObject::info))
return false;
QScriptObject *object = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
QScriptObjectDelegate *delegate = object->delegate();
@@ -2283,7 +2281,7 @@ bool QScriptValue::isVariant() const
bool QScriptValue::isQObject() const
{
Q_D(const QScriptValue);
- if (!d || !d->isJSC() || !d->jscValue.isObject(&QScriptObject::info))
+ if (!d || !d->isJSC() || !d->jscValue.inherits(&QScriptObject::info))
return false;
QScriptObject *object = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
QScriptObjectDelegate *delegate = object->delegate();
@@ -2327,7 +2325,7 @@ QScriptValue QScriptValue::data() const
Q_D(const QScriptValue);
if (!d || !d->isObject())
return QScriptValue();
- if (d->jscValue.isObject(&QScriptObject::info)) {
+ if (d->jscValue.inherits(&QScriptObject::info)) {
QScriptObject *scriptObject = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
return d->engine->scriptValueFromJSCValue(scriptObject->data());
} else {
@@ -2350,7 +2348,7 @@ void QScriptValue::setData(const QScriptValue &data)
if (!d || !d->isObject())
return;
JSC::JSValue other = d->engine->scriptValueToJSCValue(data);
- if (d->jscValue.isObject(&QScriptObject::info)) {
+ if (d->jscValue.inherits(&QScriptObject::info)) {
QScriptObject *scriptObject = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
scriptObject->setData(other);
} else {
@@ -2376,7 +2374,7 @@ void QScriptValue::setData(const QScriptValue &data)
QScriptClass *QScriptValue::scriptClass() const
{
Q_D(const QScriptValue);
- if (!d || !d->isJSC() || !d->jscValue.isObject(&QScriptObject::info))
+ if (!d || !d->isJSC() || !d->jscValue.inherits(&QScriptObject::info))
return 0;
QScriptObject *scriptObject = static_cast<QScriptObject*>(JSC::asObject(d->jscValue));
QScriptObjectDelegate *delegate = scriptObject->delegate();
@@ -2403,7 +2401,7 @@ void QScriptValue::setScriptClass(QScriptClass *scriptClass)
Q_D(QScriptValue);
if (!d || !d->isObject())
return;
- if (!d->jscValue.isObject(&QScriptObject::info)) {
+ if (!d->jscValue.inherits(&QScriptObject::info)) {
qWarning("QScriptValue::setScriptClass() failed: "
"cannot change class of non-QScriptObject");
return;