diff --git a/src/shared/cplusplus/ASTMatcher.cpp b/src/shared/cplusplus/ASTMatcher.cpp index 47dac58232a99b0214f5c08a1abf5f7f1e2261b8..5d137e9e9c1239efb8d2320401a641b439853d56 100644 --- a/src/shared/cplusplus/ASTMatcher.cpp +++ b/src/shared/cplusplus/ASTMatcher.cpp @@ -57,6 +57,9 @@ bool ASTMatcher::matchToken(unsigned tokenIndex, unsigned patternTokenIndex) con else if (token.is(T_IDENTIFIER)) { if (! token.identifier->isEqualTo(otherToken.identifier)) return false; + } else if (token.isLiteral()) { + if (! token.literal->isEqualTo(otherToken.literal)) + return false; } return true; } diff --git a/src/shared/cplusplus/Literals.cpp b/src/shared/cplusplus/Literals.cpp index 40042eb66e431353c9d0f76cbdf3d2652b7c6d08..078c0702705a5d6f4580e138de06327ee1cadcef 100644 --- a/src/shared/cplusplus/Literals.cpp +++ b/src/shared/cplusplus/Literals.cpp @@ -72,6 +72,19 @@ Literal::Literal(const char *chars, unsigned size) Literal::~Literal() { delete[] _chars; } +bool Literal::isEqualTo(const Literal *other) const +{ + if (! other) + return false; + else if (this == other) + return true; + else if (hashCode() != other->hashCode()) + return false; + else if (size() != other->size()) + return false; + return ! strcmp(chars(), other->chars()); +} + Literal::iterator Literal::begin() const { return _chars; } @@ -214,17 +227,3 @@ Identifier::Identifier(const char *chars, unsigned size) Identifier::~Identifier() { } -bool Identifier::isEqualTo(const Identifier *other) const -{ - if (! other) - return false; - else if (this == other) - return true; - else if (hashCode() != other->hashCode()) - return false; - else if (size() != other->size()) - return false; - return ! strcmp(chars(), other->chars()); -} - - diff --git a/src/shared/cplusplus/Literals.h b/src/shared/cplusplus/Literals.h index 2a11cdada73bc3d12e4838230702885bf88a8c85..7f380ed08620c333451b680065ce7e9bbfe6fc00 100644 --- a/src/shared/cplusplus/Literals.h +++ b/src/shared/cplusplus/Literals.h @@ -78,6 +78,8 @@ public: unsigned hashCode() const; static unsigned hashCode(const char *chars, unsigned size); + bool isEqualTo(const Literal *other) const; + private: char *_chars; unsigned _size; @@ -131,8 +133,6 @@ class CPLUSPLUS_EXPORT Identifier: public Literal public: Identifier(const char *chars, unsigned size); virtual ~Identifier(); - - bool isEqualTo(const Identifier *other) const; }; } // end of namespace CPlusPlus