Пример #1
0
// static
VariantMatcher Registry::constructMatcher(StringRef MatcherName,
                                          const SourceRange &NameRange,
                                          ArrayRef<ParserValue> Args,
                                          Diagnostics *Error) {
  ConstructorMap::const_iterator it =
      RegistryData->constructors().find(MatcherName);
  if (it == RegistryData->constructors().end()) {
    Error->addError(NameRange, Error->ET_RegistryNotFound) << MatcherName;
    return VariantMatcher();
  }

  return it->second->run(NameRange, Args, Error);
}
Пример #2
0
// static
VariantMatcher Registry::constructBoundMatcher(StringRef MatcherName,
                                               const SourceRange &NameRange,
                                               StringRef BindID,
                                               ArrayRef<ParserValue> Args,
                                               Diagnostics *Error) {
  VariantMatcher Out = constructMatcher(MatcherName, NameRange, Args, Error);
  if (Out.isNull()) return Out;

  llvm::Optional<DynTypedMatcher> Result = Out.getSingleMatcher();
  if (Result.hasValue()) {
    llvm::Optional<DynTypedMatcher> Bound = Result->tryBind(BindID);
    if (Bound.hasValue()) {
      return VariantMatcher::SingleMatcher(*Bound);
    }
  }
  Error->addError(NameRange, Error->ET_RegistryNotBindable);
  return VariantMatcher();
}
Пример #3
0
// static
VariantMatcher Registry::constructBoundMatcher(StringRef MatcherName,
                                               const SourceRange &NameRange,
                                               StringRef BindID,
                                               ArrayRef<ParserValue> Args,
                                               Diagnostics *Error) {
  VariantMatcher Out = constructMatcher(MatcherName, NameRange, Args, Error);
  if (Out.isNull()) return Out;

  const DynTypedMatcher *Result;
  if (Out.getSingleMatcher(Result)) {
    OwningPtr<DynTypedMatcher> Bound(Result->tryBind(BindID));
    if (Bound) {
      return VariantMatcher::SingleMatcher(*Bound);
    }
  }
  Error->addError(NameRange, Error->ET_RegistryNotBindable);
  return VariantMatcher();
}
Пример #4
0
VariantMatcher VariantMatcher::VariadicOperatorMatcher(
    ast_matchers::internal::VariadicOperatorFunction Func,
    ArrayRef<VariantMatcher> Args) {
  return VariantMatcher(new VariadicOpPayload(Func, Args));
}
Пример #5
0
VariantMatcher
VariantMatcher::PolymorphicMatcher(ArrayRef<DynTypedMatcher> Matchers) {
  return VariantMatcher(new PolymorphicPayload(Matchers));
}
Пример #6
0
VariantMatcher VariantMatcher::SingleMatcher(const DynTypedMatcher &Matcher) {
  return VariantMatcher(new SinglePayload(Matcher));
}