Skip to content

Commit

Permalink
QDeclarativeExpression: storing column number in expression location
Browse files Browse the repository at this point in the history
Change-Id: I2d69738158abfc76f80b1cfc0e0ccb145fda2245
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
  • Loading branch information
Christiaan Janssen authored and Qt by Nokia committed Jan 16, 2012
1 parent eca445f commit df6338a
Show file tree
Hide file tree
Showing 26 changed files with 89 additions and 61 deletions.
Expand Up @@ -79,7 +79,7 @@ class QDeclarativeDebugStatesDelegate
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,
Expand Down
30 changes: 15 additions & 15 deletions src/declarative/debugger/qdeclarativedebugtrace.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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);
}

Expand All @@ -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);
}

Expand All @@ -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);
}

Expand All @@ -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);
}

Expand All @@ -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);
}

Expand All @@ -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);
}
}
Expand Down
9 changes: 5 additions & 4 deletions src/declarative/debugger/qdeclarativedebugtrace_p.h
Expand Up @@ -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

Expand Down Expand Up @@ -125,8 +126,8 @@ class Q_DECLARATIVE_EXPORT QDeclarativeDebugTrace : public QDeclarativeDebugServ
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);

Expand All @@ -145,8 +146,8 @@ class Q_DECLARATIVE_EXPORT QDeclarativeDebugTrace : public QDeclarativeDebugServ
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);

Expand Down
9 changes: 5 additions & 4 deletions src/declarative/debugger/qdeclarativeenginedebugservice.cpp
Expand Up @@ -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);
Expand All @@ -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) {
Expand All @@ -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)
Expand Down
Expand Up @@ -117,7 +117,7 @@ private Q_SLOTS:
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);

Expand Down
7 changes: 3 additions & 4 deletions src/declarative/qml/qdeclarativebinding.cpp
Expand Up @@ -216,7 +216,7 @@ void QDeclarativeBindingPrivate::refresh()
}

QDeclarativeBindingPrivate::QDeclarativeBindingPrivate()
: updating(false), enabled(false), columnNumber(0)
: updating(false), enabled(false)
{
}

Expand Down Expand Up @@ -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;
}

/*!
Expand Down Expand Up @@ -340,7 +339,7 @@ class QDeclarativeBindingProfiler {
{
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()
Expand Down
2 changes: 1 addition & 1 deletion src/declarative/qml/qdeclarativeboundsignal.cpp
Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions src/declarative/qml/qdeclarativecompiler.cpp
Expand Up @@ -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);
}

Expand Down Expand Up @@ -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);

}
Expand Down
2 changes: 1 addition & 1 deletion src/declarative/qml/qdeclarativecomponent.cpp
Expand Up @@ -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);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/declarative/qml/qdeclarativeengine.cpp
Expand Up @@ -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);

Expand Down
26 changes: 19 additions & 7 deletions src/declarative/qml/qdeclarativeexpression.cpp
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
}

/*!
Expand Down Expand Up @@ -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);
}

/*!
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -694,15 +695,26 @@ int QDeclarativeExpression::lineNumber() const
return d->line;
}

/*!
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;
}

/*!
Expand Down
5 changes: 3 additions & 2 deletions src/declarative/qml/qdeclarativeexpression.h
Expand Up @@ -80,7 +80,8 @@ class Q_DECLARATIVE_EXPORT QDeclarativeExpression : public QObject

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;

Expand All @@ -99,7 +100,7 @@ class Q_DECLARATIVE_EXPORT QDeclarativeExpression : public QObject
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 &);
Expand Down
5 changes: 3 additions & 2 deletions src/declarative/qml/qdeclarativeexpression_p.h
Expand Up @@ -177,7 +177,7 @@ class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeExpressionPrivate : public QObjec

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);

Expand All @@ -194,7 +194,7 @@ class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeExpressionPrivate : public QObjec
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;
Expand All @@ -209,6 +209,7 @@ class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeExpressionPrivate : public QObjec

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;
Expand Down

0 comments on commit df6338a

Please sign in to comment.