aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsapi
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-08-29 14:31:32 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-02 17:27:36 +0200
commitedee5c3dc0d922ec3b6a44d66193e9a57b8a979e (patch)
tree5e40caa777c01a7999d736ead63ae239d1eb5b98 /src/qml/jsapi
parent3ad8b0f0e8193bb7b62ffee6b33588ef6b51459c (diff)
Move prototype pointer into QV4::InternalClass
The prototype is actually the same for most objects. By moving it into the internal class, we can save 8 bytes per object, as well as allowing for some future optimizations. Also fix a bug in the implementation of the Error prototype objects. Change-Id: I4d4b641055f644a9b088f27be34bfdb0446279b7 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsapi')
-rw-r--r--src/qml/jsapi/qjsvalue.cpp17
1 files changed, 5 insertions, 12 deletions
diff --git a/src/qml/jsapi/qjsvalue.cpp b/src/qml/jsapi/qjsvalue.cpp
index cff760b49b..b737ee0073 100644
--- a/src/qml/jsapi/qjsvalue.cpp
+++ b/src/qml/jsapi/qjsvalue.cpp
@@ -662,9 +662,9 @@ QJSValue QJSValue::prototype() const
Object *o = d->value.asObject();
if (!o)
return QJSValue();
- if (!o->prototype)
+ if (!o->prototype())
return QJSValue(NullValue);
- return new QJSValuePrivate(o->internalClass->engine, Value::fromObject(o->prototype));
+ return new QJSValuePrivate(o->internalClass->engine, Value::fromObject(o->prototype()));
}
/*!
@@ -685,7 +685,7 @@ void QJSValue::setPrototype(const QJSValue& prototype)
if (!o)
return;
if (prototype.d->value.isNull()) {
- o->prototype = 0;
+ o->setPrototype(0);
return;
}
@@ -696,15 +696,8 @@ void QJSValue::setPrototype(const QJSValue& prototype)
qWarning("QJSValue::setPrototype() failed: cannot set a prototype created in a different engine");
return;
}
- Object *pp = p;
- while (pp) {
- if (pp == o) {
- qWarning("QJSValue::setPrototype() failed: cyclic prototype value");
- return;
- }
- pp = pp->prototype;
- }
- o->prototype = p;
+ if (!o->setPrototype(p))
+ qWarning("QJSValue::setPrototype() failed: cyclic prototype value");
}
/*!