diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-08-29 14:31:32 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-02 17:27:36 +0200 |
commit | edee5c3dc0d922ec3b6a44d66193e9a57b8a979e (patch) | |
tree | 5e40caa777c01a7999d736ead63ae239d1eb5b98 /src/qml/jsapi | |
parent | 3ad8b0f0e8193bb7b62ffee6b33588ef6b51459c (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.cpp | 17 |
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"); } /*! |