LLVM 20.0.0git
Classes | Public Member Functions | Static Public Member Functions | List of all members
llvm::Pattern Class Reference

#include "FileCheck/FileCheckImpl.h"

Classes

struct  Match
 
struct  MatchResult
 
struct  VariableProperties
 Parsing information about a variable. More...
 

Public Member Functions

 Pattern (Check::FileCheckType Ty, FileCheckPatternContext *Context, std::optional< size_t > Line=std::nullopt)
 
SMLoc getLoc () const
 
FileCheckPatternContextgetContext () const
 
bool parsePattern (StringRef PatternStr, StringRef Prefix, SourceMgr &SM, const FileCheckRequest &Req)
 Parses the pattern in PatternStr and initializes this Pattern instance accordingly.
 
MatchResult match (StringRef Buffer, const SourceMgr &SM) const
 Matches the pattern string against the input buffer Buffer.
 
void printSubstitutions (const SourceMgr &SM, StringRef Buffer, SMRange MatchRange, FileCheckDiag::MatchType MatchTy, std::vector< FileCheckDiag > *Diags) const
 Prints the value of successful substitutions.
 
void printFuzzyMatch (const SourceMgr &SM, StringRef Buffer, std::vector< FileCheckDiag > *Diags) const
 
bool hasVariable () const
 
void printVariableDefs (const SourceMgr &SM, FileCheckDiag::MatchType MatchTy, std::vector< FileCheckDiag > *Diags) const
 
Check::FileCheckType getCheckTy () const
 
int getCount () const
 

Static Public Member Functions

static bool isValidVarNameStart (char C)
 
static Expected< VariablePropertiesparseVariable (StringRef &Str, const SourceMgr &SM)
 Parses the string at the start of Str for a variable name.
 
static Expected< std::unique_ptr< Expression > > parseNumericSubstitutionBlock (StringRef Expr, std::optional< NumericVariable * > &DefinedNumericVariable, bool IsLegacyLineExpr, std::optional< size_t > LineNumber, FileCheckPatternContext *Context, const SourceMgr &SM)
 Parses Expr for a numeric substitution block at line LineNumber, or before input is parsed if LineNumber is None.
 

Detailed Description

Definition at line 565 of file FileCheckImpl.h.

Constructor & Destructor Documentation

◆ Pattern()

llvm::Pattern::Pattern ( Check::FileCheckType  Ty,
FileCheckPatternContext Context,
std::optional< size_t >  Line = std::nullopt 
)
inline

Definition at line 635 of file FileCheckImpl.h.

Member Function Documentation

◆ getCheckTy()

Check::FileCheckType llvm::Pattern::getCheckTy ( ) const
inline

◆ getContext()

FileCheckPatternContext * llvm::Pattern::getContext ( ) const
inline
Returns
the pointer to the global state for all patterns in this FileCheck instance.

Definition at line 644 of file FileCheckImpl.h.

◆ getCount()

int llvm::Pattern::getCount ( ) const
inline

◆ getLoc()

SMLoc llvm::Pattern::getLoc ( ) const
inline
Returns
the location in source code.

Definition at line 640 of file FileCheckImpl.h.

Referenced by llvm::FileCheckString::CheckDag(), printFuzzyMatch(), printSubstitutions(), and printVariableDefs().

◆ hasVariable()

bool llvm::Pattern::hasVariable ( ) const
inline

Definition at line 716 of file FileCheckImpl.h.

◆ isValidVarNameStart()

bool Pattern::isValidVarNameStart ( char  C)
static
Returns
whether C is a valid first character for a variable name.

Definition at line 286 of file FileCheck.cpp.

References llvm::CallingConv::C.

Referenced by parseVariable().

◆ match()

Pattern::MatchResult Pattern::match ( StringRef  Buffer,
const SourceMgr SM 
) const

Matches the pattern string against the input buffer Buffer.

Returns
either (1) an error resulting in no match or (2) a match possibly with an error encountered while processing the match.

The GlobalVariableTable StringMap in the FileCheckPatternContext class instance provides the current values of FileCheck string variables and is updated if this match defines new values. Likewise, the GlobalNumericVariableTable StringMap in the same class provides the current values of FileCheck numeric variables and is updated if this match defines new numeric values.

Definition at line 1077 of file FileCheck.cpp.

References assert(), llvm::Check::CheckEmpty, llvm::Check::CheckEOF, llvm::StringRef::data(), llvm::SmallVectorBase< Size_T >::empty(), llvm::StringRef::empty(), llvm::StringRef::find(), llvm::StringRef::find_insensitive(), llvm::Format, llvm::NumericVariable::getImplicitFormat(), llvm::Substitution::getIndex(), llvm::Substitution::getResult(), llvm::handleErrors(), llvm::Regex::IgnoreCase, llvm::joinErrors(), llvm::Pattern::Match::Len, match(), llvm::Regex::Newline, llvm::StringRef::npos, llvm::Pattern::Match::Pos, llvm::NumericVariable::setValue(), llvm::SmallVectorBase< Size_T >::size(), llvm::StringRef::size(), and llvm::Error::success().

Referenced by llvm::FileCheckString::Check(), llvm::FileCheckString::CheckDag(), llvm::ifs::filterIFSSyms(), llvm::SDPatternMatch::NUses_match< NumUses, Pattern >::match(), llvm::SDPatternMatch::TLI_pred_match< Pattern, PredFuncT >::match(), llvm::SDPatternMatch::ValueType_match< Pattern, PredFuncT >::match(), llvm::SDPatternMatch::SwitchContext< NewMatchContext, Pattern >::match(), and match().

◆ parseNumericSubstitutionBlock()

Expected< std::unique_ptr< Expression > > Pattern::parseNumericSubstitutionBlock ( StringRef  Expr,
std::optional< NumericVariable * > &  DefinedNumericVariable,
bool  IsLegacyLineExpr,
std::optional< size_t >  LineNumber,
FileCheckPatternContext Context,
const SourceMgr SM 
)
static

Parses Expr for a numeric substitution block at line LineNumber, or before input is parsed if LineNumber is None.

Parameter IsLegacyLineExpr indicates whether Expr should be a legacy @LINE expression and Context points to the class instance holding the live string and numeric variables.

Returns
a pointer to the class instance representing the expression whose value must be substitued, or an error holding a diagnostic against SM if parsing fails. If substitution was successful, sets DefinedNumericVariable to point to the class representing the numeric variable defined in this numeric substitution block, or std::nullopt if this block does not define any variable.

Definition at line 617 of file FileCheck.cpp.

References llvm::StringRef::consume_front(), llvm::StringRef::consumeInteger(), llvm::StringRef::data(), llvm::StringRef::drop_front(), llvm::StringRef::empty(), llvm::StringRef::find(), llvm::Format, llvm::ErrorDiagnostic::get(), llvm::SMLoc::getFromPointer(), llvm::ExpressionFormat::HexLower, llvm::ExpressionFormat::HexUpper, llvm::StringRef::ltrim(), llvm::StringRef::npos, popFront(), llvm::StringRef::rtrim(), llvm::ExpressionFormat::Signed, SpaceChars, llvm::StringRef::substr(), llvm::StringRef::take_front(), llvm::Expected< T >::takeError(), llvm::StringRef::trim(), and llvm::ExpressionFormat::Unsigned.

Referenced by llvm::FileCheckPatternContext::defineCmdlineVariables(), and parsePattern().

◆ parsePattern()

bool Pattern::parsePattern ( StringRef  PatternStr,
StringRef  Prefix,
SourceMgr SM,
const FileCheckRequest Req 
)

◆ parseVariable()

Expected< Pattern::VariableProperties > Pattern::parseVariable ( StringRef Str,
const SourceMgr SM 
)
static

Parses the string at the start of Str for a variable name.

Returns
a VariableProperties structure holding the variable name and whether it is the name of a pseudo variable, or an error holding a diagnostic against SM if parsing fail. If parsing was successful, also strips Str from the variable name.

Definition at line 289 of file FileCheck.cpp.

References llvm::ErrorDiagnostic::get(), I, isValidVarNameStart(), Name, and llvm::StringRef::npos.

Referenced by llvm::FileCheckPatternContext::defineCmdlineVariables(), and parsePattern().

◆ printFuzzyMatch()

void Pattern::printFuzzyMatch ( const SourceMgr SM,
StringRef  Buffer,
std::vector< FileCheckDiag > *  Diags 
) const

◆ printSubstitutions()

void Pattern::printSubstitutions ( const SourceMgr SM,
StringRef  Buffer,
SMRange  MatchRange,
FileCheckDiag::MatchType  MatchTy,
std::vector< FileCheckDiag > *  Diags 
) const

◆ printVariableDefs()

void Pattern::printVariableDefs ( const SourceMgr SM,
FileCheckDiag::MatchType  MatchTy,
std::vector< FileCheckDiag > *  Diags 
) const

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