[lldb/Utility] Clean up Scalar constructors
- move initialization to initializer lists - make desctructor non-virtual (nothing else is) - fix long double constructor so that it actually works
This commit is contained in:
@@ -60,41 +60,30 @@ public:
|
||||
};
|
||||
|
||||
// Constructors and Destructors
|
||||
Scalar();
|
||||
Scalar(int v) : m_type(e_sint), m_float(static_cast<float>(0)) {
|
||||
m_integer = llvm::APInt(sizeof(int) * 8, v, true);
|
||||
}
|
||||
Scalar(unsigned int v) : m_type(e_uint), m_float(static_cast<float>(0)) {
|
||||
m_integer = llvm::APInt(sizeof(int) * 8, v);
|
||||
}
|
||||
Scalar(long v) : m_type(e_slong), m_float(static_cast<float>(0)) {
|
||||
m_integer = llvm::APInt(sizeof(long) * 8, v, true);
|
||||
}
|
||||
Scalar(unsigned long v) : m_type(e_ulong), m_float(static_cast<float>(0)) {
|
||||
m_integer = llvm::APInt(sizeof(long) * 8, v);
|
||||
}
|
||||
Scalar(long long v) : m_type(e_slonglong), m_float(static_cast<float>(0)) {
|
||||
m_integer = llvm::APInt(sizeof(long long) * 8, v, true);
|
||||
}
|
||||
Scalar() : m_type(e_void), m_float(0.0f) {}
|
||||
Scalar(int v)
|
||||
: m_type(e_sint), m_integer(sizeof(v) * 8, v, true), m_float(0.0f) {}
|
||||
Scalar(unsigned int v)
|
||||
: m_type(e_uint), m_integer(sizeof(v) * 8, v, false), m_float(0.0f) {}
|
||||
Scalar(long v)
|
||||
: m_type(e_slong), m_integer(sizeof(v) * 8, v, true), m_float(0.0f) {}
|
||||
Scalar(unsigned long v)
|
||||
: m_type(e_ulong), m_integer(sizeof(v) * 8, v, false), m_float(0.0f) {}
|
||||
Scalar(long long v)
|
||||
: m_type(e_slonglong), m_integer(sizeof(v) * 8, v, true), m_float(0.0f) {}
|
||||
Scalar(unsigned long long v)
|
||||
: m_type(e_ulonglong), m_float(static_cast<float>(0)) {
|
||||
m_integer = llvm::APInt(sizeof(long long) * 8, v);
|
||||
: m_type(e_ulonglong), m_integer(sizeof(v) * 8, v, false), m_float(0.0f) {
|
||||
}
|
||||
Scalar(float v) : m_type(e_float), m_float(v) { m_float = llvm::APFloat(v); }
|
||||
Scalar(double v) : m_type(e_double), m_float(v) {
|
||||
m_float = llvm::APFloat(v);
|
||||
Scalar(float v) : m_type(e_float), m_float(v) {}
|
||||
Scalar(double v) : m_type(e_double), m_float(v) {}
|
||||
Scalar(long double v) : m_type(e_long_double), m_float(double(v)) {
|
||||
bool ignore;
|
||||
m_float.convert(llvm::APFloat::x87DoubleExtended(),
|
||||
llvm::APFloat::rmNearestTiesToEven, &ignore);
|
||||
}
|
||||
Scalar(long double v)
|
||||
: m_type(e_long_double),
|
||||
m_float(llvm::APFloat::x87DoubleExtended(),
|
||||
llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128,
|
||||
(reinterpret_cast<type128 *>(&v))->x)) {}
|
||||
Scalar(llvm::APInt v) : m_type(), m_float(static_cast<float>(0)) {
|
||||
m_integer = llvm::APInt(std::move(v));
|
||||
m_type = GetBestTypeForBitSize(m_integer.getBitWidth(), true);
|
||||
}
|
||||
// Scalar(const RegisterValue& reg_value);
|
||||
virtual ~Scalar();
|
||||
Scalar(llvm::APInt v)
|
||||
: m_type(GetBestTypeForBitSize(v.getBitWidth(), true)),
|
||||
m_integer(std::move(v)), m_float(0.0f) {}
|
||||
|
||||
/// Return the most efficient Scalar::Type for the requested bit size.
|
||||
static Type GetBestTypeForBitSize(size_t bit_size, bool sign);
|
||||
|
||||
@@ -126,8 +126,6 @@ static Scalar::Type PromoteToMaxType(
|
||||
return Scalar::e_void;
|
||||
}
|
||||
|
||||
Scalar::Scalar() : m_type(e_void), m_float(static_cast<float>(0)) {}
|
||||
|
||||
bool Scalar::GetData(DataExtractor &data, size_t limit_byte_size) const {
|
||||
size_t byte_size = GetByteSize();
|
||||
if (byte_size == 0) {
|
||||
@@ -232,8 +230,6 @@ void Scalar::GetValue(Stream *s, bool show_type) const {
|
||||
}
|
||||
}
|
||||
|
||||
Scalar::~Scalar() = default;
|
||||
|
||||
Scalar::Type Scalar::GetBestTypeForBitSize(size_t bit_size, bool sign) {
|
||||
// Scalar types are always host types, hence the sizeof().
|
||||
if (sign) {
|
||||
|
||||
@@ -92,6 +92,7 @@ TEST(ScalarTest, Getters) {
|
||||
CheckConversion<unsigned long long>(0x8765432112345678ull);
|
||||
CheckConversion<float>(42.25f);
|
||||
CheckConversion<double>(42.25);
|
||||
CheckConversion<long double>(42.25L);
|
||||
|
||||
EXPECT_EQ(APInt(128, 1) << 70, Scalar(std::pow(2.0f, 70.0f)).SInt128(APInt()));
|
||||
EXPECT_EQ(APInt(128, -1, true) << 70,
|
||||
|
||||
Reference in New Issue
Block a user