Skip to content

Commit ecd5ea6

Browse files
committed
Check that externally defined operators are not added twice
1 parent b530eb5 commit ecd5ea6

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

generator/abstractmetabuilder.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ void AbstractMetaBuilder::traverseStreamOperator(FunctionModelItem item)
315315

316316
setupFunctionDefaults(streamFunction, streamedClass);
317317

318-
streamedClass->addFunction(streamFunction);
318+
streamedClass->addFunction(streamFunction, /*check_duplicates=*/true);
319319
streamedClass->typeEntry()->addExtraInclude(streamClass->typeEntry()->include());
320320

321321
m_current_class = old_current_class;
@@ -354,7 +354,7 @@ void AbstractMetaBuilder::traverseArithmeticOperator(FunctionModelItem item)
354354

355355
setupFunctionDefaults(streamFunction, aClass);
356356

357-
aClass->addFunction(streamFunction);
357+
aClass->addFunction(streamFunction, /*check_duplicates=*/true);
358358
if (bClass) {
359359
aClass->typeEntry()->addExtraInclude(bClass->typeEntry()->include());
360360
}

generator/abstractmetalang.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1094,10 +1094,20 @@ bool AbstractMetaClass::hasDefaultToStringFunction() const
10941094
return false;
10951095
}
10961096

1097-
void AbstractMetaClass::addFunction(AbstractMetaFunction *function)
1097+
void AbstractMetaClass::addFunction(AbstractMetaFunction *function, bool check_duplicates)
10981098
{
10991099
function->setOwnerClass(this);
11001100

1101+
if (check_duplicates) {
1102+
for (const auto f : m_functions) {
1103+
if (f->name() == function->name() &&
1104+
f->minimalSignature() == function->minimalSignature())
1105+
{
1106+
return;
1107+
}
1108+
}
1109+
}
1110+
11011111
if (!function->isDestructor()) {
11021112
m_functions << function;
11031113
// seems like this is not needed and takes a lot of performance

generator/abstractmetalang.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,7 @@ class AbstractMetaClass : public AbstractMetaAttributes
692692

693693
AbstractMetaFunctionList functions() const { return m_functions; }
694694
void setFunctions(const AbstractMetaFunctionList &functions);
695-
void addFunction(AbstractMetaFunction *function);
695+
void addFunction(AbstractMetaFunction *function, bool check_duplicates = false);
696696
void removeFunction(AbstractMetaFunction* function);
697697
bool hasFunction(const AbstractMetaFunction *f) const;
698698
bool hasFunction(const QString &str) const;

0 commit comments

Comments
 (0)