aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml
diff options
context:
space:
mode:
authorChris Adams <christopher.adams@nokia.com>2011-08-03 14:00:57 +1000
committerQt by Nokia <qt-info@nokia.com>2011-08-04 06:07:22 +0200
commit7964b819aefbee380ca24288c6234f5917211529 (patch)
tree55c7623db9d2038faa68136ac54c4503d5c25c33 /src/declarative/qml
parentfd68b868aee89f40138492468745f0e5edb3286e (diff)
Improve error messages from compiler for signals and slots
This commit ensures that correct line and column information is provided in some cases (duplicate signal or method name, etc). Task-number: QTBUG-15076 Change-Id: I483bdc92ef4f1d1d2ff565bb957385fd495672da Reviewed-on: http://codereview.qt.nokia.com/1619 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'src/declarative/qml')
-rw-r--r--src/declarative/qml/qdeclarativecompiler.cpp18
-rw-r--r--src/declarative/qml/qdeclarativeparser.cpp2
-rw-r--r--src/declarative/qml/qdeclarativeparser_p.h1
-rw-r--r--src/declarative/qml/qdeclarativescriptparser.cpp1
4 files changed, 13 insertions, 9 deletions
diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp
index 02c517c2e3..f39e1ab5f9 100644
--- a/src/declarative/qml/qdeclarativecompiler.cpp
+++ b/src/declarative/qml/qdeclarativecompiler.cpp
@@ -2381,25 +2381,27 @@ bool QDeclarativeCompiler::checkDynamicMeta(QDeclarativeParser::Object *obj)
}
for (int ii = 0; ii < obj->dynamicSignals.count(); ++ii) {
- QByteArray name = obj->dynamicSignals.at(ii).name;
+ const QDeclarativeParser::Object::DynamicSignal &currSig = obj->dynamicSignals.at(ii);
+ QByteArray name = currSig.name;
if (methodNames.contains(name))
- COMPILE_EXCEPTION(obj, tr("Duplicate signal name"));
+ COMPILE_EXCEPTION(&currSig, tr("Duplicate signal name"));
QString nameStr = QString::fromUtf8(name);
if (nameStr.at(0).isUpper())
- COMPILE_EXCEPTION(obj, tr("Signal names cannot begin with an upper case letter"));
+ COMPILE_EXCEPTION(&currSig, tr("Signal names cannot begin with an upper case letter"));
if (enginePrivate->v8engine()->illegalNames().contains(nameStr))
- COMPILE_EXCEPTION(obj, tr("Illegal signal name"));
+ COMPILE_EXCEPTION(&currSig, tr("Illegal signal name"));
methodNames.insert(name);
}
for (int ii = 0; ii < obj->dynamicSlots.count(); ++ii) {
- QByteArray name = obj->dynamicSlots.at(ii).name;
+ const QDeclarativeParser::Object::DynamicSlot &currSlot = obj->dynamicSlots.at(ii);
+ QByteArray name = currSlot.name;
if (methodNames.contains(name))
- COMPILE_EXCEPTION(obj, tr("Duplicate method name"));
+ COMPILE_EXCEPTION(&currSlot, tr("Duplicate method name"));
QString nameStr = QString::fromUtf8(name);
if (nameStr.at(0).isUpper())
- COMPILE_EXCEPTION(obj, tr("Method names cannot begin with an upper case letter"));
+ COMPILE_EXCEPTION(&currSlot, tr("Method names cannot begin with an upper case letter"));
if (enginePrivate->v8engine()->illegalNames().contains(nameStr))
- COMPILE_EXCEPTION(obj, tr("Illegal method name"));
+ COMPILE_EXCEPTION(&currSlot, tr("Illegal method name"));
methodNames.insert(name);
}
diff --git a/src/declarative/qml/qdeclarativeparser.cpp b/src/declarative/qml/qdeclarativeparser.cpp
index 0447ea3227..a405022a71 100644
--- a/src/declarative/qml/qdeclarativeparser.cpp
+++ b/src/declarative/qml/qdeclarativeparser.cpp
@@ -191,7 +191,7 @@ QDeclarativeParser::Object::DynamicSignal::DynamicSignal()
QDeclarativeParser::Object::DynamicSignal::DynamicSignal(const DynamicSignal &o)
: name(o.name), parameterTypes(o.parameterTypes),
- parameterNames(o.parameterNames)
+ parameterNames(o.parameterNames), location(o.location)
{
}
diff --git a/src/declarative/qml/qdeclarativeparser_p.h b/src/declarative/qml/qdeclarativeparser_p.h
index 59c41ef8de..7080a8daee 100644
--- a/src/declarative/qml/qdeclarativeparser_p.h
+++ b/src/declarative/qml/qdeclarativeparser_p.h
@@ -212,6 +212,7 @@ namespace QDeclarativeParser
QByteArray name;
QList<QByteArray> parameterTypes;
QList<QByteArray> parameterNames;
+ LocationSpan location;
};
struct DynamicSlot {
DynamicSlot();
diff --git a/src/declarative/qml/qdeclarativescriptparser.cpp b/src/declarative/qml/qdeclarativescriptparser.cpp
index 3f843295d7..dcd12e287a 100644
--- a/src/declarative/qml/qdeclarativescriptparser.cpp
+++ b/src/declarative/qml/qdeclarativescriptparser.cpp
@@ -528,6 +528,7 @@ bool ProcessAST::visit(AST::UiPublicMember *node)
p = p->finish();
}
+ signal.location = location(node->typeToken, node->semicolonToken);
_stateStack.top().object->dynamicSignals << signal;
} else {
const QString memberType = node->memberType->asString();