diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-11-27 17:11:47 +0100 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-11-30 15:53:54 +0000 |
| commit | 30cdcd7b8e7f70bf6b64450ca622dd4494e3a0ea (patch) | |
| tree | 044002feaeb24281e9000648a1342073701ee29c /sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp | |
| parent | f4fd97655f20e2ce4d24704056b7a7a9ab9db355 (diff) | |
shiboken6: Store AbstractMetaFunction using a QSharedPointer
Store the list functions (global / class member) as a
QList<QSharedPointer<const AbstractMetaFunction> instead of a raw
pointer list. This makes passing around function lists easier and
solves the memory leaks caused by mixing cloned and unmodified
functions while collecting the overload lists in the generators.
- Change the function signatures accordingly
- Add a qSharedPointerConstCast() for non-const access.
- Restructure the traversing of added functions
in the AbstractMetaBuilder
- Remove some unused typedefs and functions unearthed by
the change
Change-Id: I08a6c5243750e3eb3813bc3f7172899ad2b13e22
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp')
| -rw-r--r-- | sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp b/sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp index 6928448b7..0fa07b75c 100644 --- a/sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp +++ b/sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp @@ -67,8 +67,8 @@ void TestModifyFunction::testRenameArgument() QVERIFY(!builder.isNull()); AbstractMetaClassList classes = builder->classes(); const AbstractMetaClass *classA = AbstractMetaClass::findClass(classes, QLatin1String("A")); - const AbstractMetaFunction* func = classA->findFunction(QLatin1String("method")); - Q_ASSERT(func); + const auto func = classA->findFunction(QLatin1String("method")); + QVERIFY(!func.isNull()); QCOMPARE(func->argumentName(1), QLatin1String("otherArg")); } @@ -95,7 +95,8 @@ void TestModifyFunction::testOwnershipTransfer() QVERIFY(!builder.isNull()); AbstractMetaClassList classes = builder->classes(); const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); - const AbstractMetaFunction* func = classB->findFunction(QLatin1String("method")); + const auto func = classB->findFunction(QLatin1String("method")); + QVERIFY(!func.isNull()); QCOMPARE(func->ownership(func->ownerClass(), TypeSystem::TargetLangCode, 0), TypeSystem::CppOwnership); } @@ -143,7 +144,7 @@ void TestModifyFunction::invalidateAfterUse() QVERIFY(!builder.isNull()); AbstractMetaClassList classes = builder->classes(); const AbstractMetaClass *classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); - const AbstractMetaFunction* func = classB->findFunction(QLatin1String("call")); + auto func = classB->findFunction(QLatin1String("call")); QCOMPARE(func->modifications().size(), 1); QCOMPARE(func->modifications().at(0).argument_mods().size(), 1); QVERIFY(func->modifications().at(0).argument_mods().at(0).resetAfterUse); @@ -216,7 +217,7 @@ void TestModifyFunction::testWithApiVersion() QVERIFY(!builder.isNull()); AbstractMetaClassList classes = builder->classes(); AbstractMetaClass* classB = AbstractMetaClass::findClass(classes, QLatin1String("B")); - const AbstractMetaFunction* func = classB->findFunction(QLatin1String("method")); + auto func = classB->findFunction(QLatin1String("method")); QCOMPARE(func->ownership(func->ownerClass(), TypeSystem::TargetLangCode, 0), TypeSystem::CppOwnership); @@ -256,28 +257,28 @@ struct A { QVERIFY(classA); // Nothing specified, true - const AbstractMetaFunction *f1 = classA->findFunction(QLatin1String("f1")); - QVERIFY(f1); + const auto f1 = classA->findFunction(QLatin1String("f1")); + QVERIFY(!f1.isNull()); QVERIFY(!f1->allowThread()); // 'auto' specified, should be false for nontrivial function - const AbstractMetaFunction *f2 = classA->findFunction(QLatin1String("f2")); - QVERIFY(f2); + const auto f2 = classA->findFunction(QLatin1String("f2")); + QVERIFY(!f2.isNull()); QVERIFY(f2->allowThread()); // 'no' specified, should be false - const AbstractMetaFunction *f3 = classA->findFunction(QLatin1String("f3")); - QVERIFY(f3); + const auto f3 = classA->findFunction(QLatin1String("f3")); + QVERIFY(!f3.isNull()); QVERIFY(!f3->allowThread()); // Nothing specified, should be false for simple getter - const AbstractMetaFunction *getter1 = classA->findFunction(QLatin1String("getter1")); - QVERIFY(getter1); + const auto getter1 = classA->findFunction(QLatin1String("getter1")); + QVERIFY(!getter1.isNull()); QVERIFY(!getter1->allowThread()); // Forced to true simple getter - const AbstractMetaFunction *getter2 = classA->findFunction(QLatin1String("getter2")); - QVERIFY(getter2); + const auto getter2 = classA->findFunction(QLatin1String("getter2")); + QVERIFY(!getter2.isNull()); QVERIFY(getter2->allowThread()); // Forced to true simple getter } @@ -310,8 +311,8 @@ void TestModifyFunction::testGlobalFunctionModification() ArgumentModification argMod = argMods.constFirst(); QCOMPARE(argMod.replacedDefaultExpression, QLatin1String("A()")); - const AbstractMetaFunction *func = builder->globalFunctions().constFirst(); - QVERIFY(func); + QVERIFY(!builder->globalFunctions().isEmpty()); + const auto func = builder->globalFunctions().constFirst(); QCOMPARE(func->arguments().count(), 1); const AbstractMetaArgument &arg = func->arguments().constFirst(); QCOMPARE(arg.type().cppSignature(), QLatin1String("A *")); @@ -452,19 +453,19 @@ void TestModifyFunction::testScopedModifications() const AbstractMetaClass *classA = AbstractMetaClass::findClass(builder->classes(), QLatin1String("A")); QVERIFY(classA); - const AbstractMetaFunction *f = classA->findFunction(QStringLiteral("unspecified")); - QVERIFY(f); + auto f = classA->findFunction(QStringLiteral("unspecified")); + QVERIFY(!f.isNull()); QCOMPARE(f->exceptionSpecification(), ExceptionSpecification::Unknown); QCOMPARE(f->generateExceptionHandling(), expectedGenerateUnspecified); QCOMPARE(f->allowThread(), expectedAllowThread); f = classA->findFunction(QStringLiteral("nonThrowing")); - QVERIFY(f); + QVERIFY(!f.isNull()); QCOMPARE(f->exceptionSpecification(), ExceptionSpecification::NoExcept); QCOMPARE(f->generateExceptionHandling(), expectedGenerateNonThrowing); f = classA->findFunction(QStringLiteral("throwing")); - QVERIFY(f); + QVERIFY(!f.isNull()); QCOMPARE(f->exceptionSpecification(), ExceptionSpecification::Throws); QCOMPARE(f->generateExceptionHandling(), expectedGenerateThrowing); } |
