Author: ibiryukov Date: Fri Aug 16 02:20:01 2019 New Revision: 369089 URL: http://llvm.org/viewvc/llvm-project?rev=369089&view=rev Log: [clangd] Remove Bind, use C++14 lambda captures instead. NFC
Modified: clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp clang-tools-extra/trunk/clangd/Function.h clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp Modified: clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp?rev=369089&r1=369088&r2=369089&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp (original) +++ clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp Fri Aug 16 02:20:01 2019 @@ -603,8 +603,11 @@ void ClangdLSPServer::onCommand(const Ex // 6. The editor applies the changes (applyEdit), and sends us a reply // 7. We unwrap the reply and send a reply to the editor. ApplyEdit(*Params.workspaceEdit, - Bind(ReplyAfterApplyingEdit, std::move(Reply), - std::string("Fix applied."))); + [Reply = std::move(Reply), ReplyAfterApplyingEdit]( + llvm::Expected<ApplyWorkspaceEditResponse> Response) mutable { + ReplyAfterApplyingEdit(std::move(Reply), "Fix applied.", + std::move(Response)); + }); } else if (Params.command == ExecuteCommandParams::CLANGD_APPLY_TWEAK && Params.tweakArgs) { auto Code = DraftMgr.getDraft(Params.tweakArgs->file.file()); @@ -624,8 +627,13 @@ void ClangdLSPServer::onCommand(const Ex WorkspaceEdit WE; WE.changes.emplace(); (*WE.changes)[File.uri()] = replacementsToEdits(Code, *R->ApplyEdit); - ApplyEdit(std::move(WE), Bind(ReplyAfterApplyingEdit, std::move(Reply), - std::string("Tweak applied."))); + ApplyEdit( + std::move(WE), + [Reply = std::move(Reply), ReplyAfterApplyingEdit]( + llvm::Expected<ApplyWorkspaceEditResponse> Response) mutable { + ReplyAfterApplyingEdit(std::move(Reply), "Tweak applied.", + std::move(Response)); + }); } if (R->ShowMessage) { ShowMessageParams Msg; Modified: clang-tools-extra/trunk/clangd/Function.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/Function.h?rev=369089&r1=369088&r2=369089&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/Function.h (original) +++ clang-tools-extra/trunk/clangd/Function.h Fri Aug 16 02:20:01 2019 @@ -27,62 +27,6 @@ namespace clangd { template <typename T> using Callback = llvm::unique_function<void(llvm::Expected<T>)>; -/// Stores a callable object (Func) and arguments (Args) and allows to call the -/// callable with provided arguments later using `operator ()`. The arguments -/// are std::forward'ed into the callable in the body of `operator()`. Therefore -/// `operator()` can only be called once, as some of the arguments could be -/// std::move'ed into the callable on first call. -template <class Func, class... Args> struct ForwardBinder { - using Tuple = std::tuple<typename std::decay<Func>::type, - typename std::decay<Args>::type...>; - Tuple FuncWithArguments; -#ifndef NDEBUG - bool WasCalled = false; -#endif - -public: - ForwardBinder(Tuple FuncWithArguments) - : FuncWithArguments(std::move(FuncWithArguments)) {} - -private: - template <std::size_t... Indexes, class... RestArgs> - auto CallImpl(std::integer_sequence<std::size_t, Indexes...> Seq, - RestArgs &&... Rest) - -> decltype(std::get<0>(this->FuncWithArguments)( - std::forward<Args>(std::get<Indexes + 1>(this->FuncWithArguments))..., - std::forward<RestArgs>(Rest)...)) { - return std::get<0>(this->FuncWithArguments)( - std::forward<Args>(std::get<Indexes + 1>(this->FuncWithArguments))..., - std::forward<RestArgs>(Rest)...); - } - -public: - template <class... RestArgs> - auto operator()(RestArgs &&... Rest) - -> decltype(this->CallImpl(std::index_sequence_for<Args...>(), - std::forward<RestArgs>(Rest)...)) { - -#ifndef NDEBUG - assert(!WasCalled && "Can only call result of Bind once."); - WasCalled = true; -#endif - return CallImpl(std::index_sequence_for<Args...>(), - std::forward<RestArgs>(Rest)...); - } -}; - -/// Creates an object that stores a callable (\p F) and first arguments to the -/// callable (\p As) and allows to call \p F with \Args at a later point. -/// Similar to std::bind, but also works with move-only \p F and \p As. -/// -/// The returned object must be called no more than once, as \p As are -/// std::forwarded'ed (therefore can be moved) into \p F during the call. -template <class Func, class... Args> -ForwardBinder<Func, Args...> Bind(Func F, Args &&... As) { - return ForwardBinder<Func, Args...>( - std::make_tuple(std::forward<Func>(F), std::forward<Args>(As)...)); -} - /// An Event<T> allows events of type T to be broadcast to listeners. template <typename T> class Event { public: Modified: clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp?rev=369089&r1=369088&r2=369089&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp (original) +++ clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp Fri Aug 16 02:20:01 2019 @@ -40,11 +40,9 @@ template <typename T> struct CaptureProx operator llvm::unique_function<void(T)>() && { assert(!Future.valid() && "conversion to callback called multiple times"); Future = Promise.get_future(); - return Bind( - [](std::promise<std::shared_ptr<T>> Promise, T Value) { - Promise.set_value(std::make_shared<T>(std::move(Value))); - }, - std::move(Promise)); + return [Promise = std::move(Promise)](T Value) mutable { + Promise.set_value(std::make_shared<T>(std::move(Value))); + }; } ~CaptureProxy() { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits