aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml
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/qml
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/qml')
-rw-r--r--src/qml/qml/qqmlcomponent.cpp2
-rw-r--r--src/qml/qml/qqmlcontextwrapper.cpp4
-rw-r--r--src/qml/qml/qqmllistwrapper.cpp2
-rw-r--r--src/qml/qml/qqmllocale.cpp2
-rw-r--r--src/qml/qml/qqmltypewrapper.cpp4
-rw-r--r--src/qml/qml/qqmlvaluetypewrapper.cpp4
-rw-r--r--src/qml/qml/qqmlxmlhttprequest.cpp28
-rw-r--r--src/qml/qml/v8/qqmlbuiltinfunctions.cpp2
-rw-r--r--src/qml/qml/v8/qv8engine.cpp4
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('*')) {