summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam McCall <sam.mccall@gmail.com>2018-07-12 08:00:21 +0000
committerSam McCall <sam.mccall@gmail.com>2018-07-12 08:00:21 +0000
commita0fbaa96b9e5f73195b8de8ce11c8c8c51d9eda5 (patch)
tree5ebda06e35b43a2a4b0bf6be86533e5c4283b955
parentc7fe3258ef85b075fa4c52862aac2b58e7d15529 (diff)
[clangd] Simplify logging wrapper after r336888
git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@336890 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--clangd/Logger.h19
1 files changed, 5 insertions, 14 deletions
diff --git a/clangd/Logger.h b/clangd/Logger.h
index 30dd6cc2..cc6e3a0a 100644
--- a/clangd/Logger.h
+++ b/clangd/Logger.h
@@ -13,6 +13,7 @@
#include "llvm/ADT/Twine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Error.h"
+#include "llvm/Support/FormatAdapters.h"
#include "llvm/Support/FormatVariadic.h"
namespace clang {
@@ -35,21 +36,11 @@ const char *debugType(const char *Filename);
void log(Logger::Level, const llvm::formatv_object_base &);
// We often want to consume llvm::Errors by value when passing them to log().
-// This is tricky because the logging infrastructure must mark them as handled.
-// When forwarding argument to formatv, we wrap Errors-by-value in this type
-// whose destructor handles the cleanup.
-// FIXME: simplify after D49170 lands.
-struct WrappedError {
- llvm::Error E;
- WrappedError(WrappedError &&) = default;
- ~WrappedError() { consumeError(std::move(E)); }
-};
-inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
- const WrappedError &Err) {
- return OS << Err.E;
-}
+// We automatically wrap them in llvm::fmt_consume() as formatv requires.
template <typename T> T &&wrap(T &&V) { return std::forward<T>(V); }
-inline WrappedError wrap(llvm::Error &&V) { return WrappedError{std::move(V)}; }
+inline decltype(fmt_consume(llvm::Error::success())) wrap(llvm::Error &&V) {
+ return fmt_consume(std::move(V));
+}
template <typename... Ts>
void log(Logger::Level L, const char *Fmt, Ts &&... Vals) {
detail::log(L, llvm::formatv(Fmt, detail::wrap(std::forward<Ts>(Vals))...));