mirror of
https://github.com/RPCS3/llvm.git
synced 2025-04-12 02:47:10 +00:00
Twine: Provide [u]int{32,64} conversions via implicit constructors instead of
explicitly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77576 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
713395950a
commit
0165a2ca89
@ -101,14 +101,21 @@ namespace llvm {
|
|||||||
|
|
||||||
/// A pointer to a uint64_t value, to render as an unsigned decimal
|
/// A pointer to a uint64_t value, to render as an unsigned decimal
|
||||||
/// integer.
|
/// integer.
|
||||||
UDecKind,
|
UDec32Kind,
|
||||||
|
|
||||||
|
/// A pointer to a uint64_t value, to render as a signed decimal integer.
|
||||||
|
SDec32Kind,
|
||||||
|
|
||||||
|
/// A pointer to a uint64_t value, to render as an unsigned decimal
|
||||||
|
/// integer.
|
||||||
|
UDec64Kind,
|
||||||
|
|
||||||
|
/// A pointer to a uint64_t value, to render as a signed decimal integer.
|
||||||
|
SDec64Kind,
|
||||||
|
|
||||||
/// A pointer to a uint64_t value, to render as an unsigned hexadecimal
|
/// A pointer to a uint64_t value, to render as an unsigned hexadecimal
|
||||||
/// integer.
|
/// integer.
|
||||||
UHexKind,
|
UHexKind
|
||||||
|
|
||||||
/// A pointer to a uint64_t value, to render as a signed decimal integer.
|
|
||||||
SDecKind
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -244,6 +251,26 @@ namespace llvm {
|
|||||||
assert(isValid() && "Invalid twine!");
|
assert(isValid() && "Invalid twine!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Construct a twine to print \arg Val as an unsigned decimal integer.
|
||||||
|
Twine(const uint32_t &Val)
|
||||||
|
: LHS(&Val), LHSKind(UDec32Kind), RHSKind(EmptyKind) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Construct a twine to print \arg Val as a signed decimal integer.
|
||||||
|
Twine(const int32_t &Val)
|
||||||
|
: LHS(&Val), LHSKind(SDec32Kind), RHSKind(EmptyKind) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Construct a twine to print \arg Val as an unsigned decimal integer.
|
||||||
|
Twine(const uint64_t &Val)
|
||||||
|
: LHS(&Val), LHSKind(UDec64Kind), RHSKind(EmptyKind) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Construct a twine to print \arg Val as a signed decimal integer.
|
||||||
|
Twine(const int64_t &Val)
|
||||||
|
: LHS(&Val), LHSKind(SDec64Kind), RHSKind(EmptyKind) {
|
||||||
|
}
|
||||||
|
|
||||||
// FIXME: Unfortunately, to make sure this is as efficient as possible we
|
// FIXME: Unfortunately, to make sure this is as efficient as possible we
|
||||||
// need extra binary constructors from particular types. We can't rely on
|
// need extra binary constructors from particular types. We can't rely on
|
||||||
// the compiler to be smart enough to fold operator+()/concat() down to the
|
// the compiler to be smart enough to fold operator+()/concat() down to the
|
||||||
@ -271,16 +298,6 @@ namespace llvm {
|
|||||||
/// @name Numeric Conversions
|
/// @name Numeric Conversions
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
/// Construct a twine to print \arg Val as an unsigned decimal integer.
|
|
||||||
static Twine utostr(const uint64_t &Val) {
|
|
||||||
return Twine(&Val, UDecKind, 0, EmptyKind);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Construct a twine to print \arg Val as a signed decimal integer.
|
|
||||||
static Twine itostr(const int64_t &Val) {
|
|
||||||
return Twine(&Val, SDecKind, 0, EmptyKind);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Construct a twine to print \arg Val as an unsigned hexadecimal integer.
|
// Construct a twine to print \arg Val as an unsigned hexadecimal integer.
|
||||||
static Twine utohexstr(const uint64_t &Val) {
|
static Twine utohexstr(const uint64_t &Val) {
|
||||||
return Twine(&Val, UHexKind, 0, EmptyKind);
|
return Twine(&Val, UHexKind, 0, EmptyKind);
|
||||||
|
@ -47,10 +47,16 @@ void Twine::printOneChild(raw_ostream &OS, const void *Ptr,
|
|||||||
case Twine::StringRefKind:
|
case Twine::StringRefKind:
|
||||||
OS << *static_cast<const StringRef*>(Ptr);
|
OS << *static_cast<const StringRef*>(Ptr);
|
||||||
break;
|
break;
|
||||||
case Twine::UDecKind:
|
case Twine::UDec32Kind:
|
||||||
|
OS << *static_cast<const uint32_t*>(Ptr);
|
||||||
|
break;
|
||||||
|
case Twine::SDec32Kind:
|
||||||
|
OS << *static_cast<const int32_t*>(Ptr);
|
||||||
|
break;
|
||||||
|
case Twine::UDec64Kind:
|
||||||
OS << *static_cast<const uint64_t*>(Ptr);
|
OS << *static_cast<const uint64_t*>(Ptr);
|
||||||
break;
|
break;
|
||||||
case Twine::SDecKind:
|
case Twine::SDec64Kind:
|
||||||
OS << *static_cast<const int64_t*>(Ptr);
|
OS << *static_cast<const int64_t*>(Ptr);
|
||||||
break;
|
break;
|
||||||
case Twine::UHexKind:
|
case Twine::UHexKind:
|
||||||
@ -83,11 +89,17 @@ void Twine::printOneChildRepr(raw_ostream &OS, const void *Ptr,
|
|||||||
OS << "stringref:\""
|
OS << "stringref:\""
|
||||||
<< static_cast<const StringRef*>(Ptr) << "\"";
|
<< static_cast<const StringRef*>(Ptr) << "\"";
|
||||||
break;
|
break;
|
||||||
case Twine::UDecKind:
|
case Twine::UDec32Kind:
|
||||||
OS << "udec:" << static_cast<const uint64_t*>(Ptr) << "\"";
|
OS << "udec32:" << static_cast<const uint64_t*>(Ptr) << "\"";
|
||||||
break;
|
break;
|
||||||
case Twine::SDecKind:
|
case Twine::SDec32Kind:
|
||||||
OS << "sdec:" << static_cast<const int64_t*>(Ptr) << "\"";
|
OS << "sdec32:" << static_cast<const int64_t*>(Ptr) << "\"";
|
||||||
|
break;
|
||||||
|
case Twine::UDec64Kind:
|
||||||
|
OS << "udec64:" << static_cast<const uint64_t*>(Ptr) << "\"";
|
||||||
|
break;
|
||||||
|
case Twine::SDec64Kind:
|
||||||
|
OS << "sdec64:" << static_cast<const int64_t*>(Ptr) << "\"";
|
||||||
break;
|
break;
|
||||||
case Twine::UHexKind:
|
case Twine::UHexKind:
|
||||||
OS << "uhex:" << static_cast<const uint64_t*>(Ptr) << "\"";
|
OS << "uhex:" << static_cast<const uint64_t*>(Ptr) << "\"";
|
||||||
|
@ -31,12 +31,13 @@ TEST(TwineTest, Construction) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(TwineTest, Numbers) {
|
TEST(TwineTest, Numbers) {
|
||||||
EXPECT_EQ("123", Twine::utostr(123).str());
|
EXPECT_EQ("123", Twine(123U).str());
|
||||||
EXPECT_EQ("-123", Twine::itostr(-123).str());
|
EXPECT_EQ("123", Twine(123).str());
|
||||||
EXPECT_EQ("123", Twine::utostr(123).str());
|
EXPECT_EQ("-123", Twine(-123).str());
|
||||||
EXPECT_EQ("-123", Twine::itostr(-123).str());
|
EXPECT_EQ("123", Twine(123).str());
|
||||||
EXPECT_EQ("123", Twine::utostr((char) 123).str());
|
EXPECT_EQ("-123", Twine(-123).str());
|
||||||
EXPECT_EQ("-123", Twine::itostr((signed char) -123).str());
|
EXPECT_EQ("123", Twine((char) 123).str());
|
||||||
|
EXPECT_EQ("-123", Twine((signed char) -123).str());
|
||||||
|
|
||||||
EXPECT_EQ("7B", Twine::utohexstr(123).str());
|
EXPECT_EQ("7B", Twine::utohexstr(123).str());
|
||||||
EXPECT_EQ("FFFFFFFFFFFFFF85", Twine::itohexstr(-123).str());
|
EXPECT_EQ("FFFFFFFFFFFFFF85", Twine::itohexstr(-123).str());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user