Fix QMetaObject::normalizedType() for "void" argument
Since the introduction of QMetaType::UnknownType, void is a proper meta-type, and the normalized form of "void" should be "void", not an empty string. Add more tests to ensure that we do remove "void" in the one case where it actually should be removed (e.g. "foo(void)"). Change-Id: I72dc2d24da67cf52da00c678f50213cff1b92e25 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
This commit is contained in:
parent
e2502e1a06
commit
b8d71ed60b
@ -1326,7 +1326,9 @@ static char *qNormalizeType(char *d, int &templdepth, QByteArray &result)
|
||||
--templdepth;
|
||||
++d;
|
||||
}
|
||||
if (strncmp("void", t, d - t) != 0)
|
||||
// "void" should only be removed if this is part of a signature that has
|
||||
// an explicit void argument; e.g., "void foo(void)" --> "void foo()"
|
||||
if (strncmp("void)", t, d - t + 1) != 0)
|
||||
result += normalizeTypeInternal(t, d);
|
||||
|
||||
return d;
|
||||
|
@ -114,6 +114,7 @@ public slots:
|
||||
void voidSlotNoParameterNames(bool, int);
|
||||
signals:
|
||||
void voidSignal();
|
||||
void voidSignalVoid(void);
|
||||
void voidSignalInt(int voidSignalIntArg);
|
||||
void voidSignalQReal(qreal voidSignalQRealArg);
|
||||
void voidSignalQString(const QString &voidSignalQStringArg);
|
||||
@ -230,6 +231,15 @@ void tst_QMetaMethod::method_data()
|
||||
<< QMetaMethod::Public
|
||||
<< QMetaMethod::Constructor;
|
||||
|
||||
QTest::newRow("voidSignalVoid")
|
||||
<< QByteArray("voidSignalVoid()")
|
||||
<< int(QMetaType::Void) << QByteArray("")
|
||||
<< QList<int>()
|
||||
<< QList<QByteArray>()
|
||||
<< QList<QByteArray>()
|
||||
<< QMetaMethod::Protected
|
||||
<< QMetaMethod::Signal;
|
||||
|
||||
QTest::newRow("voidSignalInt")
|
||||
<< QByteArray("voidSignalInt(int)")
|
||||
<< int(QMetaType::Void) << QByteArray("")
|
||||
|
@ -816,9 +816,22 @@ void tst_QMetaObject::normalizedSignature_data()
|
||||
|
||||
QTest::newRow("function") << "void foo()" << "void foo()";
|
||||
QTest::newRow("spaces") << " void foo( ) " << "void foo()";
|
||||
QTest::newRow("void") << "void foo(void)" << "void foo()";
|
||||
QTest::newRow("void spaces") << "void foo( void )" << "void foo()";
|
||||
QTest::newRow("void*") << "void foo(void*)" << "void foo(void*)";
|
||||
QTest::newRow("void* spaces") << "void foo( void * )" << "void foo(void*)";
|
||||
QTest::newRow("function ptr") << "void foo(void(*)(void))" << "void foo(void(*)())";
|
||||
QTest::newRow("function ptr spaces") << "void foo( void ( * ) ( void ))" << "void foo(void(*)())";
|
||||
QTest::newRow("function ptr void*") << "void foo(void(*)(void*))" << "void foo(void(*)(void*))";
|
||||
QTest::newRow("function ptr void* spaces") << "void foo( void ( * ) ( void * ))" << "void foo(void(*)(void*))";
|
||||
QTest::newRow("template args") << " void foo( QMap<a, a>, QList<b>) "
|
||||
<< "void foo(QMap<a,a>,QList<b>)";
|
||||
QTest::newRow("void template args") << " void foo( Foo<void>, Bar<void> ) "
|
||||
<< "void foo(Foo<void>,Bar<void>)";
|
||||
QTest::newRow("void* template args") << " void foo( Foo<void*>, Bar<void *> ) "
|
||||
<< "void foo(Foo<void*>,Bar<void*>)";
|
||||
QTest::newRow("rettype") << "QList<int, int> foo()" << "QList<int,int>foo()";
|
||||
QTest::newRow("rettype void template") << "Foo<void> foo()" << "Foo<void>foo()";
|
||||
QTest::newRow("const rettype") << "const QString *foo()" << "const QString*foo()";
|
||||
QTest::newRow("const ref") << "const QString &foo()" << "const QString&foo()";
|
||||
QTest::newRow("reference") << "QString &foo()" << "QString&foo()";
|
||||
@ -877,6 +890,7 @@ void tst_QMetaObject::normalizedType_data()
|
||||
QTest::newRow("struct") << "const struct foo*" << "const foo*";
|
||||
QTest::newRow("struct2") << "struct foo const*" << "const foo*";
|
||||
QTest::newRow("enum") << "enum foo" << "foo";
|
||||
QTest::newRow("void") << "void" << "void";
|
||||
}
|
||||
|
||||
void tst_QMetaObject::normalizedType()
|
||||
|
@ -165,6 +165,7 @@ signals:
|
||||
void signal3();
|
||||
void signal4();
|
||||
QT_MOC_COMPAT void signal5();
|
||||
void signal6(void);
|
||||
|
||||
public slots:
|
||||
void aPublicSlot() { aPublicSlotCalled++; }
|
||||
@ -824,6 +825,8 @@ void tst_QObject::connectDisconnectNotify_data()
|
||||
QTest::newRow("combo2") << SIGNAL( signal2(void) ) << SLOT( slot2( ) );
|
||||
QTest::newRow("combo3") << SIGNAL( signal3( ) ) << SLOT( slot3(void) );
|
||||
QTest::newRow("combo4") << SIGNAL( signal4( void ) )<< SLOT( slot4( void ) );
|
||||
QTest::newRow("combo5") << SIGNAL( signal6( void ) ) << SLOT( slot4() );
|
||||
QTest::newRow("combo6") << SIGNAL( signal6() ) << SLOT( slot4() );
|
||||
}
|
||||
|
||||
void tst_QObject::connectDisconnectNotify()
|
||||
|
Loading…
x
Reference in New Issue
Block a user