summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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"