Index: cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h =================================================================== --- cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h +++ cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h @@ -480,8 +480,8 @@ typename FromTypes, typename ToTypes> class AdaptativeOverloadCollector { public: - AdaptativeOverloadCollector(StringRef Name, - std::vector &Out) + AdaptativeOverloadCollector( + StringRef Name, std::vector> &Out) : Name(Name), Out(Out) { collect(FromTypes()); } @@ -499,7 +499,7 @@ inline void collect(FromTypeList); StringRef Name; - std::vector &Out; + std::vector> &Out; }; /// \brief MatcherDescriptor that wraps multiple "overloads" of the same @@ -509,8 +509,10 @@ /// more than one overloads match the arguments. class OverloadedMatcherDescriptor : public MatcherDescriptor { public: - OverloadedMatcherDescriptor(ArrayRef Callbacks) - : Overloads(Callbacks.begin(), Callbacks.end()) {} + OverloadedMatcherDescriptor( + MutableArrayRef> Callbacks) + : Overloads(std::make_move_iterator(Callbacks.begin()), + std::make_move_iterator(Callbacks.end())) {} ~OverloadedMatcherDescriptor() override {} @@ -641,36 +643,37 @@ /// \brief 0-arg overload template -MatcherDescriptor *makeMatcherAutoMarshall(ReturnType (*Func)(), - StringRef MatcherName) { +std::unique_ptr +makeMatcherAutoMarshall(ReturnType (*Func)(), StringRef MatcherName) { std::vector RetTypes; BuildReturnTypeVector::build(RetTypes); - return new FixedArgCountMatcherDescriptor( + return llvm::make_unique( matcherMarshall0, reinterpret_cast(Func), MatcherName, RetTypes, None); } /// \brief 1-arg overload template -MatcherDescriptor *makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1), - StringRef MatcherName) { +std::unique_ptr +makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1), StringRef MatcherName) { std::vector RetTypes; BuildReturnTypeVector::build(RetTypes); ArgKind AK = ArgTypeTraits::getKind(); - return new FixedArgCountMatcherDescriptor( + return llvm::make_unique( matcherMarshall1, reinterpret_cast(Func), MatcherName, RetTypes, AK); } /// \brief 2-arg overload template -MatcherDescriptor *makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1, ArgType2), - StringRef MatcherName) { +std::unique_ptr +makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1, ArgType2), + StringRef MatcherName) { std::vector RetTypes; BuildReturnTypeVector::build(RetTypes); ArgKind AKs[] = { ArgTypeTraits::getKind(), ArgTypeTraits::getKind() }; - return new FixedArgCountMatcherDescriptor( + return llvm::make_unique( matcherMarshall2, reinterpret_cast(Func), MatcherName, RetTypes, AKs); } @@ -678,10 +681,10 @@ /// \brief Variadic overload. template )> -MatcherDescriptor *makeMatcherAutoMarshall( +std::unique_ptr makeMatcherAutoMarshall( ast_matchers::internal::VariadicFunction VarFunc, StringRef MatcherName) { - return new VariadicFuncMatcherDescriptor(VarFunc, MatcherName); + return llvm::make_unique(VarFunc, MatcherName); } /// \brief Overload for VariadicDynCastAllOfMatchers. @@ -689,24 +692,24 @@ /// Not strictly necessary, but DynCastAllOfMatcherDescriptor gives us better /// completion results for that type of matcher. template -MatcherDescriptor * -makeMatcherAutoMarshall(ast_matchers::internal::VariadicDynCastAllOfMatcher< - BaseT, DerivedT> VarFunc, - StringRef MatcherName) { - return new DynCastAllOfMatcherDescriptor(VarFunc, MatcherName); +std::unique_ptr makeMatcherAutoMarshall( + ast_matchers::internal::VariadicDynCastAllOfMatcher + VarFunc, + StringRef MatcherName) { + return llvm::make_unique(VarFunc, MatcherName); } /// \brief Argument adaptative overload. template