Skip to content

Commit dac269f

Browse files
YuriUfimtsevusiems
authored andcommitted
Change pointers to QShared pointers to decrease memory leaks
1 parent c009005 commit dac269f

File tree

7 files changed

+38
-35
lines changed

7 files changed

+38
-35
lines changed

generator/abstractmetabuilder.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1758,7 +1758,7 @@ AbstractMetaType *AbstractMetaBuilder::translateType(const TypeInfo &_typei, boo
17581758
if (container_type == ContainerTypeEntry::StringListContainer) {
17591759
TypeInfo info;
17601760
info.setQualifiedName(QStringList() << "QString");
1761-
AbstractMetaType *targ_type = translateType(info, ok);
1761+
AbstractMetaType::shared_pointer targ_type(translateType(info, ok));
17621762

17631763
Q_ASSERT(*ok);
17641764
Q_ASSERT(targ_type);
@@ -1776,7 +1776,7 @@ AbstractMetaType *AbstractMetaBuilder::translateType(const TypeInfo &_typei, boo
17761776
info.setFunctionPointer(false);
17771777
info.setQualifiedName(ta.instantiationName().split("::"));
17781778

1779-
AbstractMetaType *targ_type = translateType(info, ok);
1779+
AbstractMetaType::shared_pointer targ_type (translateType(info, ok));
17801780
if (!(*ok)) {
17811781
delete meta_type;
17821782
return 0;
@@ -1974,9 +1974,9 @@ AbstractMetaType *AbstractMetaBuilder::inheritTemplateType(const QList<AbstractM
19741974
}
19751975

19761976
if (returned->hasInstantiations()) {
1977-
QList<AbstractMetaType *> instantiations = returned->instantiations();
1977+
auto instantiations = returned->instantiations();
19781978
for (int i=0; i<instantiations.count(); ++i) {
1979-
instantiations[i] = inheritTemplateType(template_types, instantiations.at(i), ok);
1979+
instantiations[i] = AbstractMetaType::shared_pointer(inheritTemplateType(template_types, instantiations[i].data(), ok));
19801980
if (ok != 0 && !(*ok))
19811981
return 0;
19821982
}

generator/abstractmetalang.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ QString AbstractMetaType::cppSignature() const
8282
s += typeEntry()->qualifiedCppName();
8383

8484
if (hasInstantiationInCpp()) {
85-
QList<AbstractMetaType *> types = instantiations();
85+
auto &types = instantiations();
8686
s += "<";
8787
for (int i=0; i<types.count(); ++i) {
8888
if (i > 0)
@@ -1633,9 +1633,9 @@ static void add_extra_include_for_type(AbstractMetaClass *meta_class, const Abst
16331633
}
16341634

16351635
if (type->hasInstantiations()) {
1636-
QList<AbstractMetaType *> instantiations = type->instantiations();
1637-
foreach (AbstractMetaType *instantiation, instantiations)
1638-
add_extra_include_for_type(meta_class, instantiation);
1636+
auto &instantiations = type->instantiations();
1637+
for(auto &&instantiation: instantiations)
1638+
add_extra_include_for_type(meta_class, instantiation.data());
16391639
}
16401640
}
16411641

@@ -1927,7 +1927,7 @@ QString AbstractMetaType::minimalSignature() const
19271927
minimalSignature += "const ";
19281928
minimalSignature += typeEntry()->qualifiedCppName();
19291929
if (hasInstantiations()) {
1930-
QList<AbstractMetaType *> instantiations = this->instantiations();
1930+
auto &instantiations = this->instantiations();
19311931
minimalSignature += "<";
19321932
for (int i=0;i<instantiations.size();++i) {
19331933
if (i > 0)

generator/abstractmetalang.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
#include <QSet>
5050
#include <QStringList>
5151
#include <QTextStream>
52-
52+
#include <QSharedPointer>
5353

5454
class AbstractMeta;
5555
class AbstractMetaClass;
@@ -162,6 +162,7 @@ class AbstractMetaAttributes
162162
class AbstractMetaType
163163
{
164164
public:
165+
typedef QSharedPointer<AbstractMetaType> shared_pointer;
165166
enum TypeUsagePattern {
166167
InvalidPattern,
167168
PrimitivePattern,
@@ -200,9 +201,9 @@ class AbstractMetaType
200201

201202
// true when use pattern is container
202203
bool hasInstantiations() const { return !m_instantiations.isEmpty(); }
203-
void addInstantiation(AbstractMetaType *inst) { m_instantiations << inst; }
204-
void setInstantiations(const QList<AbstractMetaType *> &insts) { m_instantiations = insts; }
205-
QList<AbstractMetaType *> instantiations() const { return m_instantiations; }
204+
void addInstantiation(AbstractMetaType::shared_pointer inst) { m_instantiations << inst; }
205+
void setInstantiations(const QList<AbstractMetaType::shared_pointer> &insts) { m_instantiations = insts; }
206+
const QList<AbstractMetaType::shared_pointer> &instantiations() const { return m_instantiations; }
206207
void setInstantiationInCpp(bool incpp) { m_cpp_instantiation = incpp; }
207208
bool hasInstantiationInCpp() const { return hasInstantiations() && m_cpp_instantiation; }
208209

@@ -293,7 +294,7 @@ class AbstractMetaType
293294

294295
private:
295296
const TypeEntry *m_type_entry{};
296-
QList <AbstractMetaType *> m_instantiations;
297+
QList <AbstractMetaType::shared_pointer> m_instantiations;
297298
QString m_package;
298299
QString m_original_type_description;
299300

generator/parser/codemodel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
#include <QtCore/QStringList>
5353
#include <QtCore/QVector>
5454
#include <QtCore/QSet>
55+
#include <QSharedPointer>
5556

5657
#define DECLARE_MODEL_NODE(k) \
5758
enum { __node_kind = Kind_##k }; \

generator/parser/codemodel_fwd.h

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545

4646
#include <codemodel_pointer.h>
4747
#include <QtCore/QList>
48+
#include <QSharedPointer>
4849

4950
// forward declarations
5051
class CodeModel;
@@ -64,20 +65,20 @@ class _VariableModelItem;
6465
class _MemberModelItem;
6566
struct TypeInfo;
6667

67-
typedef CodeModelPointer<_ArgumentModelItem> ArgumentModelItem;
68-
typedef CodeModelPointer<_ClassModelItem> ClassModelItem;
69-
typedef CodeModelPointer<_CodeModelItem> CodeModelItem;
70-
typedef CodeModelPointer<_EnumModelItem> EnumModelItem;
71-
typedef CodeModelPointer<_EnumeratorModelItem> EnumeratorModelItem;
72-
typedef CodeModelPointer<_FileModelItem> FileModelItem;
73-
typedef CodeModelPointer<_FunctionDefinitionModelItem> FunctionDefinitionModelItem;
74-
typedef CodeModelPointer<_FunctionModelItem> FunctionModelItem;
75-
typedef CodeModelPointer<_NamespaceModelItem> NamespaceModelItem;
76-
typedef CodeModelPointer<_ScopeModelItem> ScopeModelItem;
77-
typedef CodeModelPointer<_TemplateParameterModelItem> TemplateParameterModelItem;
78-
typedef CodeModelPointer<_TypeAliasModelItem> TypeAliasModelItem;
79-
typedef CodeModelPointer<_VariableModelItem> VariableModelItem;
80-
typedef CodeModelPointer<_MemberModelItem> MemberModelItem;
68+
typedef QSharedPointer<_ArgumentModelItem> ArgumentModelItem;
69+
typedef QSharedPointer<_ClassModelItem> ClassModelItem;
70+
typedef QSharedPointer<_CodeModelItem> CodeModelItem;
71+
typedef QSharedPointer<_EnumModelItem> EnumModelItem;
72+
typedef QSharedPointer<_EnumeratorModelItem> EnumeratorModelItem;
73+
typedef QSharedPointer<_FileModelItem> FileModelItem;
74+
typedef QSharedPointer<_FunctionDefinitionModelItem> FunctionDefinitionModelItem;
75+
typedef QSharedPointer<_FunctionModelItem> FunctionModelItem;
76+
typedef QSharedPointer<_NamespaceModelItem> NamespaceModelItem;
77+
typedef QSharedPointer<_ScopeModelItem> ScopeModelItem;
78+
typedef QSharedPointer<_TemplateParameterModelItem> TemplateParameterModelItem;
79+
typedef QSharedPointer<_TypeAliasModelItem> TypeAliasModelItem;
80+
typedef QSharedPointer<_VariableModelItem> VariableModelItem;
81+
typedef QSharedPointer<_MemberModelItem> MemberModelItem;
8182

8283
typedef QList<ArgumentModelItem> ArgumentList;
8384
typedef QList<ClassModelItem> ClassList;

generator/setupgenerator.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ static QSet<QString> _builtinListTypes = QSet<QString>() << "QByteArray"
178178

179179
static void addListRegistration(AbstractMetaType* type, QSet<QString>& output) {
180180
if (type->instantiations().size() > 0) {
181-
QList<AbstractMetaType *> args = type->instantiations();
181+
QList<AbstractMetaType::shared_pointer> args = type->instantiations();
182182

183183
/*
184184
QString debugStr;
@@ -271,12 +271,12 @@ void SetupGenerator::generate()
271271

272272
QSet<QString> listRegistration;
273273
QSet<QString> snips;
274-
for (const AbstractMetaClass *cls : list) {
275-
Q_FOREACH(const AbstractMetaFunction* func, cls->functions()) {
274+
for (auto cls: list) {
275+
for(auto &&func: cls->functions()) {
276276
if (func->type() && func->type()->isContainer()) {
277277
addListRegistration(func->type(), listRegistration);
278278
}
279-
Q_FOREACH(const AbstractMetaArgument* arg, func->arguments()) {
279+
for(auto &&arg: func->arguments()) {
280280
if (arg->type() && arg->type()->isContainer()) {
281281
addListRegistration(arg->type(), listRegistration);
282282
}
@@ -365,7 +365,7 @@ void SetupGenerator::generate()
365365
QStringList list(listRegistration.begin(), listRegistration.end());
366366
#endif
367367
list.sort();
368-
Q_FOREACH(QString name, list) {
368+
for(auto &&name: list) {
369369
if (name.contains("Ssl")) {
370370
s << "#ifndef QT_NO_SSL" << endl;
371371
}

generator/shellgenerator.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,13 @@ void ShellGenerator::writeTypeInfo(QTextStream &s, const AbstractMetaType *type,
9696
&& (!te->isContainer()
9797
|| (static_cast<const ContainerTypeEntry *>(te))->type() != ContainerTypeEntry::StringListContainer)) {
9898
s << '<';
99-
QList<AbstractMetaType *> args = type->instantiations();
99+
auto &args = type->instantiations();
100100
bool nested_template = false;
101101
for (int i=0; i<args.size(); ++i) {
102102
if (i != 0)
103103
s << ", ";
104104
nested_template |= args.at(i)->isContainer();
105-
writeTypeInfo(s, args.at(i));
105+
writeTypeInfo(s, args.at(i).data());
106106
}
107107
if (nested_template)
108108
s << ' ';

0 commit comments

Comments
 (0)