aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlbinding.cpp
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@live.com>2014-03-03 21:53:52 -0600
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-11 19:59:05 +0100
commitb9fbb7d9c8abe3003f44ba2eee235adc13c81898 (patch)
tree6ad1ee9d94cf7e4ede0cec61f858be74aa427e65 /src/qml/qml/qqmlbinding.cpp
parent92392c936f91412a278a3006f7538de81c856a7b (diff)
Remove redundant QQmlBinding members.
This reduces the size of QQmlBinding by 12 bytes. Task-number: QTBUG-37134 Change-Id: Id55257edec8cee88d863374e8a96d7eebbeaf523 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com> Reviewed-by: Michael Brasser <michael.brasser@live.com>
Diffstat (limited to 'src/qml/qml/qqmlbinding.cpp')
-rw-r--r--src/qml/qml/qqmlbinding.cpp88
1 files changed, 53 insertions, 35 deletions
diff --git a/src/qml/qml/qqmlbinding.cpp b/src/qml/qml/qqmlbinding.cpp
index 11b9353dfe..295461ba26 100644
--- a/src/qml/qml/qqmlbinding.cpp
+++ b/src/qml/qml/qqmlbinding.cpp
@@ -51,6 +51,7 @@
#include <private/qqmlexpression_p.h>
#include <private/qqmlscriptstring_p.h>
#include <private/qqmlcontextwrapper_p.h>
+#include <private/qqmlbuiltinfunctions_p.h>
#include <QVariant>
#include <QtCore/qdebug.h>
@@ -71,8 +72,7 @@ QQmlAbstractBinding::VTable QQmlBinding_vtable = {
QQmlBinding::Identifier QQmlBinding::Invalid = -1;
QQmlBinding *
-QQmlBinding::createBinding(Identifier id, QObject *obj, QQmlContext *ctxt,
- const QString &url, quint16 lineNumber)
+QQmlBinding::createBinding(Identifier id, QObject *obj, QQmlContext *ctxt)
{
if (id < 0)
return 0;
@@ -93,7 +93,7 @@ QQmlBinding::createBinding(Identifier id, QObject *obj, QQmlContext *ctxt,
QV4::ExecutionContext *qmlContext = wrapper->context();
QV4::Function *runtimeFunction = cdata->compilationUnit->runtimeFunctions[cdata->customParserBindings[id]];
QV4::ScopedValue function(valueScope, QV4::FunctionObject::creatScriptFunction(qmlContext, runtimeFunction));
- rv = new QQmlBinding(function, obj, ctxtdata, url, lineNumber, 0);
+ rv = new QQmlBinding(function, obj, ctxtdata);
}
typeData->release();
@@ -108,14 +108,12 @@ static QQmlJavaScriptExpression::VTable QQmlBinding_jsvtable = {
};
QQmlBinding::QQmlBinding(const QString &str, QObject *obj, QQmlContext *ctxt)
-: QQmlJavaScriptExpression(&QQmlBinding_jsvtable), QQmlAbstractBinding(Binding),
- m_lineNumber(0), m_columnNumber(0)
+: QQmlJavaScriptExpression(&QQmlBinding_jsvtable), QQmlAbstractBinding(Binding)
{
setNotifyOnValueChanged(true);
QQmlAbstractExpression::setContext(QQmlContextData::get(ctxt));
setScopeObject(obj);
- m_expression = str.toUtf8();
v4function = qmlBinding(context(), obj, str, QString(), 0);
}
@@ -129,6 +127,7 @@ QQmlBinding::QQmlBinding(const QQmlScriptString &script, QObject *obj, QQmlConte
if (!ctxt && (!scriptPrivate->context || !scriptPrivate->context->isValid()))
return;
+ QString url;
QString code;
int id = scriptPrivate->bindingId;
@@ -141,7 +140,7 @@ QQmlBinding::QQmlBinding(const QQmlScriptString &script, QObject *obj, QQmlConte
if (QQmlCompiledData *cdata = typeData->compiledData()) {
code = cdata->primitives.at(id);
- m_url = cdata->name;
+ url = cdata->name;
}
typeData->release();
@@ -153,44 +152,34 @@ QQmlBinding::QQmlBinding(const QQmlScriptString &script, QObject *obj, QQmlConte
QQmlAbstractExpression::setContext(QQmlContextData::get(ctxt ? ctxt : scriptPrivate->context));
setScopeObject(obj ? obj : scriptPrivate->scope);
- m_expression = scriptPrivate->script.toUtf8();
- m_lineNumber = scriptPrivate->lineNumber;
- m_columnNumber = scriptPrivate->columnNumber;
-
- v4function = qmlBinding(context(), scopeObject(), code, QString(), m_lineNumber);
+ v4function = qmlBinding(context(), scopeObject(), code, url, scriptPrivate->lineNumber);
}
QQmlBinding::QQmlBinding(const QString &str, QObject *obj, QQmlContextData *ctxt)
-: QQmlJavaScriptExpression(&QQmlBinding_jsvtable), QQmlAbstractBinding(Binding),
- m_lineNumber(0), m_columnNumber(0)
+: QQmlJavaScriptExpression(&QQmlBinding_jsvtable), QQmlAbstractBinding(Binding)
{
setNotifyOnValueChanged(true);
QQmlAbstractExpression::setContext(ctxt);
setScopeObject(obj);
- m_expression = str.toUtf8();
v4function = qmlBinding(ctxt, obj, str, QString(), 0);
}
QQmlBinding::QQmlBinding(const QString &str, QObject *obj,
QQmlContextData *ctxt,
const QString &url, quint16 lineNumber, quint16 columnNumber)
-: QQmlJavaScriptExpression(&QQmlBinding_jsvtable), QQmlAbstractBinding(Binding),
- m_url(url), m_lineNumber(lineNumber), m_columnNumber(columnNumber)
+: QQmlJavaScriptExpression(&QQmlBinding_jsvtable), QQmlAbstractBinding(Binding)
{
+ Q_UNUSED(columnNumber);
setNotifyOnValueChanged(true);
QQmlAbstractExpression::setContext(ctxt);
setScopeObject(obj);
- m_expression = str.toUtf8();
-
- v4function = qmlBinding(ctxt, obj, str, url, m_lineNumber);
+ v4function = qmlBinding(ctxt, obj, str, url, lineNumber);
}
-QQmlBinding::QQmlBinding(const QV4::ValueRef functionPtr, QObject *obj, QQmlContextData *ctxt,
- const QString &url, quint16 lineNumber, quint16 columnNumber)
-: QQmlJavaScriptExpression(&QQmlBinding_jsvtable), QQmlAbstractBinding(Binding),
- m_url(url), m_lineNumber(lineNumber), m_columnNumber(columnNumber)
+QQmlBinding::QQmlBinding(const QV4::ValueRef functionPtr, QObject *obj, QQmlContextData *ctxt)
+: QQmlJavaScriptExpression(&QQmlBinding_jsvtable), QQmlAbstractBinding(Binding)
{
setNotifyOnValueChanged(true);
QQmlAbstractExpression::setContext(ctxt);
@@ -217,17 +206,38 @@ void QQmlBinding::update(QQmlPropertyPrivate::WriteFlags flags)
if (QQmlData::wasDeleted(object()))
return;
- int lineNo = qmlSourceCoordinate(m_lineNumber);
- int columnNo = qmlSourceCoordinate(m_columnNumber);
+ QString url;
+ quint16 lineNumber;
+ quint16 columnNumber;
+
+ QQmlEnginePrivate *ep = QQmlEnginePrivate::get(context()->engine);
+ QV4::Scope scope(ep->v4engine());
+ QV4::ScopedFunctionObject f(scope, v4function.value());
+ Q_ASSERT(f);
+ if (f->bindingKeyFlag) {
+ QQmlSourceLocation loc = f->as<QQmlBindingFunction>()->bindingLocation;
+ url = loc.sourceFile;
+ lineNumber = loc.line;
+ columnNumber = loc.column;
+ } else {
+ QV4::Function *function = f->asFunctionObject()->function;
+ Q_ASSERT(function);
+
+ url = function->sourceFile();
+ lineNumber = function->compiledFunction->location.line;
+ columnNumber = function->compiledFunction->location.column;
+ }
+
+ int lineNo = qmlSourceCoordinate(lineNumber);
+ int columnNo = qmlSourceCoordinate(columnNumber);
QQmlTrace trace("General Binding Update");
- trace.addDetail("URL", m_url);
+ trace.addDetail("URL", url);
trace.addDetail("Line", lineNo);
trace.addDetail("Column", columnNo);
if (!updatingFlag()) {
- QQmlEnginePrivate *ep = QQmlEnginePrivate::get(context()->engine);
- QQmlBindingProfiler prof(ep->profiler, m_url, lineNo, columnNo);
+ QQmlBindingProfiler prof(ep->profiler, url, lineNo, columnNo);
setUpdatingFlag(true);
QQmlAbstractExpression::DeleteWatcher watcher(this);
@@ -243,13 +253,10 @@ void QQmlBinding::update(QQmlPropertyPrivate::WriteFlags flags)
QMetaObject::metacall(*m_coreObject, QMetaObject::WriteProperty, idx, a);
} else {
- QV4::Scope scope(ep->v4engine());
-
ep->referenceScarceResources();
bool isUndefined = false;
- QV4::ScopedValue f(scope, v4function.value());
QV4::ScopedValue result(scope, QQmlJavaScriptExpression::evaluate(context(), f, &isUndefined));
trace.event("writing binding result");
@@ -262,7 +269,7 @@ void QQmlBinding::update(QQmlPropertyPrivate::WriteFlags flags)
if (!watcher.wasDeleted()) {
if (needsErrorLocationData)
- delayedError()->setErrorLocation(QUrl(m_url), m_lineNumber, m_columnNumber);
+ delayedError()->setErrorLocation(QUrl(url), lineNumber, columnNumber);
if (hasError()) {
if (!delayedError()->addError(ep)) ep->warning(this->error(context()->engine));
@@ -303,7 +310,16 @@ QString QQmlBinding::expressionIdentifier(QQmlJavaScriptExpression *e)
{
QQmlBinding *This = static_cast<QQmlBinding *>(e);
- return This->m_url + QLatin1Char(':') + QString::number(This->m_lineNumber) + QLatin1Char(':') + QString::number(This->m_columnNumber);
+ QQmlEnginePrivate *ep = QQmlEnginePrivate::get(This->context()->engine);
+ QV4::Scope scope(ep->v4engine());
+ QV4::ScopedValue f(scope, This->v4function.value());
+ QV4::Function *function = f->asFunctionObject()->function;
+
+ QString url = function->sourceFile();
+ quint16 lineNumber = function->compiledFunction->location.line;
+ quint16 columnNumber = function->compiledFunction->location.column;
+
+ return url + QLatin1Char(':') + QString::number(lineNumber) + QLatin1Char(':') + QString::number(columnNumber);
}
void QQmlBinding::expressionChanged(QQmlJavaScriptExpression *e)
@@ -358,7 +374,9 @@ void QQmlBinding::setEnabled(bool e, QQmlPropertyPrivate::WriteFlags flags)
QString QQmlBinding::expression() const
{
- return QString::fromUtf8(m_expression);
+ QV4::Scope scope(QQmlEnginePrivate::get(context()->engine)->v4engine());
+ QV4::ScopedValue v(scope, v4function.value());
+ return v->toQStringNoThrow();
}
QObject *QQmlBinding::object() const