aboutsummaryrefslogtreecommitdiffstats
path: root/overloaddata.cpp
diff options
context:
space:
mode:
authorHugo Lima <hugo.lima@openbossa.org>2009-11-16 11:31:21 -0200
committerMarcelo Lira <marcelo.lira@openbossa.org>2009-11-16 17:26:04 -0300
commit38083ce45cdd4e67b7e59070605c957973ecc250 (patch)
tree1e57f2534688ad8cce96a1651a93f5dc2f31d3f0 /overloaddata.cpp
parentd2b0d52b53d31ca4b026a1982bb322fcb58a73cd (diff)
OverloadData does not ignore arguments which modify types.
Diffstat (limited to 'overloaddata.cpp')
-rw-r--r--overloaddata.cpp31
1 files changed, 28 insertions, 3 deletions
diff --git a/overloaddata.cpp b/overloaddata.cpp
index 846576549..70059245e 100644
--- a/overloaddata.cpp
+++ b/overloaddata.cpp
@@ -154,10 +154,15 @@ OverloadData* OverloadData::addOverloadData(const AbstractMetaFunction* func,
if (!func->isOperatorOverload()) {
foreach (OverloadData* tmp, m_nextOverloadData) {
// TODO: 'const char *', 'char *' and 'char' will have the same TypeEntry?
- if (tmp->m_argType->typeEntry() == argType->typeEntry()) {
+
+ // If an argument have a type replacement, then we should create a new overloaddata
+ // for it, unless the next argument also have a identical type replacement.
+ QString replacedArg = func->typeReplaced(tmp->m_argPos + 1);
+ bool argsReplaced = !replacedArg.isEmpty() || !tmp->m_argTypeReplaced.isEmpty();
+ if ((!argsReplaced && tmp->m_argType->typeEntry() == argType->typeEntry())
+ || (argsReplaced && replacedArg == tmp->argumentTypeReplaced())) {
tmp->addOverload(func);
overloadData = tmp;
- continue;
}
}
}
@@ -165,6 +170,10 @@ OverloadData* OverloadData::addOverloadData(const AbstractMetaFunction* func,
if (!overloadData) {
overloadData = new OverloadData(m_headOverloadData, func, argType, m_argPos + 1);
overloadData->m_generator = this->m_generator;
+ QString typeReplaced = func->typeReplaced(overloadData->m_argPos + 1);
+
+ if (!typeReplaced.isEmpty())
+ overloadData->m_argTypeReplaced = typeReplaced;
m_nextOverloadData.append(overloadData);
}
@@ -414,8 +423,13 @@ QString OverloadData::dumpGraph() const
s << "<font color=\"white\" point-size=\"11\">arg #" << argPos() << "</font></td></tr>";
// Argument type information
+ QString type = hasArgumentTypeReplace() ? argumentTypeReplaced() : argType()->cppSignature();
s << "<tr><td bgcolor=\"gray\" align=\"right\">type</td><td bgcolor=\"gray\" align=\"left\">";
- s << argType()->cppSignature().replace("&", "&amp;") << "</td></tr>";
+ s << type.replace("&", "&amp;") << "</td></tr>";
+ if (hasArgumentTypeReplace()) {
+ s << "<tr><td bgcolor=\"gray\" align=\"right\">orig. type</td><td bgcolor=\"gray\" align=\"left\">";
+ s << argType()->cppSignature().replace("&", "&amp;") << "</td></tr>";
+ }
// Overloads for the signature to present point
s << "<tr><td bgcolor=\"gray\" align=\"right\">overloads</td><td bgcolor=\"gray\" align=\"left\">";
@@ -459,3 +473,14 @@ OverloadData::~OverloadData()
while (!m_nextOverloadData.isEmpty())
delete m_nextOverloadData.takeLast();
}
+
+bool OverloadData::hasArgumentTypeReplace() const
+{
+ return !m_argTypeReplaced.isEmpty();
+}
+
+QString OverloadData::argumentTypeReplaced() const
+{
+ return m_argTypeReplaced;
+}
+