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/qml | |
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/qml')
-rw-r--r-- | src/qml/qml/qqmlcomponent.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlcontextwrapper.cpp | 4 | ||||
-rw-r--r-- | src/qml/qml/qqmllistwrapper.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmllocale.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmltypewrapper.cpp | 4 | ||||
-rw-r--r-- | src/qml/qml/qqmlvaluetypewrapper.cpp | 4 | ||||
-rw-r--r-- | src/qml/qml/qqmlxmlhttprequest.cpp | 28 | ||||
-rw-r--r-- | src/qml/qml/v8/qqmlbuiltinfunctions.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/v8/qv8engine.cpp | 4 |
9 files changed, 26 insertions, 26 deletions
diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp index 5c26f689de..5f3a2e971c 100644 --- a/src/qml/qml/qqmlcomponent.cpp +++ b/src/qml/qml/qqmlcomponent.cpp @@ -1342,7 +1342,7 @@ void QQmlComponent::incubateObject(QQmlV4Function *args) QV4::ExecutionEngine *v4 = QV8Engine::getV4(args->engine()); QmlIncubatorObject *r = new (v4->memoryManager) QmlIncubatorObject(args->engine(), mode); - r->prototype = e->incubationProto.value().asObject(); + r->setPrototype(e->incubationProto.value().asObject()); if (!valuemap.isEmpty()) { r->valuemap = valuemap; diff --git a/src/qml/qml/qqmlcontextwrapper.cpp b/src/qml/qml/qqmlcontextwrapper.cpp index 9ba3a51757..7c99bbcf9f 100644 --- a/src/qml/qml/qqmlcontextwrapper.cpp +++ b/src/qml/qml/qqmlcontextwrapper.cpp @@ -78,7 +78,7 @@ QV4::Value QmlContextWrapper::qmlScope(QV8Engine *v8, QQmlContextData *ctxt, QOb ExecutionEngine *v4 = QV8Engine::getV4(v8); QmlContextWrapper *w = new (v4->memoryManager) QmlContextWrapper(v8, ctxt, scope); - w->prototype = v4->objectPrototype; + w->setPrototype(v4->objectPrototype); return Value::fromObject(w); } @@ -93,7 +93,7 @@ QV4::Value QmlContextWrapper::urlScope(QV8Engine *v8, const QUrl &url) QmlContextWrapper *w = new (v4->memoryManager) QmlContextWrapper(v8, context, 0); w->isNullWrapper = true; - w->prototype = v4->objectPrototype; + w->setPrototype(v4->objectPrototype); return Value::fromObject(w); } diff --git a/src/qml/qml/qqmllistwrapper.cpp b/src/qml/qml/qqmllistwrapper.cpp index 7afbe3fd29..8b135f2ea9 100644 --- a/src/qml/qml/qqmllistwrapper.cpp +++ b/src/qml/qml/qqmllistwrapper.cpp @@ -57,7 +57,7 @@ QmlListWrapper::QmlListWrapper(QV8Engine *engine) v8(engine) { vtbl = &static_vtbl; - prototype = QV8Engine::getV4(engine)->objectPrototype; + setPrototype(QV8Engine::getV4(engine)->objectPrototype); } QmlListWrapper::~QmlListWrapper() diff --git a/src/qml/qml/qqmllocale.cpp b/src/qml/qml/qqmllocale.cpp index 4694e33abd..f248b8b495 100644 --- a/src/qml/qml/qqmllocale.cpp +++ b/src/qml/qml/qqmllocale.cpp @@ -814,7 +814,7 @@ QV4::Value QQmlLocale::locale(QV8Engine *v8engine, const QString &locale) QQmlLocaleData *wrapper = new (engine->memoryManager) QQmlLocaleData(engine); if (!locale.isEmpty()) wrapper->locale = QLocale(locale); - wrapper->prototype = d->prototype.value().asObject(); + wrapper->setPrototype(d->prototype.value().asObject()); return QV4::Value::fromObject(wrapper); } diff --git a/src/qml/qml/qqmltypewrapper.cpp b/src/qml/qml/qqmltypewrapper.cpp index 20c403c95c..ab64fe1efb 100644 --- a/src/qml/qml/qqmltypewrapper.cpp +++ b/src/qml/qml/qqmltypewrapper.cpp @@ -93,7 +93,7 @@ Value QmlTypeWrapper::create(QV8Engine *v8, QObject *o, QQmlType *t, TypeNameMod ExecutionEngine *v4 = QV8Engine::getV4(v8); QmlTypeWrapper *w = new (v4->memoryManager) QmlTypeWrapper(v8); - w->prototype = v4->objectPrototype; + w->setPrototype(v4->objectPrototype); w->mode = mode; w->object = o; w->type = t; return Value::fromObject(w); } @@ -107,7 +107,7 @@ Value QmlTypeWrapper::create(QV8Engine *v8, QObject *o, QQmlTypeNameCache *t, co ExecutionEngine *v4 = QV8Engine::getV4(v8); QmlTypeWrapper *w = new (v4->memoryManager) QmlTypeWrapper(v8); - w->prototype = v4->objectPrototype; + w->setPrototype(v4->objectPrototype); w->mode = mode; w->object = o; w->typeNamespace = t; w->importNamespace = importNamespace; t->addref(); return Value::fromObject(w); diff --git a/src/qml/qml/qqmlvaluetypewrapper.cpp b/src/qml/qml/qqmlvaluetypewrapper.cpp index 64baf8b1ce..f494fba11f 100644 --- a/src/qml/qml/qqmlvaluetypewrapper.cpp +++ b/src/qml/qml/qqmlvaluetypewrapper.cpp @@ -145,7 +145,7 @@ Value QmlValueTypeWrapper::create(QV8Engine *v8, QObject *object, int property, initProto(v4); QmlValueTypeReference *r = new (v4->memoryManager) QmlValueTypeReference(v8); - r->prototype = v4->qmlExtensions()->valueTypeWrapperPrototype; + r->setPrototype(v4->qmlExtensions()->valueTypeWrapperPrototype); r->type = type; r->object = object; r->property = property; return Value::fromObject(r); } @@ -156,7 +156,7 @@ Value QmlValueTypeWrapper::create(QV8Engine *v8, const QVariant &value, QQmlValu initProto(v4); QmlValueTypeCopy *r = new (v4->memoryManager) QmlValueTypeCopy(v8); - r->prototype = v4->qmlExtensions()->valueTypeWrapperPrototype; + r->setPrototype(v4->qmlExtensions()->valueTypeWrapperPrototype); r->type = type; r->value = value; return Value::fromObject(r); } diff --git a/src/qml/qml/qqmlxmlhttprequest.cpp b/src/qml/qml/qqmlxmlhttprequest.cpp index 5045d700ed..2f93ad5582 100644 --- a/src/qml/qml/qqmlxmlhttprequest.cpp +++ b/src/qml/qml/qqmlxmlhttprequest.cpp @@ -579,7 +579,7 @@ Value Node::create(QV8Engine *engine, NodeImpl *data) switch (data->type) { case NodeImpl::Attr: - instance->prototype = Attr::prototype(v4).asObject(); + instance->setPrototype(Attr::prototype(v4).asObject()); break; case NodeImpl::Comment: case NodeImpl::Document: @@ -591,13 +591,13 @@ Value Node::create(QV8Engine *engine, NodeImpl *data) case NodeImpl::ProcessingInstruction: return Value::undefinedValue(); case NodeImpl::CDATA: - instance->prototype = CDATA::prototype(v4).asObject(); + instance->setPrototype(CDATA::prototype(v4).asObject()); break; case NodeImpl::Text: - instance->prototype = Text::prototype(v4).asObject(); + instance->setPrototype(Text::prototype(v4).asObject()); break; case NodeImpl::Element: - instance->prototype = Element::prototype(v4).asObject(); + instance->setPrototype(Element::prototype(v4).asObject()); break; } @@ -609,7 +609,7 @@ Value Element::prototype(ExecutionEngine *engine) QQmlXMLHttpRequestData *d = xhrdata(engine->v8Engine); if (d->elementPrototype.isEmpty()) { Object *p = engine->newObject(); - p->prototype = NodePrototype::getProto(engine).asObject(); + p->setPrototype(NodePrototype::getProto(engine).asObject()); p->defineAccessorProperty(engine, QStringLiteral("tagName"), NodePrototype::method_get_nodeName, 0); d->elementPrototype = Value::fromObject(p); engine->v8Engine->freezeObject(d->elementPrototype.value()); @@ -622,7 +622,7 @@ Value Attr::prototype(ExecutionEngine *engine) QQmlXMLHttpRequestData *d = xhrdata(engine->v8Engine); if (d->attrPrototype.isEmpty()) { Object *p = engine->newObject(); - p->prototype = NodePrototype::getProto(engine).asObject(); + p->setPrototype(NodePrototype::getProto(engine).asObject()); p->defineAccessorProperty(engine, QStringLiteral("name"), name, 0); p->defineAccessorProperty(engine, QStringLiteral("value"), value, 0); p->defineAccessorProperty(engine, QStringLiteral("ownerElement"), ownerElement, 0); @@ -673,7 +673,7 @@ Value CharacterData::prototype(ExecutionEngine *v4) QQmlXMLHttpRequestData *d = xhrdata(v4->v8Engine); if (d->characterDataPrototype.isEmpty()) { Object *p = v4->newObject(); - p->prototype = NodePrototype::getProto(v4).asObject(); + p->setPrototype(NodePrototype::getProto(v4).asObject()); p->defineAccessorProperty(v4, QStringLiteral("data"), NodePrototype::method_get_nodeValue, 0); p->defineAccessorProperty(v4, QStringLiteral("length"), length, 0); d->characterDataPrototype = Value::fromObject(p); @@ -704,7 +704,7 @@ Value Text::prototype(ExecutionEngine *v4) QQmlXMLHttpRequestData *d = xhrdata(v4->v8Engine); if (d->textPrototype.isEmpty()) { Object *p = v4->newObject(); - p->prototype = CharacterData::prototype(v4).asObject(); + p->setPrototype(CharacterData::prototype(v4).asObject()); p->defineAccessorProperty(v4, QStringLiteral("isElementContentWhitespace"), isElementContentWhitespace, 0); p->defineAccessorProperty(v4, QStringLiteral("wholeText"), wholeText, 0); d->textPrototype = Value::fromObject(p); @@ -719,7 +719,7 @@ Value CDATA::prototype(ExecutionEngine *v4) QQmlXMLHttpRequestData *d = xhrdata(v4->v8Engine); if (d->cdataPrototype.isEmpty()) { Object *p = v4->newObject(); - p->prototype = Text::prototype(v4).asObject(); + p->setPrototype(Text::prototype(v4).asObject()); d->cdataPrototype = Value::fromObject(p); v4->v8Engine->freezeObject(d->cdataPrototype); } @@ -731,7 +731,7 @@ Value Document::prototype(ExecutionEngine *v4) QQmlXMLHttpRequestData *d = xhrdata(v4->v8Engine); if (d->documentPrototype.isEmpty()) { Object *p = v4->newObject(); - p->prototype = NodePrototype::getProto(v4).asObject(); + p->setPrototype(NodePrototype::getProto(v4).asObject()); p->defineAccessorProperty(v4, QStringLiteral("xmlVersion"), xmlVersion, 0); p->defineAccessorProperty(v4, QStringLiteral("xmlEncoding"), xmlEncoding, 0); p->defineAccessorProperty(v4, QStringLiteral("xmlStandalone"), xmlStandalone, 0); @@ -826,7 +826,7 @@ Value Document::load(QV8Engine *engine, const QByteArray &data) } Object *instance = new (v4->memoryManager) Node(v4, document); - instance->prototype = Document::prototype(v4).asObject(); + instance->setPrototype(Document::prototype(v4).asObject()); return Value::fromObject(instance); } @@ -893,7 +893,7 @@ Value NamedNodeMap::create(QV8Engine *engine, NodeImpl *data, const QList<NodeIm ExecutionEngine *v4 = QV8Engine::getV4(engine); NamedNodeMap *instance = new (v4->memoryManager) NamedNodeMap(v4, data, list); - instance->prototype = v4->objectPrototype; + instance->setPrototype(v4->objectPrototype); return Value::fromObject(instance); } @@ -935,7 +935,7 @@ Value NodeList::create(QV8Engine *engine, NodeImpl *data) QQmlXMLHttpRequestData *d = xhrdata(engine); ExecutionEngine *v4 = QV8Engine::getV4(engine); NodeList *instance = new (v4->memoryManager) NodeList(v4, data); - instance->prototype = v4->objectPrototype; + instance->setPrototype(v4->objectPrototype); return Value::fromObject(instance); } @@ -1574,7 +1574,7 @@ struct QQmlXMLHttpRequestCtor : public FunctionObject QV8Engine *engine = that->engine()->v8Engine; QQmlXMLHttpRequest *r = new QQmlXMLHttpRequest(engine, engine->networkAccessManager()); QQmlXMLHttpRequestWrapper *w = new (that->engine()->memoryManager) QQmlXMLHttpRequestWrapper(that->engine(), r); - w->prototype = ctor->proto; + w->setPrototype(ctor->proto); return Value::fromObject(w); } diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp index ac1cdef30e..3f67de2782 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp +++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp @@ -1309,7 +1309,7 @@ Value QtObject::method_get_inputMethod(SimpleCallContext *ctx) QV4::ConsoleObject::ConsoleObject(ExecutionEngine *v4) : Object(v4) { - prototype = v4->objectPrototype; + setPrototype(v4->objectPrototype); defineDefaultProperty(v4, QStringLiteral("debug"), method_log); defineDefaultProperty(v4, QStringLiteral("log"), method_log); diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp index 96c92c4c7c..117fea272c 100644 --- a/src/qml/qml/v8/qv8engine.cpp +++ b/src/qml/qml/v8/qv8engine.cpp @@ -825,7 +825,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::Value &value, int type, void *data) { return true; } else if (QV4::Object *o = value.asObject()) { // Look in the prototype chain. - QV4::Object *proto = o->prototype; + QV4::Object *proto = o->prototype(); while (proto) { bool canCast = false; if (QV4::VariantObject *vo = proto->as<QV4::VariantObject>()) { @@ -845,7 +845,7 @@ bool QV8Engine::metaTypeFromJS(const QV4::Value &value, int type, void *data) { *reinterpret_cast<void* *>(data) = var.data(); return true; } - proto = proto->prototype; + proto = proto->prototype(); } } } else if (value.isNull() && name.endsWith('*')) { |