]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/tools/clang/include/clang/ASTMatchers/Dynamic/Registry.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / tools / clang / include / clang / ASTMatchers / Dynamic / Registry.h
1 //===--- Registry.h - Matcher registry -----*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 ///
10 /// \file
11 /// \brief Registry of all known matchers.
12 ///
13 /// The registry provides a generic interface to construct any matcher by name.
14 ///
15 //===----------------------------------------------------------------------===//
16
17 #ifndef LLVM_CLANG_AST_MATCHERS_DYNAMIC_REGISTRY_H
18 #define LLVM_CLANG_AST_MATCHERS_DYNAMIC_REGISTRY_H
19
20 #include "clang/ASTMatchers/Dynamic/Diagnostics.h"
21 #include "clang/ASTMatchers/Dynamic/VariantValue.h"
22 #include "clang/Basic/LLVM.h"
23 #include "llvm/ADT/ArrayRef.h"
24 #include "llvm/ADT/StringRef.h"
25
26 namespace clang {
27 namespace ast_matchers {
28 namespace dynamic {
29
30 class Registry {
31 public:
32   /// \brief Construct a matcher from the registry by name.
33   ///
34   /// Consult the registry of known matchers and construct the appropriate
35   /// matcher by name.
36   ///
37   /// \param MatcherName The name of the matcher to instantiate.
38   ///
39   /// \param NameRange The location of the name in the matcher source.
40   ///   Useful for error reporting.
41   ///
42   /// \param Args The argument list for the matcher. The number and types of the
43   ///   values must be valid for the matcher requested. Otherwise, the function
44   ///   will return an error.
45   ///
46   /// \return The matcher object constructed if no error was found.
47   ///   A null matcher if the matcher is not found, or if the number of
48   ///   arguments or argument types do not match the signature.
49   ///   In that case \c Error will contain the description of the error.
50   static VariantMatcher constructMatcher(StringRef MatcherName,
51                                          const SourceRange &NameRange,
52                                          ArrayRef<ParserValue> Args,
53                                          Diagnostics *Error);
54
55   /// \brief Construct a matcher from the registry and bind it.
56   ///
57   /// Similar the \c constructMatcher() above, but it then tries to bind the
58   /// matcher to the specified \c BindID.
59   /// If the matcher is not bindable, it sets an error in \c Error and returns
60   /// a null matcher.
61   static VariantMatcher constructBoundMatcher(StringRef MatcherName,
62                                               const SourceRange &NameRange,
63                                               StringRef BindID,
64                                               ArrayRef<ParserValue> Args,
65                                               Diagnostics *Error);
66
67 private:
68   Registry() LLVM_DELETED_FUNCTION;
69 };
70
71 }  // namespace dynamic
72 }  // namespace ast_matchers
73 }  // namespace clang
74
75 #endif  // LLVM_CLANG_AST_MATCHERS_DYNAMIC_REGISTRY_H