diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2013-12-05 19:51:53 +0200 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2013-12-28 22:02:01 +0100 |
commit | 0ce3f3e68c37f4d745c468529dee2083b5378313 (patch) | |
tree | 70745ba81a2cd8ac44041885e88ce707a4ded8dc /src/libs/3rdparty/cplusplus/Symbols.cpp | |
parent | a625d9656ce2e453ff5d4ccd20aea91f543ac96c (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.cpp | 25 |
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); } |