Commit 1a7855af authored by Roberto Raggi's avatar Roberto Raggi
Browse files

Match the value of the literals.

parent baffd97e
......@@ -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;
}
......
......@@ -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());
}
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment