mirror of
https://github.com/intel/llvm.git
synced 2026-01-21 12:19:23 +08:00
Make hasLHS and hasRHS matchers available for ArraySubscriptExpr
Summary: The hasBase and hasIndex don't tell anything about the position of the base and the index in the code, so we need hasLHS and hasRHS in some cases. Reviewers: klimek Subscribers: klimek, cfe-commits Differential Revision: http://reviews.llvm.org/D14212 llvm-svn: 251842
This commit is contained in:
@@ -3127,9 +3127,11 @@ AST_POLYMORPHIC_MATCHER_P(hasOperatorName,
|
||||
/// \code
|
||||
/// a || b
|
||||
/// \endcode
|
||||
AST_MATCHER_P(BinaryOperator, hasLHS,
|
||||
internal::Matcher<Expr>, InnerMatcher) {
|
||||
Expr *LeftHandSide = Node.getLHS();
|
||||
AST_POLYMORPHIC_MATCHER_P(hasLHS,
|
||||
AST_POLYMORPHIC_SUPPORTED_TYPES(BinaryOperator,
|
||||
ArraySubscriptExpr),
|
||||
internal::Matcher<Expr>, InnerMatcher) {
|
||||
const Expr *LeftHandSide = Node.getLHS();
|
||||
return (LeftHandSide != nullptr &&
|
||||
InnerMatcher.matches(*LeftHandSide, Finder, Builder));
|
||||
}
|
||||
@@ -3140,9 +3142,11 @@ AST_MATCHER_P(BinaryOperator, hasLHS,
|
||||
/// \code
|
||||
/// a || b
|
||||
/// \endcode
|
||||
AST_MATCHER_P(BinaryOperator, hasRHS,
|
||||
internal::Matcher<Expr>, InnerMatcher) {
|
||||
Expr *RightHandSide = Node.getRHS();
|
||||
AST_POLYMORPHIC_MATCHER_P(hasRHS,
|
||||
AST_POLYMORPHIC_SUPPORTED_TYPES(BinaryOperator,
|
||||
ArraySubscriptExpr),
|
||||
internal::Matcher<Expr>, InnerMatcher) {
|
||||
const Expr *RightHandSide = Node.getRHS();
|
||||
return (RightHandSide != nullptr &&
|
||||
InnerMatcher.matches(*RightHandSide, Finder, Builder));
|
||||
}
|
||||
@@ -3246,7 +3250,7 @@ AST_MATCHER(RecordDecl, isClass) {
|
||||
/// \endcode
|
||||
AST_MATCHER_P(ConditionalOperator, hasTrueExpression,
|
||||
internal::Matcher<Expr>, InnerMatcher) {
|
||||
Expr *Expression = Node.getTrueExpr();
|
||||
const Expr *Expression = Node.getTrueExpr();
|
||||
return (Expression != nullptr &&
|
||||
InnerMatcher.matches(*Expression, Finder, Builder));
|
||||
}
|
||||
@@ -3259,7 +3263,7 @@ AST_MATCHER_P(ConditionalOperator, hasTrueExpression,
|
||||
/// \endcode
|
||||
AST_MATCHER_P(ConditionalOperator, hasFalseExpression,
|
||||
internal::Matcher<Expr>, InnerMatcher) {
|
||||
Expr *Expression = Node.getFalseExpr();
|
||||
const Expr *Expression = Node.getFalseExpr();
|
||||
return (Expression != nullptr &&
|
||||
InnerMatcher.matches(*Expression, Finder, Builder));
|
||||
}
|
||||
@@ -4270,7 +4274,7 @@ AST_MATCHER_P(NestedNameSpecifierLoc, specifiesTypeLoc,
|
||||
AST_MATCHER_P_OVERLOAD(NestedNameSpecifier, hasPrefix,
|
||||
internal::Matcher<NestedNameSpecifier>, InnerMatcher,
|
||||
0) {
|
||||
NestedNameSpecifier *NextNode = Node.getPrefix();
|
||||
const NestedNameSpecifier *NextNode = Node.getPrefix();
|
||||
if (!NextNode)
|
||||
return false;
|
||||
return InnerMatcher.matches(*NextNode, Finder, Builder);
|
||||
|
||||
@@ -2372,6 +2372,11 @@ TEST(MatchBinaryOperator, HasLHSAndHasRHS) {
|
||||
EXPECT_TRUE(matches("void x() { true || false; }", OperatorTrueFalse));
|
||||
EXPECT_TRUE(matches("void x() { true && false; }", OperatorTrueFalse));
|
||||
EXPECT_TRUE(notMatches("void x() { false || true; }", OperatorTrueFalse));
|
||||
|
||||
StatementMatcher OperatorIntPointer = arraySubscriptExpr(
|
||||
hasLHS(hasType(isInteger())), hasRHS(hasType(pointsTo(qualType()))));
|
||||
EXPECT_TRUE(matches("void x() { 1[\"abc\"]; }", OperatorIntPointer));
|
||||
EXPECT_TRUE(notMatches("void x() { \"abc\"[1]; }", OperatorIntPointer));
|
||||
}
|
||||
|
||||
TEST(MatchBinaryOperator, HasEitherOperand) {
|
||||
|
||||
Reference in New Issue
Block a user