clang  6.0.0svn
Classes | Public Member Functions | Static Public Member Functions | List of all members
clang::ast_matchers::dynamic::VariantMatcher Class Reference

A variant matcher object. More...

#include "clang/ASTMatchers/Dynamic/VariantValue.h"

Classes

class  PolymorphicPayload
 
class  SinglePayload
 
class  VariadicOpPayload
 

Public Member Functions

 VariantMatcher ()
 A null matcher. More...
 
void reset ()
 Makes the matcher the "null" matcher. More...
 
bool isNull () const
 Whether the matcher is null. More...
 
llvm::Optional< DynTypedMatcher > getSingleMatcher () const
 Return a single matcher, if there is no ambiguity. More...
 
template<class T >
bool hasTypedMatcher () const
 Determines if the contained matcher can be converted to Matcher<T>. More...
 
bool isConvertibleTo (ast_type_traits::ASTNodeKind Kind, unsigned *Specificity) const
 Determines if the contained matcher can be converted to Kind. More...
 
template<class T >
ast_matchers::internal::Matcher< TgetTypedMatcher () const
 Return this matcher as a Matcher<T>. More...
 
std::string getTypeAsString () const
 String representation of the type of the value. More...
 

Static Public Member Functions

static VariantMatcher SingleMatcher (const DynTypedMatcher &Matcher)
 Clones the provided matcher. More...
 
static VariantMatcher PolymorphicMatcher (std::vector< DynTypedMatcher > Matchers)
 Clones the provided matchers. More...
 
static VariantMatcher VariadicOperatorMatcher (DynTypedMatcher::VariadicOperator Op, std::vector< VariantMatcher > Args)
 Creates a 'variadic' operator matcher. More...
 

Detailed Description

A variant matcher object.

The purpose of this object is to abstract simple and polymorphic matchers into a single object type. Polymorphic matchers might be implemented as a list of all the possible overloads of the matcher. VariantMatcher knows how to select the appropriate overload when needed. To get a real matcher object out of a VariantMatcher you can do:

Definition at line 93 of file VariantValue.h.

Constructor & Destructor Documentation

◆ VariantMatcher()

clang::ast_matchers::dynamic::VariantMatcher::VariantMatcher ( )

A null matcher.

Definition at line 220 of file VariantValue.cpp.

Member Function Documentation

◆ getSingleMatcher()

llvm::Optional< DynTypedMatcher > clang::ast_matchers::dynamic::VariantMatcher::getSingleMatcher ( ) const

Return a single matcher, if there is no ambiguity.

Returns
the matcher, if there is only one matcher. An empty Optional, if the underlying matcher is a polymorphic matcher with more than one representation.

Definition at line 239 of file VariantValue.cpp.

Referenced by clang::ast_matchers::dynamic::Registry::constructBoundMatcher(), and clang::ast_matchers::dynamic::Parser::parseMatcherExpression().

◆ getTypeAsString()

std::string clang::ast_matchers::dynamic::VariantMatcher::getTypeAsString ( ) const

String representation of the type of the value.

If the underlying matcher is a polymorphic one, the string will show all the types.

Definition at line 245 of file VariantValue.cpp.

Referenced by clang::ast_matchers::dynamic::VariantValue::getTypeAsString().

◆ getTypedMatcher()

template<class T >
ast_matchers::internal::Matcher<T> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher ( ) const
inline

Return this matcher as a Matcher<T>.

Handles the different types (Single, Polymorphic) accordingly. Asserts that hasTypedMatcher<T>() is true.

Definition at line 200 of file VariantValue.h.

◆ hasTypedMatcher()

template<class T >
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher ( ) const
inline

Determines if the contained matcher can be converted to Matcher<T>.

For the Single case, it returns true if it can be converted to Matcher<T>. For the Polymorphic case, it returns true if one, and only one, of the overloads can be converted to Matcher<T>. If there are more than one that can, the result would be ambiguous and false is returned.

Definition at line 177 of file VariantValue.h.

Referenced by clang::ast_matchers::dynamic::internal::ArgTypeTraits< ast_matchers::internal::Matcher< T > >::is().

◆ isConvertibleTo()

bool clang::ast_matchers::dynamic::VariantMatcher::isConvertibleTo ( ast_type_traits::ASTNodeKind  Kind,
unsigned *  Specificity 
) const
inline

Determines if the contained matcher can be converted to Kind.

Parameters
Kindthe requested destination type.
Specificityvalue corresponding to the "specificity" of the conversion.

Definition at line 188 of file VariantValue.h.

Referenced by clang::ast_matchers::dynamic::VariantValue::isConvertibleTo().

◆ isNull()

bool clang::ast_matchers::dynamic::VariantMatcher::isNull ( ) const
inline

◆ PolymorphicMatcher()

VariantMatcher clang::ast_matchers::dynamic::VariantMatcher::PolymorphicMatcher ( std::vector< DynTypedMatcher >  Matchers)
static

Clones the provided matchers.

They should be the result of a polymorphic matcher.

Definition at line 227 of file VariantValue.cpp.

◆ reset()

void clang::ast_matchers::dynamic::VariantMatcher::reset ( )

Makes the matcher the "null" matcher.

Definition at line 243 of file VariantValue.cpp.

◆ SingleMatcher()

VariantMatcher clang::ast_matchers::dynamic::VariantMatcher::SingleMatcher ( const DynTypedMatcher &  Matcher)
static

Clones the provided matcher.

Definition at line 222 of file VariantValue.cpp.

◆ VariadicOperatorMatcher()

VariantMatcher clang::ast_matchers::dynamic::VariantMatcher::VariadicOperatorMatcher ( DynTypedMatcher::VariadicOperator  Op,
std::vector< VariantMatcher Args 
)
static

Creates a 'variadic' operator matcher.

It will bind to the appropriate type on getTypedMatcher<T>().

Definition at line 232 of file VariantValue.cpp.

Referenced by clang::ast_matchers::dynamic::internal::VariadicOperatorMatcherDescriptor::create().


The documentation for this class was generated from the following files: