Add format_provider for the Error class

Summary:
The formatter supports the same options as the string-like classes, i.e. the
ability to truncate the displayed string. I don't anticipate it would be much
used, but it seems consistent.

Reviewers: zturner, clayborg

Subscribers: mgorny, lldb-commits

Differential Revision: https://reviews.llvm.org/D28519

llvm-svn: 291759
This commit is contained in:
Pavel Labath 2017-01-12 11:13:24 +00:00
parent 0d8af3697a
commit 3284684dd1
3 changed files with 31 additions and 0 deletions

View File

@ -12,6 +12,7 @@
#if defined(__cplusplus)
#include "llvm/Support/DataTypes.h"
#include "llvm/Support/FormatVariadic.h"
#include <cstdarg>
#include <cstdio>
@ -300,5 +301,15 @@ protected:
} // namespace lldb_private
namespace llvm {
template <> struct llvm::format_provider<lldb_private::Error> {
static void format(const lldb_private::Error &error, llvm::raw_ostream &OS,
llvm::StringRef Options) {
llvm::format_provider<llvm::StringRef>::format(error.AsCString(), OS,
Options);
}
};
}
#endif // #if defined(__cplusplus)
#endif // #ifndef __DCError_h__

View File

@ -2,6 +2,7 @@ add_lldb_unittest(LLDBCoreTests
ArchSpecTest.cpp
BroadcasterTest.cpp
DataExtractorTest.cpp
ErrorTest.cpp
ListenerTest.cpp
ScalarTest.cpp
StructuredDataTest.cpp

View File

@ -0,0 +1,19 @@
//===-- ErrorTest.cpp -------------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "gtest/gtest.h"
#include "lldb/Core/Error.h"
using namespace lldb_private;
TEST(ErrorTest, Formatv) {
EXPECT_EQ("", llvm::formatv("{0}", Error()).str());
EXPECT_EQ("Hello Error", llvm::formatv("{0}", Error("Hello Error")).str());
EXPECT_EQ("Hello", llvm::formatv("{0:5}", Error("Hello Error")).str());
}