aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--overloaddata.cpp19
-rw-r--r--overloaddata.h2
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; }