diff options
-rw-r--r-- | overloaddata.cpp | 19 | ||||
-rw-r--r-- | overloaddata.h | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/overloaddata.cpp b/overloaddata.cpp index 48e7e27ce..c9e5b5b44 100644 --- a/overloaddata.cpp +++ b/overloaddata.cpp @@ -188,6 +188,25 @@ bool OverloadData::nextArgumentHasDefaultValue() const return false; } +static OverloadData* _findNextArgWithDefault(OverloadData* overloadData) +{ + if (overloadData->hasDefaultValue()) + return overloadData; + + OverloadData* result = 0; + foreach (OverloadData* odata, overloadData->nextOverloadData()) { + OverloadData* tmp = _findNextArgWithDefault(odata); + if (!result || (tmp && result->argPos() > tmp->argPos())) + result = tmp; + } + return result; +} + +OverloadData* OverloadData::findNextArgWithDefault() +{ + return _findNextArgWithDefault(this); +} + bool OverloadData::isFinalOccurrence(const AbstractMetaFunction* func) const { foreach (const OverloadData* pd, m_nextOverloadData) { diff --git a/overloaddata.h b/overloaddata.h index 5fd6ff547..f80ce84df 100644 --- a/overloaddata.h +++ b/overloaddata.h @@ -50,6 +50,8 @@ public: bool isHeadOverloadData() const { return this == m_headOverloadData; } bool hasDefaultValue() const; bool nextArgumentHasDefaultValue() const; + /// Returns the nearest occurrence, including this instance, of an argument with a default value. + OverloadData* findNextArgWithDefault(); bool isFinalOccurrence(const AbstractMetaFunction* func) const; QList<const AbstractMetaFunction*> overloads() const { return m_overloads; } |