QDeclarativeExpression: storing column number in expression location
authorChristiaan Janssen <christiaan.janssen@nokia.com>
Wed, 11 Jan 2012 16:50:51 +0000 (17:50 +0100)
committerQt by Nokia <qt-info@nokia.com>
Mon, 16 Jan 2012 11:36:46 +0000 (12:36 +0100)
Change-Id: I2d69738158abfc76f80b1cfc0e0ccb145fda2245
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
26 files changed:
src/declarative/debugger/qdeclarativedebugstatesdelegate_p.h
src/declarative/debugger/qdeclarativedebugtrace.cpp
src/declarative/debugger/qdeclarativedebugtrace_p.h
src/declarative/debugger/qdeclarativeenginedebugservice.cpp
src/declarative/debugger/qdeclarativeenginedebugservice_p.h
src/declarative/qml/qdeclarativebinding.cpp
src/declarative/qml/qdeclarativeboundsignal.cpp
src/declarative/qml/qdeclarativecompiler.cpp
src/declarative/qml/qdeclarativecomponent.cpp
src/declarative/qml/qdeclarativeengine.cpp
src/declarative/qml/qdeclarativeexpression.cpp
src/declarative/qml/qdeclarativeexpression.h
src/declarative/qml/qdeclarativeexpression_p.h
src/declarative/qml/qdeclarativeinstruction_p.h
src/declarative/qml/qdeclarativescriptstring_p.h
src/declarative/qml/qdeclarativevme.cpp
src/declarative/qml/v4/qv4bindings.cpp
src/declarative/qml/v8/qv8qobjectwrapper.cpp
src/declarative/qml/v8/qv8valuetypewrapper.cpp
src/qtquick1/util/qdeclarativeanimation.cpp
src/qtquick1/util/qdeclarativeconnections.cpp
src/qtquick1/util/qdeclarativepropertychanges.cpp
src/qtquick1/util/qdeclarativestateoperations.cpp
src/quick/qtquick2.cpp
src/quick/util/qdeclarativeconnections.cpp
src/quick/util/qdeclarativepropertychanges.cpp

index 9c4d094..2d24626 100644 (file)
@@ -79,7 +79,7 @@ public:
     virtual void updateBinding(QDeclarativeContext *context,
                                const QDeclarativeProperty &property,
                                const QVariant &expression, bool isLiteralValue,
-                               const QString &fileName, int line,
+                               const QString &fileName, int line, int column,
                                bool *inBaseState) = 0;
     virtual bool setBindingForInvalidProperty(QObject *object,
                                               const QString &propertyName,
index 60c02c4..9adcd01 100644 (file)
@@ -66,7 +66,7 @@ QByteArray QDeclarativeDebugData::toByteArray() const
     if (messageType == (int)QDeclarativeDebugTrace::RangeData)
         ds << detailData;
     if (messageType == (int)QDeclarativeDebugTrace::RangeLocation)
-        ds << detailData << line;
+        ds << detailData << line << column;
     if (messageType == (int)QDeclarativeDebugTrace::Event &&
             detailType == (int)QDeclarativeDebugTrace::AnimationFrame)
         ds << framerate << animationcount;
@@ -128,14 +128,14 @@ void QDeclarativeDebugTrace::rangeData(RangeType t, const QUrl &data)
     traceInstance()->rangeDataImpl(t, data);
 }
 
-void QDeclarativeDebugTrace::rangeLocation(RangeType t, const QString &fileName, int line)
+void QDeclarativeDebugTrace::rangeLocation(RangeType t, const QString &fileName, int line, int column)
 {
-    traceInstance()->rangeLocationImpl(t, fileName, line);
+    traceInstance()->rangeLocationImpl(t, fileName, line, column);
 }
 
-void QDeclarativeDebugTrace::rangeLocation(RangeType t, const QUrl &fileName, int line)
+void QDeclarativeDebugTrace::rangeLocation(RangeType t, const QUrl &fileName, int line, int column)
 {
-    traceInstance()->rangeLocationImpl(t, fileName, line);
+    traceInstance()->rangeLocationImpl(t, fileName, line, column);
 }
 
 void QDeclarativeDebugTrace::endRange(RangeType t)
@@ -180,7 +180,7 @@ void QDeclarativeDebugTrace::addEventImpl(EventType event)
     if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)event, QString(), -1, 0, 0};
+    QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)event, QString(), -1, -1, 0, 0};
     processMessage(ed);
 }
 
@@ -189,7 +189,7 @@ void QDeclarativeDebugTrace::startRangeImpl(RangeType range)
     if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeStart, (int)range, QString(), -1, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeStart, (int)range, QString(), -1, -1, 0, 0};
     processMessage(rd);
 }
 
@@ -198,7 +198,7 @@ void QDeclarativeDebugTrace::rangeDataImpl(RangeType range, const QString &rData
     if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData, -1, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData, -1, -1, 0, 0};
     processMessage(rd);
 }
 
@@ -207,25 +207,25 @@ void QDeclarativeDebugTrace::rangeDataImpl(RangeType range, const QUrl &rData)
     if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData.toString(QUrl::FormattingOption(0x100)), -1, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeData, (int)range, rData.toString(QUrl::FormattingOption(0x100)), -1, -1, 0, 0};
     processMessage(rd);
 }
 
-void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QString &fileName, int line)
+void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QString &fileName, int line, int column)
 {
     if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName, line, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName, line, column, 0, 0};
     processMessage(rd);
 }
 
-void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QUrl &fileName, int line)
+void QDeclarativeDebugTrace::rangeLocationImpl(RangeType range, const QUrl &fileName, int line, int column)
 {
     if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName.toString(QUrl::FormattingOption(0x100)), line, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeLocation, (int)range, fileName.toString(QUrl::FormattingOption(0x100)), line, column, 0, 0};
     processMessage(rd);
 }
 
@@ -234,7 +234,7 @@ void QDeclarativeDebugTrace::endRangeImpl(RangeType range)
     if (!QDeclarativeDebugService::isDebuggingEnabled() || !m_enabled)
         return;
 
-    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeEnd, (int)range, QString(), -1, 0, 0};
+    QDeclarativeDebugData rd = {m_timer.nsecsElapsed(), (int)RangeEnd, (int)range, QString(), -1, -1, 0, 0};
     processMessage(rd);
 }
 
@@ -249,7 +249,7 @@ void QDeclarativeDebugTrace::animationFrameImpl(qint64 delta)
     if (animCount > 0 && delta > 0) {
         // trim fps to integer
         int fps = 1000 / delta;
-        QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)AnimationFrame, QString(), -1, fps, animCount};
+        QDeclarativeDebugData ed = {m_timer.nsecsElapsed(), (int)Event, (int)AnimationFrame, QString(), -1, -1, fps, animCount};
         processMessage(ed);
     }
 }
index 8d15294..947b447 100644 (file)
@@ -71,6 +71,7 @@ struct Q_AUTOTEST_EXPORT QDeclarativeDebugData
     //###
     QString detailData; //used by RangeData and RangeLocation
     int line;           //used by RangeLocation
+    int column;         //used by RangeLocation
     int framerate;      //used by animation events
     int animationcount; //used by animation events
 
@@ -125,8 +126,8 @@ public:
     static void startRange(RangeType);
     static void rangeData(RangeType, const QString &);
     static void rangeData(RangeType, const QUrl &);
-    static void rangeLocation(RangeType, const QString &, int);
-    static void rangeLocation(RangeType, const QUrl &, int);
+    static void rangeLocation(RangeType, const QString &, int, int);
+    static void rangeLocation(RangeType, const QUrl &, int, int);
     static void endRange(RangeType);
     static void animationFrame(qint64);
 
@@ -145,8 +146,8 @@ private:
     void startRangeImpl(RangeType);
     void rangeDataImpl(RangeType, const QString &);
     void rangeDataImpl(RangeType, const QUrl &);
-    void rangeLocationImpl(RangeType, const QString &, int);
-    void rangeLocationImpl(RangeType, const QUrl &, int);
+    void rangeLocationImpl(RangeType, const QString &, int, int);
+    void rangeLocationImpl(RangeType, const QUrl &, int, int);
     void endRangeImpl(RangeType);
     void animationFrameImpl(qint64);
 
index fa23bc1..2a66c8f 100644 (file)
@@ -540,7 +540,8 @@ void QDeclarativeEngineDebugService::setBinding(int objectId,
                                                 const QVariant &expression,
                                                 bool isLiteralValue,
                                                 QString filename,
-                                                int line)
+                                                int line,
+                                                int column)
 {
     QObject *object = objectForId(objectId);
     QDeclarativeContext *context = qmlContext(object);
@@ -552,7 +553,7 @@ void QDeclarativeEngineDebugService::setBinding(int objectId,
             bool inBaseState = true;
             if (m_statesDelegate) {
                 m_statesDelegate->updateBinding(context, property, expression, isLiteralValue,
-                                                filename, line, &inBaseState);
+                                                filename, line, column, &inBaseState);
             }
 
             if (inBaseState) {
@@ -561,11 +562,11 @@ void QDeclarativeEngineDebugService::setBinding(int objectId,
                 } else if (hasValidSignal(object, propertyName)) {
                     QDeclarativeExpression *declarativeExpression = new QDeclarativeExpression(context, object, expression.toString());
                     QDeclarativePropertyPrivate::setSignalExpression(property, declarativeExpression);
-                    declarativeExpression->setSourceLocation(filename, line);
+                    declarativeExpression->setSourceLocation(filename, line, column);
                 } else if (property.isProperty()) {
                     QDeclarativeBinding *binding = new QDeclarativeBinding(expression.toString(), object, context);
                     binding->setTarget(property);
-                    binding->setSourceLocation(filename, line);
+                    binding->setSourceLocation(filename, line, column);
                     binding->setNotifyOnValueChanged(true);
                     QDeclarativeAbstractBinding *oldBinding = QDeclarativePropertyPrivate::setBinding(property, binding);
                     if (oldBinding)
index 0c7f664..ebbe82b 100644 (file)
@@ -117,7 +117,7 @@ private:
     QDeclarativeObjectData objectData(QObject *);
     QDeclarativeObjectProperty propertyData(QObject *, int);
     QVariant valueContents(const QVariant &defaultValue) const;
-    void setBinding(int objectId, const QString &propertyName, const QVariant &expression, bool isLiteralValue, QString filename = QString(), int line = -1);
+    void setBinding(int objectId, const QString &propertyName, const QVariant &expression, bool isLiteralValue, QString filename = QString(), int line = -1, int column = 0);
     void resetBinding(int objectId, const QString &propertyName);
     void setMethodBody(int objectId, const QString &method, const QString &body);
 
index 552b598..72d1ac0 100644 (file)
@@ -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()
index 51691ca..61ad495 100644 (file)
@@ -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;
index 3a7a601..25013c9 100644 (file)
@@ -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);
 
         }
index 5e9938d..6faeabf 100644 (file)
@@ -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);
         }
     }
 
index 1d613cc..563f012 100644 (file)
@@ -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);
 
index f375716..bbaca45 100644 (file)
@@ -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;
 }
 
 /*!
index dca0692..63beb56 100644 (file)
@@ -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 &);
index 772f448..3ba219c 100644 (file)
@@ -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;
index 08cf7c2..11f8029 100644 (file)
@@ -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
index 1c5bd29..5a9d8be 100644 (file)
@@ -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
index 5067bcf..ea0c27f 100644 (file)
@@ -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, 
index 4e0c182..5255db0 100644 (file)
@@ -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);
 }
index 2663344..2a6b573 100644 (file)
@@ -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);
index b712ac5..c9c302c 100644 (file)
@@ -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);
index 88b318c..76702fb 100644 (file)
@@ -830,7 +830,7 @@ void QDeclarative1ScriptActionPrivate::execute()
         QDeclarativeExpression expr(scriptStr.context(), scriptStr.scopeObject(), str);
         QDeclarativeData *ddata = QDeclarativeData::get(q);
         if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-            expr.setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+            expr.setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber, ddata->columnNumber);
         expr.evaluate();
         if (expr.hasError())
             qmlInfo(q) << expr.error();
index 5aa6a6f..e7bcd9c 100644 (file)
@@ -266,7 +266,7 @@ void QDeclarative1Connections::connectSignals()
             QDeclarativeExpression *expression = new QDeclarativeExpression(qmlContext(this), 0, script);
             QDeclarativeData *ddata = QDeclarativeData::get(this);
             if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber, ddata->columnNumber);
             signal->setExpression(expression);
             d->boundsignals += signal;
         } else {
index d728c25..61f0aac 100644 (file)
@@ -340,7 +340,7 @@ void QDeclarative1PropertyChangesPrivate::decode()
             QDeclarativeExpression *expression = new QDeclarativeExpression(qmlContext(q), object, data.toString());
             QDeclarativeData *ddata = QDeclarativeData::get(q);
             if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber, ddata->columnNumber);
             QDeclarative1ReplaceSignalHandler *handler = new QDeclarative1ReplaceSignalHandler;
             handler->property = prop;
             handler->expression = expression;
@@ -349,7 +349,7 @@ void QDeclarative1PropertyChangesPrivate::decode()
             QDeclarativeExpression *expression = new QDeclarativeExpression(qmlContext(q), object, data.toString());
             QDeclarativeData *ddata = QDeclarativeData::get(q);
             if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber, ddata->columnNumber);
             expressions << ExpressionChange(name, id, expression);
         } else {
             properties << qMakePair(name, data);
@@ -483,7 +483,7 @@ QDeclarative1PropertyChanges::ActionList QDeclarative1PropertyChanges::actions()
                 QDeclarativeBinding *newBinding = id != QDeclarativeBinding::Invalid ? QDeclarativeBinding::createBinding(id, object(), qmlContext(this), e->sourceFile(), e->lineNumber()) : 0;
                 if (!newBinding) {
                     newBinding = new QDeclarativeBinding(e->expression(), object(), qmlContext(this));
-                    newBinding->setSourceLocation(e->sourceFile(), e->lineNumber());
+                    newBinding->setSourceLocation(e->sourceFile(), e->lineNumber(), e->columnNumber());
                 }
                 newBinding->setTarget(prop);
                 a.toBinding = newBinding;
index e4edad6..9211096 100644 (file)
@@ -667,7 +667,7 @@ void QDeclarative1StateChangeScript::execute(Reason)
         QDeclarativeExpression expr(d->script.context(), d->script.scopeObject(), script);
         QDeclarativeData *ddata = QDeclarativeData::get(this);
         if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-            expr.setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+            expr.setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber, ddata->columnNumber);
         expr.evaluate();
         if (expr.hasError())
             qmlInfo(this, expr.error());
index 8614589..232a621 100644 (file)
@@ -67,7 +67,7 @@ public:
     virtual void updateBinding(QDeclarativeContext *context,
                                const QDeclarativeProperty &property,
                                const QVariant &expression, bool isLiteralValue,
-                               const QString &fileName, int line,
+                               const QString &fileName, int line, int column,
                                bool *isBaseState);
     virtual bool setBindingForInvalidProperty(QObject *object,
                                               const QString &propertyName,
@@ -122,7 +122,7 @@ void QDeclarativeQtQuick2DebugStatesDelegate::buildStatesList(QObject *obj)
 void QDeclarativeQtQuick2DebugStatesDelegate::updateBinding(QDeclarativeContext *context,
                                                             const QDeclarativeProperty &property,
                                                             const QVariant &expression, bool isLiteralValue,
-                                                            const QString &fileName, int line,
+                                                            const QString &fileName, int line, int column,
                                                             bool *inBaseState)
 {
     QObject *object = property.object();
@@ -138,7 +138,7 @@ void QDeclarativeQtQuick2DebugStatesDelegate::updateBinding(QDeclarativeContext
                     newBinding = new QDeclarativeBinding(expression.toString(), object, context);
                     newBinding->setTarget(property);
                     newBinding->setNotifyOnValueChanged(true);
-                    newBinding->setSourceLocation(fileName, line);
+                    newBinding->setSourceLocation(fileName, line, column);
                 }
 
                 state->changeBindingInRevertList(object, propertyName, newBinding);
index 92bb1ff..7b977c8 100644 (file)
@@ -204,6 +204,7 @@ QDeclarativeConnectionsParser::compile(const QList<QDeclarativeCustomParserPrope
     {
         QString propName = props.at(ii).name();
         int propLine = props.at(ii).location().line;
+        int propColumn = props.at(ii).location().column;
 
         if (!propName.startsWith(QLatin1String("on")) || !propName.at(2).isUpper()) {
             error(props.at(ii), QDeclarativeConnections::tr("Cannot assign to non-existent property \"%1\"").arg(propName));
@@ -227,6 +228,7 @@ QDeclarativeConnectionsParser::compile(const QList<QDeclarativeCustomParserPrope
                     ds << propName;
                     ds << rewriteSignalHandler(v.asScript(), propName);
                     ds << propLine;
+                    ds << propColumn;
                 } else {
                     error(props.at(ii), QDeclarativeConnections::tr("Connections: script expected"));
                     return QByteArray();
@@ -261,6 +263,9 @@ void QDeclarativeConnections::connectSignals()
         ds >> script;
         int line;
         ds >> line;
+        int column;
+        ds >> column;
+
         QDeclarativeProperty prop(target(), propName);
         if (prop.isValid() && (prop.type() & QDeclarativeProperty::SignalProperty)) {
             QDeclarativeBoundSignal *signal =
@@ -276,7 +281,7 @@ void QDeclarativeConnections::connectSignals()
             }
 
             QDeclarativeExpression *expression = ctxtdata ?
-                QDeclarativeExpressionPrivate::create(ctxtdata, 0, script, true, location, line) : 0;
+                QDeclarativeExpressionPrivate::create(ctxtdata, 0, script, true, location, line, column) : 0;
             signal->setExpression(expression);
             d->boundsignals += signal;
         } else {
index a475c5f..9404b24 100644 (file)
@@ -337,7 +337,7 @@ void QDeclarativePropertyChangesPrivate::decode()
             QDeclarativeExpression *expression = new QDeclarativeExpression(qmlContext(q), object, data.toString());
             QDeclarativeData *ddata = QDeclarativeData::get(q);
             if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber, ddata->columnNumber);
             QDeclarativeReplaceSignalHandler *handler = new QDeclarativeReplaceSignalHandler;
             handler->property = prop;
             handler->expression = expression;
@@ -346,7 +346,7 @@ void QDeclarativePropertyChangesPrivate::decode()
             QDeclarativeExpression *expression = new QDeclarativeExpression(qmlContext(q), object, data.toString());
             QDeclarativeData *ddata = QDeclarativeData::get(q);
             if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber, ddata->columnNumber);
             expressions << ExpressionChange(name, id, expression);
         } else {
             properties << qMakePair(name, data);
@@ -480,7 +480,7 @@ QDeclarativePropertyChanges::ActionList QDeclarativePropertyChanges::actions()
                 QDeclarativeBinding *newBinding = id != QDeclarativeBinding::Invalid ? QDeclarativeBinding::createBinding(id, object(), qmlContext(this), e->sourceFile(), e->lineNumber()) : 0;
                 if (!newBinding) {
                     newBinding = new QDeclarativeBinding(e->expression(), object(), qmlContext(this));
-                    newBinding->setSourceLocation(e->sourceFile(), e->lineNumber());
+                    newBinding->setSourceLocation(e->sourceFile(), e->lineNumber(), e->columnNumber());
                 }
                 newBinding->setTarget(prop);
                 a.toBinding = newBinding;