aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml
diff options
context:
space:
mode:
authorChristiaan Janssen <christiaan.janssen@nokia.com>2012-01-11 17:50:51 +0100
committerQt by Nokia <qt-info@nokia.com>2012-01-16 12:36:46 +0100
commitdf6338a7b4ff43b1bb0538c44c632d122a7c3766 (patch)
tree23ba0e6833865ad6e7bb5144c78f61d8c4590acc /src/declarative/qml
parenteca445fdf76ee59f7dae07f8833e2f00da26dd89 (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.cpp7
-rw-r--r--src/declarative/qml/qdeclarativeboundsignal.cpp2
-rw-r--r--src/declarative/qml/qdeclarativecompiler.cpp2
-rw-r--r--src/declarative/qml/qdeclarativecomponent.cpp2
-rw-r--r--src/declarative/qml/qdeclarativeengine.cpp2
-rw-r--r--src/declarative/qml/qdeclarativeexpression.cpp26
-rw-r--r--src/declarative/qml/qdeclarativeexpression.h5
-rw-r--r--src/declarative/qml/qdeclarativeexpression_p.h5
-rw-r--r--src/declarative/qml/qdeclarativeinstruction_p.h2
-rw-r--r--src/declarative/qml/qdeclarativescriptstring_p.h3
-rw-r--r--src/declarative/qml/qdeclarativevme.cpp3
-rw-r--r--src/declarative/qml/v4/qv4bindings.cpp2
-rw-r--r--src/declarative/qml/v8/qv8qobjectwrapper.cpp3
-rw-r--r--src/declarative/qml/v8/qv8valuetypewrapper.cpp3
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);