aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-27 17:11:47 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-30 15:53:54 +0000
commit30cdcd7b8e7f70bf6b64450ca622dd4494e3a0ea (patch)
tree044002feaeb24281e9000648a1342073701ee29c /sources/shiboken6/ApiExtractor/tests/testmodifyfunction.cpp
parentf4fd97655f20e2ce4d24704056b7a7a9ab9db355 (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.cpp43
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);
}