diff options
author | Michael Brasser <michael.brasser@live.com> | 2014-03-03 21:53:52 -0600 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-11 19:59:05 +0100 |
commit | b9fbb7d9c8abe3003f44ba2eee235adc13c81898 (patch) | |
tree | 6ad1ee9d94cf7e4ede0cec61f858be74aa427e65 /src/qml/qml/qqmlbinding.cpp | |
parent | 92392c936f91412a278a3006f7538de81c856a7b (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.cpp | 88 |
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 |