16 VariantMatcher::Payload::~Payload() = 
default;
 
   22   std::optional<DynMatcher> 
getDynMatcher()
 const override { 
return matcher; }
 
   33                     std::vector<VariantMatcher> args)
 
   34       : varOp(varOp), args(std::move(args)) {}
 
   37     std::vector<DynMatcher> dynMatchers;
 
   38     for (
const auto &variantMatcher : args) {
 
   39       std::optional<DynMatcher> dynMatcher = variantMatcher.getDynMatcher();
 
   41         dynMatchers.push_back(dynMatcher.value());
 
   50         args, [&](
auto const &arg) { inner += arg.getTypeAsString(); },
 
   51         [&] { inner += 
" & "; });
 
   57   const std::vector<VariantMatcher> args;
 
   63   return VariantMatcher(std::make_shared<SinglePayload>(std::move(matcher)));
 
   69   return VariantMatcher(std::make_shared<VariadicOpPayload>(varOp, args));
 
   72 std::optional<DynMatcher> VariantMatcher::MatcherOps::constructVariadicOperator(
 
   75   std::vector<DynMatcher> dynMatchers;
 
   76   for (
const auto &innerMatcher : innerMatchers) {
 
   77     if (!innerMatcher.value)
 
   79     std::optional<DynMatcher> inner = innerMatcher.value->getDynMatcher();
 
   82     dynMatchers.push_back(*inner);
 
   88   return value ? value->getDynMatcher() : std::nullopt;
 
   96     : type(ValueType::Nothing) {
 
  101     : type(ValueType::
String) {
 
  102   value.String = 
new llvm::StringRef(
string);
 
  111   value.Signed = signedValue;
 
  124   switch (other.type) {
 
  125   case ValueType::String:
 
  128   case ValueType::Matcher:
 
  131   case ValueType::Signed:
 
  134   case ValueType::Boolean:
 
  137   case ValueType::Nothing:
 
  138     type = ValueType::Nothing;
 
  144 void VariantValue::reset() {
 
  146   case ValueType::String:
 
  149   case ValueType::Matcher:
 
  150     delete value.Matcher;
 
  153   case ValueType::Signed:
 
  154   case ValueType::Boolean:
 
  155   case ValueType::Nothing:
 
  158   type = ValueType::Nothing;
 
  167   type = ValueType::Signed;
 
  168   value.Signed = newValue;
 
  177   type = ValueType::Boolean;
 
  178   value.Boolean = newValue;
 
  185   return *value.String;
 
  190   type = ValueType::String;
 
  191   value.String = 
new llvm::StringRef(newValue);
 
  198   return *value.Matcher;
 
  203   type = ValueType::Matcher;
 
  209   case ValueType::String:
 
  211   case ValueType::Matcher:
 
  213   case ValueType::Signed:
 
  215   case ValueType::Boolean:
 
  217   case ValueType::Nothing:
 
  220   llvm_unreachable(
"Invalid Type");
 
static std::unique_ptr< DynMatcher > constructVariadic(VariadicOperator Op, std::vector< DynMatcher > innerMatchers)
std::string getTypeAsString() const override
SinglePayload(DynMatcher matcher)
std::optional< DynMatcher > getDynMatcher() const override
VariadicOpPayload(DynMatcher::VariadicOperator varOp, std::vector< VariantMatcher > args)
std::string getTypeAsString() const override
std::optional< DynMatcher > getDynMatcher() const override
static VariantMatcher SingleMatcher(DynMatcher matcher)
std::optional< DynMatcher > getDynMatcher() const
std::string getTypeAsString() const
static VariantMatcher VariadicOperatorMatcher(DynMatcher::VariadicOperator varOp, ArrayRef< VariantMatcher > args)
std::string getTypeAsString() const
VariantValue & operator=(const VariantValue &other)
const VariantMatcher & getMatcher() const
void setMatcher(const VariantMatcher &matcher)
const llvm::StringRef & getString() const
int64_t getSigned() const
void setSigned(int64_t signedValue)
void setString(const llvm::StringRef &string)
void setBoolean(bool booleanValue)
Computes the backward-slice of all transitive defs reachable from rootOp, if innerMatcher matches.