diff options
author | Christiaan Janssen <christiaan.janssen@nokia.com> | 2012-01-11 17:50:51 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-16 12:36:46 +0100 |
commit | df6338a7b4ff43b1bb0538c44c632d122a7c3766 (patch) | |
tree | 23ba0e6833865ad6e7bb5144c78f61d8c4590acc /src/declarative/qml | |
parent | eca445fdf76ee59f7dae07f8833e2f00da26dd89 (diff) |
QDeclarativeExpression: storing column number in expression location
Change-Id: I2d69738158abfc76f80b1cfc0e0ccb145fda2245
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'src/declarative/qml')
-rw-r--r-- | src/declarative/qml/qdeclarativebinding.cpp | 7 | ||||
-rw-r--r-- | src/declarative/qml/qdeclarativeboundsignal.cpp | 2 | ||||
-rw-r--r-- | src/declarative/qml/qdeclarativecompiler.cpp | 2 | ||||
-rw-r--r-- | src/declarative/qml/qdeclarativecomponent.cpp | 2 | ||||
-rw-r--r-- | src/declarative/qml/qdeclarativeengine.cpp | 2 | ||||
-rw-r--r-- | src/declarative/qml/qdeclarativeexpression.cpp | 26 | ||||
-rw-r--r-- | src/declarative/qml/qdeclarativeexpression.h | 5 | ||||
-rw-r--r-- | src/declarative/qml/qdeclarativeexpression_p.h | 5 | ||||
-rw-r--r-- | src/declarative/qml/qdeclarativeinstruction_p.h | 2 | ||||
-rw-r--r-- | src/declarative/qml/qdeclarativescriptstring_p.h | 3 | ||||
-rw-r--r-- | src/declarative/qml/qdeclarativevme.cpp | 3 | ||||
-rw-r--r-- | src/declarative/qml/v4/qv4bindings.cpp | 2 | ||||
-rw-r--r-- | src/declarative/qml/v8/qv8qobjectwrapper.cpp | 3 | ||||
-rw-r--r-- | src/declarative/qml/v8/qv8valuetypewrapper.cpp | 3 |
14 files changed, 44 insertions, 23 deletions
diff --git a/src/declarative/qml/qdeclarativebinding.cpp b/src/declarative/qml/qdeclarativebinding.cpp index 552b5988bf..72d1ac0fb4 100644 --- a/src/declarative/qml/qdeclarativebinding.cpp +++ b/src/declarative/qml/qdeclarativebinding.cpp @@ -216,7 +216,7 @@ void QDeclarativeBindingPrivate::refresh() } QDeclarativeBindingPrivate::QDeclarativeBindingPrivate() -: updating(false), enabled(false), columnNumber(0) +: updating(false), enabled(false) { } @@ -268,13 +268,12 @@ QDeclarativeBinding::QDeclarativeBinding(const QString &str, bool isRewritten, Q QDeclarativeContextData *ctxt, const QString &url, int lineNumber, int columnNumber, QObject *parent) -: QDeclarativeExpression(ctxt, obj, str, isRewritten, url, lineNumber, *new QDeclarativeBindingPrivate) +: QDeclarativeExpression(ctxt, obj, str, isRewritten, url, lineNumber, columnNumber, *new QDeclarativeBindingPrivate) { Q_D(QDeclarativeBinding); setParent(parent); setNotifyOnValueChanged(true); - d->columnNumber = columnNumber; } /*! @@ -340,7 +339,7 @@ public: { QDeclarativeDebugTrace::startRange(QDeclarativeDebugTrace::Binding); QDeclarativeDebugTrace::rangeData(QDeclarativeDebugTrace::Binding, bind->expression()); - QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::Binding, bind->sourceFile(), bind->lineNumber()); + QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::Binding, bind->sourceFile(), bind->lineNumber(), bind->columnNumber()); } ~QDeclarativeBindingProfiler() diff --git a/src/declarative/qml/qdeclarativeboundsignal.cpp b/src/declarative/qml/qdeclarativeboundsignal.cpp index 51691ca6bd..61ad495c1e 100644 --- a/src/declarative/qml/qdeclarativeboundsignal.cpp +++ b/src/declarative/qml/qdeclarativeboundsignal.cpp @@ -173,7 +173,7 @@ int QDeclarativeBoundSignal::qt_metacall(QMetaObject::Call c, int id, void **a) if (QDeclarativeDebugService::isDebuggingEnabled()) { QDeclarativeDebugTrace::startRange(QDeclarativeDebugTrace::HandlingSignal); QDeclarativeDebugTrace::rangeData(QDeclarativeDebugTrace::HandlingSignal, QLatin1String(m_signal.signature()) % QLatin1String(": ") % m_expression->expression()); - QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::HandlingSignal, m_expression->sourceFile(), m_expression->lineNumber()); + QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::HandlingSignal, m_expression->sourceFile(), m_expression->lineNumber(), m_expression->columnNumber()); QV8DebugService::instance()->signalEmitted(QString::fromAscii(m_signal.signature())); } m_isEvaluating = true; diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp index 3a7a6013e6..25013c9870 100644 --- a/src/declarative/qml/qdeclarativecompiler.cpp +++ b/src/declarative/qml/qdeclarativecompiler.cpp @@ -1270,6 +1270,7 @@ void QDeclarativeCompiler::genObjectBody(QDeclarativeScript::Object *obj) // ss.bindingId = rewriteBinding(script, prop->name()); ss.bindingId = rewriteBinding(prop->values.first()->value, QString()); // XXX ss.line = prop->location.start.line; + ss.column = prop->location.start.column; output->addInstruction(ss); } @@ -1331,6 +1332,7 @@ void QDeclarativeCompiler::genObjectBody(QDeclarativeScript::Object *obj) store.value = output->indexForString(rewrite); store.context = v->signalExpressionContextStack; store.line = v->location.start.line; + store.column = v->location.start.column; output->addInstruction(store); } diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp index 5e9938dc39..6faeabfdb7 100644 --- a/src/declarative/qml/qdeclarativecomponent.cpp +++ b/src/declarative/qml/qdeclarativecomponent.cpp @@ -768,7 +768,7 @@ QDeclarativeComponentPrivate::beginCreate(QDeclarativeContextData *context) QDeclarativeData *data = QDeclarativeData::get(rv); Q_ASSERT(data); QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::Creating, - cc->url, data->lineNumber); + cc->url, data->lineNumber, data->columnNumber); } } diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 1d613ccc26..563f012b94 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -964,7 +964,7 @@ Q_AUTOTEST_EXPORT void qmlExecuteDeferred(QObject *object) QString typeName = type ? type->qmlTypeName() : QString::fromUtf8(object->metaObject()->className()); QDeclarativeDebugTrace::rangeData(QDeclarativeDebugTrace::Creating, typeName); if (data->outerContext) - QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::Creating, data->outerContext->url, data->lineNumber); + QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::Creating, data->outerContext->url, data->lineNumber, data->columnNumber); } QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(data->context->engine); diff --git a/src/declarative/qml/qdeclarativeexpression.cpp b/src/declarative/qml/qdeclarativeexpression.cpp index f375716de6..bbaca450d9 100644 --- a/src/declarative/qml/qdeclarativeexpression.cpp +++ b/src/declarative/qml/qdeclarativeexpression.cpp @@ -120,10 +120,11 @@ void QDeclarativeExpressionPrivate::init(QDeclarativeContextData *ctxt, v8::Hand void QDeclarativeExpressionPrivate::init(QDeclarativeContextData *ctxt, const QString &expr, bool isRewritten, QObject *me, const QString &srcUrl, - int lineNumber) + int lineNumber, int columnNumber) { url = srcUrl; line = lineNumber; + column = columnNumber; expression = expr; @@ -159,9 +160,9 @@ QDeclarativeExpressionPrivate::evalFunction(QDeclarativeContextData *ctxt, QObje } QDeclarativeExpression *QDeclarativeExpressionPrivate::create(QDeclarativeContextData *ctxt, QObject *object, const QString &expr, bool isRewritten, - const QString &url, int lineNumber) + const QString &url, int lineNumber, int columnNumber) { - return new QDeclarativeExpression(ctxt, object, expr, isRewritten, url, lineNumber, *new QDeclarativeExpressionPrivate); + return new QDeclarativeExpression(ctxt, object, expr, isRewritten, url, lineNumber, columnNumber, *new QDeclarativeExpressionPrivate); } /*! @@ -206,12 +207,12 @@ QDeclarativeExpression::QDeclarativeExpression() /*! \internal */ QDeclarativeExpression::QDeclarativeExpression(QDeclarativeContextData *ctxt, QObject *object, const QString &expr, bool isRewritten, - const QString &url, int lineNumber, + const QString &url, int lineNumber, int columnNumber, QDeclarativeExpressionPrivate &dd) : QObject(dd, 0) { Q_D(QDeclarativeExpression); - d->init(ctxt, expr, isRewritten, object, url, lineNumber); + d->init(ctxt, expr, isRewritten, object, url, lineNumber, columnNumber); } /*! @@ -250,7 +251,7 @@ QDeclarativeExpression::QDeclarativeExpression(const QDeclarativeScriptString &s if (cdata) d->init(ctxtdata, cdata->primitives.at(id), true, script.scopeObject(), - cdata->name, script.d.data()->lineNumber); + cdata->name, script.d.data()->lineNumber, script.d.data()->columnNumber); else defaultConstruction = true; @@ -695,14 +696,25 @@ int QDeclarativeExpression::lineNumber() const } /*! + Returns the source file column number for this expression. The source location + must have been previously set by calling setSourceLocation(). +*/ +int QDeclarativeExpression::columnNumber() const +{ + Q_D(const QDeclarativeExpression); + return d->column; +} + +/*! Set the location of this expression to \a line of \a url. This information is used by the script engine. */ -void QDeclarativeExpression::setSourceLocation(const QString &url, int line) +void QDeclarativeExpression::setSourceLocation(const QString &url, int line, int column) { Q_D(QDeclarativeExpression); d->url = url; d->line = line; + d->column = column; } /*! diff --git a/src/declarative/qml/qdeclarativeexpression.h b/src/declarative/qml/qdeclarativeexpression.h index dca0692002..63beb56a89 100644 --- a/src/declarative/qml/qdeclarativeexpression.h +++ b/src/declarative/qml/qdeclarativeexpression.h @@ -80,7 +80,8 @@ public: QString sourceFile() const; int lineNumber() const; - void setSourceLocation(const QString &fileName, int line); + int columnNumber() const; + void setSourceLocation(const QString &fileName, int line, int column = 0); QObject *scopeObject() const; @@ -99,7 +100,7 @@ protected: QDeclarativeExpression(QDeclarativeContextData *, QObject *, void *, QDeclarativeExpressionPrivate &dd); QDeclarativeExpression(QDeclarativeContextData *, QObject *, const QString &, bool, - const QString &, int, QDeclarativeExpressionPrivate &dd); + const QString &, int, int, QDeclarativeExpressionPrivate &dd); private: QDeclarativeExpression(QDeclarativeContextData *, QObject *, const QString &); diff --git a/src/declarative/qml/qdeclarativeexpression_p.h b/src/declarative/qml/qdeclarativeexpression_p.h index 772f448174..3ba219c139 100644 --- a/src/declarative/qml/qdeclarativeexpression_p.h +++ b/src/declarative/qml/qdeclarativeexpression_p.h @@ -177,7 +177,7 @@ public: void init(QDeclarativeContextData *, const QString &, QObject *); void init(QDeclarativeContextData *, v8::Handle<v8::Function>, QObject *); - void init(QDeclarativeContextData *, const QString &, bool, QObject *, const QString &, int); + void init(QDeclarativeContextData *, const QString &, bool, QObject *, const QString &, int, int); QVariant value(QObject *secondaryScope = 0, bool *isUndefined = 0); @@ -194,7 +194,7 @@ public: const QString &code, const QString &filename, int line, v8::Persistent<v8::Object> *qmlscope = 0); static QDeclarativeExpression *create(QDeclarativeContextData *, QObject *, const QString &, bool, - const QString &, int); + const QString &, int, int); bool expressionFunctionValid:1; bool expressionFunctionRewritten:1; @@ -209,6 +209,7 @@ public: QString url; // This is a QString for a reason. QUrls are slooooooow... int line; + int column; QString name; //function name, hint for the debugger QDeclarativeRefCount *dataRef; diff --git a/src/declarative/qml/qdeclarativeinstruction_p.h b/src/declarative/qml/qdeclarativeinstruction_p.h index 08cf7c28b8..11f8029f94 100644 --- a/src/declarative/qml/qdeclarativeinstruction_p.h +++ b/src/declarative/qml/qdeclarativeinstruction_p.h @@ -326,6 +326,7 @@ union QDeclarativeInstruction int scope; int bindingId; ushort line; + ushort column; }; struct instr_storeScript { QML_INSTR_HEADER @@ -407,6 +408,7 @@ union QDeclarativeInstruction int value; short context; ushort line; + ushort column; }; struct instr_assignSignalObject { QML_INSTR_HEADER diff --git a/src/declarative/qml/qdeclarativescriptstring_p.h b/src/declarative/qml/qdeclarativescriptstring_p.h index 1c5bd29987..5a9d8be171 100644 --- a/src/declarative/qml/qdeclarativescriptstring_p.h +++ b/src/declarative/qml/qdeclarativescriptstring_p.h @@ -49,13 +49,14 @@ QT_BEGIN_NAMESPACE class QDeclarativeScriptStringPrivate : public QSharedData { public: - QDeclarativeScriptStringPrivate() : context(0), scope(0), bindingId(-1), lineNumber(-1) {} + QDeclarativeScriptStringPrivate() : context(0), scope(0), bindingId(-1), lineNumber(-1), columnNumber(-1) {} QDeclarativeContext *context; QObject *scope; QString script; int bindingId; int lineNumber; + int columnNumber; }; QT_END_NAMESPACE diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp index 5067bcf95e..ea0c27f81b 100644 --- a/src/declarative/qml/qdeclarativevme.cpp +++ b/src/declarative/qml/qdeclarativevme.cpp @@ -711,7 +711,7 @@ QObject *QDeclarativeVME::run(QList<QDeclarativeError> *errors, QDeclarativeBoundSignal *bs = new QDeclarativeBoundSignal(target, signal, target); QDeclarativeExpression *expr = - new QDeclarativeExpression(CTXT, context, PRIMITIVES.at(instr.value), true, COMP->name, instr.line, *new QDeclarativeExpressionPrivate); + new QDeclarativeExpression(CTXT, context, PRIMITIVES.at(instr.value), true, COMP->name, instr.line, instr.column, *new QDeclarativeExpressionPrivate); bs->setExpression(expr); QML_END_INSTR(StoreSignal) @@ -728,6 +728,7 @@ QObject *QDeclarativeVME::run(QList<QDeclarativeError> *errors, ss.setScript(PRIMITIVES.at(instr.value)); ss.d.data()->bindingId = instr.bindingId; ss.d.data()->lineNumber = instr.line; + ss.d.data()->columnNumber = instr.column; void *a[] = { &ss, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, diff --git a/src/declarative/qml/v4/qv4bindings.cpp b/src/declarative/qml/v4/qv4bindings.cpp index 4e0c1821a5..5255db0163 100644 --- a/src/declarative/qml/v4/qv4bindings.cpp +++ b/src/declarative/qml/v4/qv4bindings.cpp @@ -245,7 +245,7 @@ void QV4Bindings::Binding::update(QDeclarativePropertyPrivate::WriteFlags flags) QDeclarativeDebugTrace::startRange(QDeclarativeDebugTrace::Binding); if (parent->context()) QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::Binding, - parent->context()->url, line); + parent->context()->url, line, column); parent->run(this, flags); QDeclarativeDebugTrace::endRange(QDeclarativeDebugTrace::Binding); } diff --git a/src/declarative/qml/v8/qv8qobjectwrapper.cpp b/src/declarative/qml/v8/qv8qobjectwrapper.cpp index 2663344534..2a6b57362e 100644 --- a/src/declarative/qml/v8/qv8qobjectwrapper.cpp +++ b/src/declarative/qml/v8/qv8qobjectwrapper.cpp @@ -589,10 +589,11 @@ static inline void StoreProperty(QV8Engine *engine, QObject *object, QDeclarativ v8::StackTrace::kScriptName)); v8::Local<v8::StackFrame> frame = trace->GetFrame(0); int lineNumber = frame->GetLineNumber(); + int columNumber = frame->GetColumn(); QString url = engine->toString(frame->GetScriptName()); newBinding = new QDeclarativeBinding(&function, object, context); - newBinding->setSourceLocation(url, lineNumber); + newBinding->setSourceLocation(url, lineNumber, columNumber); newBinding->setTarget(object, *property, context); newBinding->setEvaluateFlags(newBinding->evaluateFlags() | QDeclarativeBinding::RequiresThisObject); diff --git a/src/declarative/qml/v8/qv8valuetypewrapper.cpp b/src/declarative/qml/v8/qv8valuetypewrapper.cpp index b712ac5028..c9c302c924 100644 --- a/src/declarative/qml/v8/qv8valuetypewrapper.cpp +++ b/src/declarative/qml/v8/qv8valuetypewrapper.cpp @@ -342,10 +342,11 @@ v8::Handle<v8::Value> QV8ValueTypeWrapper::Setter(v8::Local<v8::String> property v8::StackTrace::kScriptName)); v8::Local<v8::StackFrame> frame = trace->GetFrame(0); int lineNumber = frame->GetLineNumber(); + int columnNumber = frame->GetColumn(); QString url = r->engine->toString(frame->GetScriptName()); newBinding = new QDeclarativeBinding(&function, reference->object, context); - newBinding->setSourceLocation(url, lineNumber); + newBinding->setSourceLocation(url, lineNumber, columnNumber); newBinding->setTarget(reference->object, cacheData, context); newBinding->setEvaluateFlags(newBinding->evaluateFlags() | QDeclarativeBinding::RequiresThisObject); |