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,
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;
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)
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);
}
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);
}
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);
}
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);
}
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);
}
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);
}
}
//###
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
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);
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);
const QVariant &expression,
bool isLiteralValue,
QString filename,
- int line)
+ int line,
+ int column)
{
QObject *object = objectForId(objectId);
QDeclarativeContext *context = qmlContext(object);
bool inBaseState = true;
if (m_statesDelegate) {
m_statesDelegate->updateBinding(context, property, expression, isLiteralValue,
- filename, line, &inBaseState);
+ filename, line, column, &inBaseState);
}
if (inBaseState) {
} 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)
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);
}
QDeclarativeBindingPrivate::QDeclarativeBindingPrivate()
-: updating(false), enabled(false), columnNumber(0)
+: updating(false), enabled(false)
{
}
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;
}
/*!
{
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()
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;
// 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);
}
store.value = output->indexForString(rewrite);
store.context = v->signalExpressionContextStack;
store.line = v->location.start.line;
+ store.column = v->location.start.column;
output->addInstruction(store);
}
QDeclarativeData *data = QDeclarativeData::get(rv);
Q_ASSERT(data);
QDeclarativeDebugTrace::rangeLocation(QDeclarativeDebugTrace::Creating,
- cc->url, data->lineNumber);
+ cc->url, data->lineNumber, data->columnNumber);
}
}
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);
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;
}
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);
}
/*!
/*! \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);
}
/*!
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;
}
/*!
+ 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;
}
/*!
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;
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 &);
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);
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;
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;
int scope;
int bindingId;
ushort line;
+ ushort column;
};
struct instr_storeScript {
QML_INSTR_HEADER
int value;
short context;
ushort line;
+ ushort column;
};
struct instr_assignSignalObject {
QML_INSTR_HEADER
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
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)
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,
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);
}
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);
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);
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();
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 {
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;
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);
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;
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());
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,
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();
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);
{
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));
ds << propName;
ds << rewriteSignalHandler(v.asScript(), propName);
ds << propLine;
+ ds << propColumn;
} else {
error(props.at(ii), QDeclarativeConnections::tr("Connections: script expected"));
return QByteArray();
ds >> script;
int line;
ds >> line;
+ int column;
+ ds >> column;
+
QDeclarativeProperty prop(target(), propName);
if (prop.isValid() && (prop.type() & QDeclarativeProperty::SignalProperty)) {
QDeclarativeBoundSignal *signal =
}
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 {
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;
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);
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;