aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/v8/qv8qobjectwrapper.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2012-04-11 14:56:22 +0200
committerLars Knoll <lars.knoll@nokia.com>2012-04-11 16:05:03 +0200
commita896d4b39ec3d45ba708d9b36ea9c864b1df2136 (patch)
tree45cfe153cce6114c2c76c48dc0bdabde2a8cf3e3 /src/qml/qml/v8/qv8qobjectwrapper.cpp
parent24fb8dc27eddfdd62bd2c3a6e863cbf433762cd6 (diff)
parent65bfc35429e845cf6b76d58107360a1360a654fc (diff)
Merge remote-tracking branch 'origin/master' into api_changes
Conflicts: src/qml/debugger/qqmlprofilerservice_p.h src/qml/qml/qqmlboundsignal.cpp src/qml/qml/v4/qv4bindings.cpp src/quick/items/qquickshadereffect.cpp src/quick/particles/qquickcustomparticle.cpp src/quick/qtquick2.cpp Change-Id: Ia9c6517035ae912fa75e77473a452bd3383def56
Diffstat (limited to 'src/qml/qml/v8/qv8qobjectwrapper.cpp')
-rw-r--r--src/qml/qml/v8/qv8qobjectwrapper.cpp29
1 files changed, 15 insertions, 14 deletions
diff --git a/src/qml/qml/v8/qv8qobjectwrapper.cpp b/src/qml/qml/v8/qv8qobjectwrapper.cpp
index 2350b9dc2c..ce85725642 100644
--- a/src/qml/qml/v8/qv8qobjectwrapper.cpp
+++ b/src/qml/qml/v8/qv8qobjectwrapper.cpp
@@ -63,7 +63,7 @@ Q_DECLARE_METATYPE(QQmlV8Handle);
QT_BEGIN_NAMESPACE
-#if defined(__GNUC__)
+#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405
// The code in this file does not violate strict aliasing, but GCC thinks it does
// so turn off the warnings for us to have a clean build
@@ -269,7 +269,7 @@ static v8::Handle<v8::Value> GenericValueGetter(v8::Local<v8::String>, const v8:
QV8QObjectResource *resource = v8_resource_check<QV8QObjectResource>(This);
QObject *object = resource->object;
- if (!object) return v8::Undefined();
+ if (QQmlData::wasDeleted(object)) return v8::Undefined();
QQmlPropertyData *property =
(QQmlPropertyData *)v8::External::Unwrap(info.Data());
@@ -476,6 +476,7 @@ v8::Handle<v8::Value> QV8QObjectWrapper::GetProperty(QV8Engine *engine, QObject
objectHandle?*objectHandle:engine->newQObject(object),
v8::Integer::New(index)
};
+ Q_ASSERT(argv[0]->IsObject());
return engine->qobjectWrapper()->m_methodConstructor->Call(engine->global(), 2, argv);
}
static v8::Handle<v8::Value> createWithGlobal(QV8Engine *engine, QObject *object,
@@ -486,10 +487,14 @@ v8::Handle<v8::Value> QV8QObjectWrapper::GetProperty(QV8Engine *engine, QObject
v8::Integer::New(index),
v8::Context::GetCallingQmlGlobal()
};
+ Q_ASSERT(argv[0]->IsObject());
return engine->qobjectWrapper()->m_methodConstructor->Call(engine->global(), 3, argv);
}
};
+ if (QQmlData::wasDeleted(object))
+ return v8::Handle<v8::Value>();
+
{
// Comparing the hash first actually makes a measurable difference here, at least on x86
quint32 hash = property.hash();
@@ -705,6 +710,9 @@ bool QV8QObjectWrapper::SetProperty(QV8Engine *engine, QObject *object, const QH
engine->qobjectWrapper()->m_destroyString == property)
return true;
+ if (QQmlData::wasDeleted(object))
+ return false;
+
QQmlPropertyData local;
QQmlPropertyData *result = 0;
result = QQmlPropertyCache::property(engine->engine(), object, property, local);
@@ -735,7 +743,7 @@ v8::Handle<v8::Value> QV8QObjectWrapper::Getter(v8::Local<v8::String> property,
{
QV8QObjectResource *resource = v8_resource_check<QV8QObjectResource>(info.This());
- if (resource->object.isNull())
+ if (QQmlData::wasDeleted(resource->object))
return v8::Handle<v8::Value>();
QObject *object = resource->object;
@@ -779,7 +787,7 @@ v8::Handle<v8::Value> QV8QObjectWrapper::Setter(v8::Local<v8::String> property,
{
QV8QObjectResource *resource = v8_resource_check<QV8QObjectResource>(info.This());
- if (resource->object.isNull())
+ if (QQmlData::wasDeleted(resource->object))
return value;
QObject *object = resource->object;
@@ -873,7 +881,7 @@ static void FastValueSetter(v8::Local<v8::String>, v8::Local<v8::Value> value,
{
QV8QObjectResource *resource = v8_resource_check<QV8QObjectResource>(info.This());
- if (resource->object.isNull())
+ if (QQmlData::wasDeleted(resource->object))
return;
QObject *object = resource->object;
@@ -900,7 +908,7 @@ static void FastValueSetterReadOnly(v8::Local<v8::String> property, v8::Local<v8
{
QV8QObjectResource *resource = v8_resource_check<QV8QObjectResource>(info.This());
- if (resource->object.isNull())
+ if (QQmlData::wasDeleted(resource->object))
return;
QV8Engine *v8engine = resource->engine;
@@ -1080,20 +1088,13 @@ released the handle.
*/
v8::Handle<v8::Value> QV8QObjectWrapper::newQObject(QObject *object)
{
- if (!object)
+ if (QQmlData::wasDeleted(object))
return v8::Null();
- if (QObjectPrivate::get(object)->wasDeleted)
- return v8::Null();
-
QQmlData *ddata = QQmlData::get(object, true);
-
if (!ddata)
return v8::Undefined();
- if (ddata->isQueuedForDeletion)
- return v8::Null();
-
if (ddata->v8objectid == m_id && !ddata->v8object.IsEmpty()) {
// We own the v8object
return v8::Local<v8::Object>::New(ddata->v8object);