diff options
Diffstat (limited to 'lib/ASTMatchers/Dynamic/Marshallers.h')
-rw-r--r-- | lib/ASTMatchers/Dynamic/Marshallers.h | 69 |
1 files changed, 36 insertions, 33 deletions
diff --git a/lib/ASTMatchers/Dynamic/Marshallers.h b/lib/ASTMatchers/Dynamic/Marshallers.h index 7b1a307026334..fb6b349a811c7 100644 --- a/lib/ASTMatchers/Dynamic/Marshallers.h +++ b/lib/ASTMatchers/Dynamic/Marshallers.h @@ -480,8 +480,8 @@ template <template <typename ToArg, typename FromArg> class ArgumentAdapterT, typename FromTypes, typename ToTypes> class AdaptativeOverloadCollector { public: - AdaptativeOverloadCollector(StringRef Name, - std::vector<MatcherDescriptor *> &Out) + AdaptativeOverloadCollector( + StringRef Name, std::vector<std::unique_ptr<MatcherDescriptor>> &Out) : Name(Name), Out(Out) { collect(FromTypes()); } @@ -499,7 +499,7 @@ private: inline void collect(FromTypeList); StringRef Name; - std::vector<MatcherDescriptor *> &Out; + std::vector<std::unique_ptr<MatcherDescriptor>> &Out; }; /// \brief MatcherDescriptor that wraps multiple "overloads" of the same @@ -509,8 +509,10 @@ private: /// more than one overloads match the arguments. class OverloadedMatcherDescriptor : public MatcherDescriptor { public: - OverloadedMatcherDescriptor(ArrayRef<MatcherDescriptor *> Callbacks) - : Overloads(Callbacks.begin(), Callbacks.end()) {} + OverloadedMatcherDescriptor( + MutableArrayRef<std::unique_ptr<MatcherDescriptor>> Callbacks) + : Overloads(std::make_move_iterator(Callbacks.begin()), + std::make_move_iterator(Callbacks.end())) {} ~OverloadedMatcherDescriptor() override {} @@ -641,36 +643,37 @@ private: /// \brief 0-arg overload template <typename ReturnType> -MatcherDescriptor *makeMatcherAutoMarshall(ReturnType (*Func)(), - StringRef MatcherName) { +std::unique_ptr<MatcherDescriptor> +makeMatcherAutoMarshall(ReturnType (*Func)(), StringRef MatcherName) { std::vector<ast_type_traits::ASTNodeKind> RetTypes; BuildReturnTypeVector<ReturnType>::build(RetTypes); - return new FixedArgCountMatcherDescriptor( + return llvm::make_unique<FixedArgCountMatcherDescriptor>( matcherMarshall0<ReturnType>, reinterpret_cast<void (*)()>(Func), MatcherName, RetTypes, None); } /// \brief 1-arg overload template <typename ReturnType, typename ArgType1> -MatcherDescriptor *makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1), - StringRef MatcherName) { +std::unique_ptr<MatcherDescriptor> +makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1), StringRef MatcherName) { std::vector<ast_type_traits::ASTNodeKind> RetTypes; BuildReturnTypeVector<ReturnType>::build(RetTypes); ArgKind AK = ArgTypeTraits<ArgType1>::getKind(); - return new FixedArgCountMatcherDescriptor( + return llvm::make_unique<FixedArgCountMatcherDescriptor>( matcherMarshall1<ReturnType, ArgType1>, reinterpret_cast<void (*)()>(Func), MatcherName, RetTypes, AK); } /// \brief 2-arg overload template <typename ReturnType, typename ArgType1, typename ArgType2> -MatcherDescriptor *makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1, ArgType2), - StringRef MatcherName) { +std::unique_ptr<MatcherDescriptor> +makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1, ArgType2), + StringRef MatcherName) { std::vector<ast_type_traits::ASTNodeKind> RetTypes; BuildReturnTypeVector<ReturnType>::build(RetTypes); ArgKind AKs[] = { ArgTypeTraits<ArgType1>::getKind(), ArgTypeTraits<ArgType2>::getKind() }; - return new FixedArgCountMatcherDescriptor( + return llvm::make_unique<FixedArgCountMatcherDescriptor>( matcherMarshall2<ReturnType, ArgType1, ArgType2>, reinterpret_cast<void (*)()>(Func), MatcherName, RetTypes, AKs); } @@ -678,10 +681,10 @@ MatcherDescriptor *makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1, ArgType2 /// \brief Variadic overload. template <typename ResultT, typename ArgT, ResultT (*Func)(ArrayRef<const ArgT *>)> -MatcherDescriptor *makeMatcherAutoMarshall( +std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall( ast_matchers::internal::VariadicFunction<ResultT, ArgT, Func> VarFunc, StringRef MatcherName) { - return new VariadicFuncMatcherDescriptor(VarFunc, MatcherName); + return llvm::make_unique<VariadicFuncMatcherDescriptor>(VarFunc, MatcherName); } /// \brief Overload for VariadicDynCastAllOfMatchers. @@ -689,24 +692,24 @@ MatcherDescriptor *makeMatcherAutoMarshall( /// Not strictly necessary, but DynCastAllOfMatcherDescriptor gives us better /// completion results for that type of matcher. template <typename BaseT, typename DerivedT> -MatcherDescriptor * -makeMatcherAutoMarshall(ast_matchers::internal::VariadicDynCastAllOfMatcher< - BaseT, DerivedT> VarFunc, - StringRef MatcherName) { - return new DynCastAllOfMatcherDescriptor(VarFunc, MatcherName); +std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall( + ast_matchers::internal::VariadicDynCastAllOfMatcher<BaseT, DerivedT> + VarFunc, + StringRef MatcherName) { + return llvm::make_unique<DynCastAllOfMatcherDescriptor>(VarFunc, MatcherName); } /// \brief Argument adaptative overload. template <template <typename ToArg, typename FromArg> class ArgumentAdapterT, typename FromTypes, typename ToTypes> -MatcherDescriptor * -makeMatcherAutoMarshall(ast_matchers::internal::ArgumentAdaptingMatcherFunc< - ArgumentAdapterT, FromTypes, ToTypes>, - StringRef MatcherName) { - std::vector<MatcherDescriptor *> Overloads; +std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall( + ast_matchers::internal::ArgumentAdaptingMatcherFunc<ArgumentAdapterT, + FromTypes, ToTypes>, + StringRef MatcherName) { + std::vector<std::unique_ptr<MatcherDescriptor>> Overloads; AdaptativeOverloadCollector<ArgumentAdapterT, FromTypes, ToTypes>(MatcherName, Overloads); - return new OverloadedMatcherDescriptor(Overloads); + return llvm::make_unique<OverloadedMatcherDescriptor>(Overloads); } template <template <typename ToArg, typename FromArg> class ArgumentAdapterT, @@ -721,12 +724,12 @@ inline void AdaptativeOverloadCollector<ArgumentAdapterT, FromTypes, /// \brief Variadic operator overload. template <unsigned MinCount, unsigned MaxCount> -MatcherDescriptor * -makeMatcherAutoMarshall(ast_matchers::internal::VariadicOperatorMatcherFunc< - MinCount, MaxCount> Func, - StringRef MatcherName) { - return new VariadicOperatorMatcherDescriptor(MinCount, MaxCount, Func.Op, - MatcherName); +std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall( + ast_matchers::internal::VariadicOperatorMatcherFunc<MinCount, MaxCount> + Func, + StringRef MatcherName) { + return llvm::make_unique<VariadicOperatorMatcherDescriptor>( + MinCount, MaxCount, Func.Op, MatcherName); } } // namespace internal |