aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/cplusplus/Symbols.cpp
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2013-12-05 19:51:53 +0200
committerOrgad Shaneh <orgads@gmail.com>2013-12-28 22:02:01 +0100
commit0ce3f3e68c37f4d745c468529dee2083b5378313 (patch)
tree70745ba81a2cd8ac44041885e88ce707a4ded8dc /src/libs/3rdparty/cplusplus/Symbols.cpp
parenta625d9656ce2e453ff5d4ccd20aea91f543ac96c (diff)
C++: Ignore return type on function overrides comparison
Change-Id: I9933e1cc1fb996181e818e2ea0aff76f9255f849 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'src/libs/3rdparty/cplusplus/Symbols.cpp')
-rw-r--r--src/libs/3rdparty/cplusplus/Symbols.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/libs/3rdparty/cplusplus/Symbols.cpp b/src/libs/3rdparty/cplusplus/Symbols.cpp
index dc20da15aa..bae2992293 100644
--- a/src/libs/3rdparty/cplusplus/Symbols.cpp
+++ b/src/libs/3rdparty/cplusplus/Symbols.cpp
@@ -222,27 +222,24 @@ int Function::methodKey() const
void Function::setMethodKey(int key)
{ f._methodKey = key; }
-bool Function::isEqualTo(const Type *other) const
+bool Function::isSignatureEqualTo(const Function *other) const
{
- const Function *o = other->asFunctionType();
- if (! o)
+ if (! other)
return false;
- else if (isConst() != o->isConst())
+ else if (isConst() != other->isConst())
return false;
- else if (isVolatile() != o->isVolatile())
+ else if (isVolatile() != other->isVolatile())
return false;
const Name *l = unqualifiedName();
- const Name *r = o->unqualifiedName();
+ const Name *r = other->unqualifiedName();
if (l == r || (l && l->isEqualTo(r))) {
const unsigned argc = argumentCount();
- if (argc != o->argumentCount())
- return false;
- else if (! _returnType.isEqualTo(o->_returnType))
+ if (argc != other->argumentCount())
return false;
for (unsigned i = 0; i < argc; ++i) {
Symbol *l = argumentAt(i);
- Symbol *r = o->argumentAt(i);
+ Symbol *r = other->argumentAt(i);
if (! l->type().isEqualTo(r->type()))
return false;
}
@@ -251,6 +248,14 @@ bool Function::isEqualTo(const Type *other) const
return false;
}
+bool Function::isEqualTo(const Type *other) const
+{
+ const Function *o = other->asFunctionType();
+ if (!isSignatureEqualTo(o))
+ return false;
+ return _returnType.isEqualTo(o->_returnType);
+}
+
void Function::accept0(TypeVisitor *visitor)
{ visitor->visit(this); }