summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Vogt <matthew.vogt@nokia.com>2012-07-03 16:06:01 +1000
committerQt by Nokia <qt-info@nokia.com>2012-07-04 00:48:44 +0200
commit10edf63174414cc95165c4fc14a3278e944dfbe2 (patch)
treefcf9f0cd2d4ee429a76339df7d32c00b257cbb74
parent0ce1574dad6f80d563c61259b4d4bff84d03b889 (diff)
Revert "Allow moc to handle symbols that have been redefined."
This reverts commit 5bb1408927b4eb5a03e8ab9f7cbc68f80d8a3962. The temporary measure used to support redefinition of QtDeclarative class names during the transition period is no longer required. Task-number: QTBUG-24517 Change-Id: Ib90f08fcdfb02e004e594ac72b698eaa0325d98d Reviewed-by: Kent Hansen <kent.hansen@nokia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
-rw-r--r--src/corelib/kernel/qobjectdefs.h12
-rw-r--r--src/tools/moc/main.cpp2
-rw-r--r--src/tools/moc/moc.cpp109
-rw-r--r--src/tools/moc/moc.h13
-rw-r--r--src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp3
-rw-r--r--tests/auto/tools/moc/tst_moc.cpp152
6 files changed, 12 insertions, 279 deletions
diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h
index 306728d77c..e840706021 100644
--- a/src/corelib/kernel/qobjectdefs.h
+++ b/src/corelib/kernel/qobjectdefs.h
@@ -213,16 +213,16 @@ Q_CORE_EXPORT const char *qFlagLocation(const char *method);
#ifndef QT_NO_DEBUG
# define QLOCATION "\0" __FILE__ ":" QTOSTRING(__LINE__)
# ifndef QT_NO_KEYWORDS
-# define METHOD(a) qFlagLocation("0" QTOSTRING(a) QLOCATION)
+# define METHOD(a) qFlagLocation("0"#a QLOCATION)
# endif
-# define SLOT(a) qFlagLocation("1" QTOSTRING(a) QLOCATION)
-# define SIGNAL(a) qFlagLocation("2" QTOSTRING(a) QLOCATION)
+# define SLOT(a) qFlagLocation("1"#a QLOCATION)
+# define SIGNAL(a) qFlagLocation("2"#a QLOCATION)
#else
# ifndef QT_NO_KEYWORDS
-# define METHOD(a) "0" QTOSTRING(a)
+# define METHOD(a) "0"#a
# endif
-# define SLOT(a) "1" QTOSTRING(a)
-# define SIGNAL(a) "2" QTOSTRING(a)
+# define SLOT(a) "1"#a
+# define SIGNAL(a) "2"#a
#endif
#define QMETHOD_CODE 0 // member type codes
diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp
index 7db8737975..905eed1c5d 100644
--- a/src/tools/moc/main.cpp
+++ b/src/tools/moc/main.cpp
@@ -167,7 +167,7 @@ int runMoc(int _argc, char **_argv)
bool autoInclude = true;
bool defaultInclude = true;
Preprocessor pp;
- Moc moc(pp);
+ Moc moc;
pp.macros["Q_MOC_RUN"];
pp.macros["__cplusplus"];
QByteArray filename;
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp
index aaaf701ea5..c35f27deaf 100644
--- a/src/tools/moc/moc.cpp
+++ b/src/tools/moc/moc.cpp
@@ -302,9 +302,7 @@ void Moc::parseFunctionArguments(FunctionDef *def)
arg.rightType += lexem();
}
arg.normalizedType = normalizeType(QByteArray(arg.type.name + ' ' + arg.rightType));
- arg.normalizedType = getTypeSubstitution(arg.normalizedType);
arg.typeNameForCast = normalizeType(QByteArray(noRef(arg.type.name) + "(*)" + arg.rightType));
- arg.typeNameForCast = getTypeSubstitution(arg.typeNameForCast);
if (test(EQ))
arg.isDefault = true;
def->arguments += arg;
@@ -414,7 +412,6 @@ bool Moc::parseFunction(FunctionDef *def, bool inMacro)
}
def->normalizedType = normalizeType(def->type.name);
- def->normalizedType = getTypeSubstitution(def->normalizedType);
if (!test(RPAREN)) {
parseFunctionArguments(def);
@@ -513,7 +510,6 @@ bool Moc::parseMaybeFunction(const ClassDef *cdef, FunctionDef *def)
}
def->normalizedType = normalizeType(def->type.name);
- def->normalizedType = getTypeSubstitution(def->normalizedType);
if (!test(RPAREN)) {
parseFunctionArguments(def);
@@ -970,7 +966,6 @@ void Moc::createPropertyDef(PropertyDef &propDef)
QVariant.
*/
type = normalizeType(type);
- type = getTypeSubstitution(type);
if (type == "QMap")
type = "QMap<QString,QVariant>";
else if (type == "QValueList")
@@ -1244,8 +1239,7 @@ void Moc::parseInterfaces(ClassDef *def)
}
// resolve from classnames to interface ids
for (int i = 0; i < iface.count(); ++i) {
- QByteArray className = getTypeSubstitution(iface.at(i).className);
- QByteArray iid = interface2IdMap.value(className);
+ const QByteArray iid = interface2IdMap.value(iface.at(i).className);
if (iid.isEmpty())
error("Undefined interface");
@@ -1503,107 +1497,6 @@ void Moc::checkProperties(ClassDef *cdef)
}
}
-QByteArray Moc::getSubstitution(const QByteArray &token) const
-{
- Macros::ConstIterator it = preprocessor.macros.find(token);
- if (it != preprocessor.macros.end() && it->symbols.count() == 1) {
- // We can only handle substitutions that result in a single symbol
- return it->symbols.at(0).lexem();
- }
-
- return QByteArray();
-}
-
-QByteArray Moc::getTokenSubstitution(const QByteArray &token) const
-{
- QByteArray result = token;
-
- QSet<QByteArray> used;
-
- // Process substitution chain until no replacement exists
- QByteArray substitution = getSubstitution(result);
- while (!substitution.isEmpty()) {
- used.insert(result);
- result = substitution;
-
- if (used.contains(result)) {
- break;
- }
-
- substitution = getSubstitution(result);
- }
-
- return result;
-}
-
-QByteArray Moc::getWordSubstitution(const QByteArray &word) const
-{
- QByteArray result;
-
- // A word can contain multiple components separated by '*'
- int startIndex = 0;
- do {
- int index = word.indexOf('*', startIndex);
- if (index == -1) {
- result.append(getTokenSubstitution(word.mid(startIndex)));
- } else {
- result.append(getTokenSubstitution(word.mid(startIndex, (index - startIndex))));
- result.append('*');
- }
-
- startIndex = index + 1;
- } while (startIndex != 0);
-
- return result;
-}
-
-QByteArray Moc::getNameSubstitution(const QByteArray &name) const
-{
- QByteArray result;
-
- // Parse multiple tokens in this name independently
- int startIndex = 0;
- do {
- int index = name.indexOf(' ', startIndex);
- if (index == -1) {
- result.append(getWordSubstitution(name.mid(startIndex)));
- } else {
- result.append(getWordSubstitution(name.mid(startIndex, (index - startIndex))));
- result.append(' ');
- }
-
- startIndex = index + 1;
- } while (startIndex != 0);
-
- return result;
-}
-
-QByteArray Moc::getTypeSubstitution(const QByteArray &typeName) const
-{
- int index = typeName.indexOf('<');
- if (index != -1) {
- QByteArray templateName = typeName.left(index);
-
- int lastIndex = typeName.lastIndexOf('>');
- if (lastIndex > index) {
- QByteArray result = getNameSubstitution(templateName);
-
- // Parse the interior type independently
- QByteArray parameter = typeName.mid(index + 1, (lastIndex - index - 1));
- QByteArray interior = getTypeSubstitution(parameter);
- if (interior.endsWith('>')) {
- interior.append(' ');
- }
- result.append('<').append(interior).append(typeName.mid(lastIndex));
- return result;
- } else {
- // Something is broken; return the input unmodified
- return typeName;
- }
- }
-
- return getNameSubstitution(typeName);
-}
QT_END_NAMESPACE
diff --git a/src/tools/moc/moc.h b/src/tools/moc/moc.h
index b12ec492ff..e20e29acb8 100644
--- a/src/tools/moc/moc.h
+++ b/src/tools/moc/moc.h
@@ -43,7 +43,6 @@
#define MOC_H
#include "parser.h"
-#include "preprocessor.h"
#include <QStringList>
#include <QMap>
#include <QPair>
@@ -198,14 +197,12 @@ struct NamespaceDef {
class Moc : public Parser
{
public:
- Moc(Preprocessor &p)
- : preprocessor(p), noInclude(false), generatedCode(false),
- mustIncludeQPluginH(false)
+ Moc()
+ : noInclude(false), generatedCode(false), mustIncludeQPluginH(false)
{}
QByteArray filename;
- Preprocessor &preprocessor;
bool noInclude;
bool generatedCode;
bool mustIncludeQPluginH;
@@ -262,12 +259,6 @@ public:
void checkSuperClasses(ClassDef *def);
void checkProperties(ClassDef* cdef);
-
- QByteArray getSubstitution(const QByteArray &token) const;
- QByteArray getTokenSubstitution(const QByteArray &token) const;
- QByteArray getWordSubstitution(const QByteArray &word) const;
- QByteArray getNameSubstitution(const QByteArray &name) const;
- QByteArray getTypeSubstitution(const QByteArray &typeName) const;
};
inline QByteArray noRef(const QByteArray &type)
diff --git a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp
index 41756de5bc..87a7692333 100644
--- a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp
+++ b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp
@@ -71,6 +71,7 @@ static const char docTypeHeader[] =
#include "moc.h"
#include "generator.h"
+#include "preprocessor.h"
#define PROGRAMNAME "qdbuscpp2xml"
#define PROGRAMVERSION "0.2"
@@ -414,7 +415,7 @@ int main(int argc, char **argv)
}
Preprocessor pp;
- Moc moc(pp);
+ Moc moc;
pp.macros["Q_MOC_RUN"];
pp.macros["__cplusplus"];
diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp
index 023c4aa150..d4602a6e77 100644
--- a/tests/auto/tools/moc/tst_moc.cpp
+++ b/tests/auto/tools/moc/tst_moc.cpp
@@ -542,7 +542,6 @@ private slots:
void cxx11Enums_data();
void cxx11Enums();
void returnRefs();
- void redefinedNames();
signals:
void sigWithUnsignedArg(unsigned foo);
@@ -1769,157 +1768,6 @@ void tst_Moc::returnRefs()
// they used to cause miscompilation of the moc generated file.
}
-struct ActualInterfaceName
-{
- virtual ~ActualInterfaceName() {}
- virtual void foo() = 0;
-};
-
-QT_BEGIN_NAMESPACE
-Q_DECLARE_INTERFACE(ActualInterfaceName, "foo.bar.ActualInterfaceName")
-QT_END_NAMESPACE
-
-#define DefinedInterfaceName ActualInterfaceName
-#define RedefinedInterfaceName DefinedInterfaceName
-
-struct ActualName {};
-#define DefinedName ActualName
-#define RedefinedName DefinedName
-
-template<typename T>
-struct ActualTemplateName {};
-
-#define DefinedTemplateName ActualTemplateName
-#define RedefinedTemplateName DefinedTemplateName
-
-#define ActualName ActualName
-
-class RedefinitionTest : public QObject, public RedefinedInterfaceName
-{
- Q_OBJECT
- Q_INTERFACES(RedefinedInterfaceName)
-
- Q_PROPERTY(ActualName p1 READ getP1)
-
- Q_PROPERTY(DefinedName p2 READ getP2)
- Q_PROPERTY(RedefinedName p3 READ getP3)
-
- Q_PROPERTY(DefinedName * p4 READ getP4)
- Q_PROPERTY(RedefinedName * p5 READ getP5)
-
- Q_PROPERTY(DefinedName ** p6 READ getP6)
- Q_PROPERTY(RedefinedName ** p7 READ getP7)
-
- Q_PROPERTY(DefinedName const ** p8 READ getP8)
- Q_PROPERTY(RedefinedName const ** p9 READ getP9)
-
- Q_PROPERTY(DefinedName const * const * p10 READ getP10)
- Q_PROPERTY(RedefinedName const * const * p11 READ getP11)
-
- Q_PROPERTY(DefinedTemplateName<DefinedName> p16 READ getP16)
- Q_PROPERTY(RedefinedTemplateName<RedefinedName> p17 READ getP17)
-
- Q_PROPERTY(DefinedTemplateName<DefinedName **> p18 READ getP18)
- Q_PROPERTY(RedefinedTemplateName<RedefinedName **> p19 READ getP19)
-
- Q_PROPERTY(DefinedTemplateName<DefinedName const * const> p20 READ getP20)
- Q_PROPERTY(RedefinedTemplateName<RedefinedName const * const> p21 READ getP21)
-
-signals:
- void signal1(ActualName);
- void signal2(DefinedName);
- void signal3(RedefinedName);
-
-public slots:
- void slot1(ActualName x) { v = x; }
- void slot2(DefinedName x) { v = x; }
- void slot3(RedefinedName x) { v = x; }
-
-public:
- void foo() {}
-
- ActualName v;
-
- ActualName *vp;
- ActualName const *vcp;
-
- ActualTemplateName<ActualName> tv;
- ActualTemplateName<ActualName **> tvpp;
- ActualTemplateName<ActualName const * const> tvcpc;
-
- ActualName getP0() { return v; }
- ActualName getP1() { return v; }
-
- DefinedName getP2() { return v; }
- RedefinedName getP3() { return v; }
-
- DefinedName * getP4() { return &v; }
- RedefinedName * getP5() { return &v; }
-
- DefinedName ** getP6() { return &vp; }
- RedefinedName ** getP7() { return &vp; }
-
- DefinedName const ** getP8() { return &vcp; }
- RedefinedName const ** getP9() { return &vcp; }
-
- DefinedName const * const * getP10() const { return &vcp; }
- RedefinedName const * const * getP11() const { return &vcp; }
-
- DefinedTemplateName<DefinedName> getP16() { return tv; }
- RedefinedTemplateName<RedefinedName> getP17() { return tv; }
-
- DefinedTemplateName<DefinedName **> getP18() { return tvpp; }
- RedefinedTemplateName<RedefinedName **> getP19() { return tvpp; }
-
- DefinedTemplateName<DefinedName const * const> getP20() { return tvcpc; }
- RedefinedTemplateName<RedefinedName const * const> getP21() { return tvcpc; }
-};
-
-void tst_Moc::redefinedNames()
-{
- RedefinitionTest tst;
- const QMetaObject *mobj = tst.metaObject();
- QVERIFY(mobj->indexOfProperty("p1") != -1);
-
- // Use the true slot name rather than the declared name
- QVERIFY(QObject::connect(&tst, SIGNAL(signal1(ActualName)),
- &tst, SLOT(slot1(ActualName))));
-
- QVERIFY(QObject::connect(&tst, SIGNAL(signal2(ActualName)),
- &tst, SLOT(slot2(ActualName))));
-
- QVERIFY(QObject::connect(&tst, SIGNAL(signal3(ActualName)),
- &tst, SLOT(slot3(ActualName))));
-
- // Use the declared slot name rather than the true name
- QVERIFY(QObject::connect(&tst, SIGNAL(signal1(ActualName)),
- &tst, SLOT(slot2(DefinedName))));
-
- QVERIFY(QObject::connect(&tst, SIGNAL(signal1(ActualName)),
- &tst, SLOT(slot3(RedefinedName))));
-
- // Use the declared signal name rather than the true name
- QVERIFY(QObject::connect(&tst, SIGNAL(signal2(DefinedName)),
- &tst, SLOT(slot1(ActualName))));
-
- QVERIFY(QObject::connect(&tst, SIGNAL(signal3(RedefinedName)),
- &tst, SLOT(slot1(ActualName))));
-
- // Use both declared names
- QVERIFY(QObject::connect(&tst, SIGNAL(signal2(DefinedName)),
- &tst, SLOT(slot2(DefinedName))));
-
- QVERIFY(QObject::connect(&tst, SIGNAL(signal2(DefinedName)),
- &tst, SLOT(slot3(RedefinedName))));
-
- QVERIFY(QObject::connect(&tst, SIGNAL(signal3(RedefinedName)),
- &tst, SLOT(slot2(DefinedName))));
-
- QVERIFY(QObject::connect(&tst, SIGNAL(signal3(RedefinedName)),
- &tst, SLOT(slot3(RedefinedName))));
-}
-
-
QTEST_MAIN(tst_Moc)
#include "tst_moc.moc"