labath created this revision.
labath added reviewers: JDevlieghere, mib, teemperor.
Herald added a subscriber: emaste.
Herald added a reviewer: shafik.
Herald added a project: LLDB.

The Scalar class gives off the impression that it follows the C type
conversion rules, but this is not true for its host-typed accessor
methods. For example, Scalar((int)-1).ULongLong() returns 0xffffffff,
but (unsigned long long)(int)-1 is 0xffffffffffffffff. I.e., Scalar's
ULongLong always zero-extends, but C semantics require sign-extension.

This patch renames [SU]LongLong to [SZ]ExtOrTruncInt to better reflect
the conversion being done (name chosen after the underlying APInt
operation). Accessors for smaller types are removed completely as the
are not necessary -- normal C conversions from (u)int64_t will handle
that for us in most cases.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82864

Files:
  lldb/include/lldb/Utility/RegisterValue.h
  lldb/include/lldb/Utility/Scalar.h
  lldb/source/Core/Value.cpp
  lldb/source/Core/ValueObject.cpp
  lldb/source/Core/ValueObjectChild.cpp
  lldb/source/Expression/DWARFExpression.cpp
  lldb/source/Expression/IRInterpreter.cpp
  lldb/source/Expression/IRMemoryMap.cpp
  lldb/source/Expression/Materializer.cpp
  lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp
  lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
  lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
  
lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
  
lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp
  lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
  
lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
  
lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
  
lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp
  lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp
  lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
  lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
  lldb/source/Symbol/Function.cpp
  lldb/source/Target/Process.cpp
  lldb/source/Target/RegisterContext.cpp
  lldb/source/Target/RegisterContextUnwind.cpp
  lldb/source/Target/StopInfo.cpp
  lldb/source/Target/Target.cpp
  lldb/source/Target/ThreadPlanTracer.cpp
  lldb/source/Utility/RegisterValue.cpp
  lldb/source/Utility/Scalar.cpp
  lldb/unittests/Utility/ScalarTest.cpp

Index: lldb/unittests/Utility/ScalarTest.cpp
===================================================================
--- lldb/unittests/Utility/ScalarTest.cpp
+++ lldb/unittests/Utility/ScalarTest.cpp
@@ -20,6 +20,9 @@
 using llvm::Failed;
 using llvm::Succeeded;
 
+template <typename T> static T (*max)() = std::numeric_limits<T>::max;
+template <typename T> static T (*min)() = std::numeric_limits<T>::min;
+
 template <typename T>
 bool checkInequality(T c1, T c2) {
   return (Scalar(c1) != Scalar(c2));
@@ -116,20 +119,24 @@
   ASSERT_EQ(0, memcmp(f, Storage, sizeof(f)));
 }
 
-TEST(ScalarTest, CastOperations) {
-  long long a = 0xf1f2f3f4f5f6f7f8LL;
-  Scalar a_scalar(a);
-  ASSERT_EQ((signed char)a, a_scalar.SChar());
-  ASSERT_EQ((unsigned char)a, a_scalar.UChar());
-  ASSERT_EQ((signed short)a, a_scalar.SShort());
-  ASSERT_EQ((unsigned short)a, a_scalar.UShort());
-  ASSERT_EQ((signed int)a, a_scalar.SInt());
-  ASSERT_EQ((unsigned int)a, a_scalar.UInt());
-  ASSERT_EQ((signed long)a, a_scalar.SLong());
-  ASSERT_EQ((unsigned long)a, a_scalar.ULong());
-  ASSERT_EQ((signed long long)a, a_scalar.SLongLong());
-  ASSERT_EQ((unsigned long long)a, a_scalar.ULongLong());
+TEST(ScalarTest, ZExtOrTruncInt) {
+  EXPECT_EQ(uint64_t(max<int>()), Scalar(max<int>()).ZExtOrTruncInt());
+  EXPECT_EQ(uint64_t(max<unsigned>()),
+            Scalar(max<unsigned>()).ZExtOrTruncInt());
+  EXPECT_EQ(uint64_t(max<long>()), Scalar(max<long>()).ZExtOrTruncInt());
+  EXPECT_EQ(uint64_t(max<unsigned long>()),
+            Scalar(max<unsigned long>()).ZExtOrTruncInt());
+}
+
+TEST(ScalarTest, SExtOrTruncInt) {
+  EXPECT_EQ(int64_t(max<int>()), Scalar(max<int>()).SExtOrTruncInt());
+  EXPECT_EQ(int64_t(max<uint64_t>()), Scalar(max<unsigned>()).SExtOrTruncInt());
+  EXPECT_EQ(int64_t(max<long>()), Scalar(max<long>()).SExtOrTruncInt());
+  EXPECT_EQ(int64_t(max<uint64_t>()),
+            Scalar(max<unsigned long>()).SExtOrTruncInt());
+}
 
+TEST(ScalarTest, FloatCasts) {
   int a2 = 23;
   Scalar a2_scalar(a2);
   ASSERT_EQ((float)a2, a2_scalar.Float());
@@ -171,38 +178,38 @@
   EXPECT_EQ("12345", ScalarGetValue<signed short>(12345));
   EXPECT_EQ("-12345", ScalarGetValue<signed short>(-12345));
   EXPECT_EQ("12345", ScalarGetValue<unsigned short>(12345));
-  EXPECT_EQ(std::to_string(std::numeric_limits<unsigned short>::max()),
-            ScalarGetValue(std::numeric_limits<unsigned short>::max()));
+  EXPECT_EQ(std::to_string(max<unsigned short>()),
+            ScalarGetValue(max<unsigned short>()));
 
   EXPECT_EQ("12345", ScalarGetValue<signed int>(12345));
   EXPECT_EQ("-12345", ScalarGetValue<signed int>(-12345));
   EXPECT_EQ("12345", ScalarGetValue<unsigned int>(12345));
-  EXPECT_EQ(std::to_string(std::numeric_limits<unsigned int>::max()),
-            ScalarGetValue(std::numeric_limits<unsigned int>::max()));
+  EXPECT_EQ(std::to_string(max<unsigned int>()),
+            ScalarGetValue(max<unsigned int>()));
 
   EXPECT_EQ("12345678", ScalarGetValue<signed long>(12345678L));
   EXPECT_EQ("-12345678", ScalarGetValue<signed long>(-12345678L));
   EXPECT_EQ("12345678", ScalarGetValue<unsigned long>(12345678UL));
-  EXPECT_EQ(std::to_string(std::numeric_limits<unsigned long>::max()),
-            ScalarGetValue(std::numeric_limits<unsigned long>::max()));
+  EXPECT_EQ(std::to_string(max<unsigned long>()),
+            ScalarGetValue(max<unsigned long>()));
 
   EXPECT_EQ("1234567890123", ScalarGetValue<signed long long>(1234567890123LL));
   EXPECT_EQ("-1234567890123",
             ScalarGetValue<signed long long>(-1234567890123LL));
   EXPECT_EQ("1234567890123",
             ScalarGetValue<unsigned long long>(1234567890123ULL));
-  EXPECT_EQ(std::to_string(std::numeric_limits<unsigned long long>::max()),
-            ScalarGetValue(std::numeric_limits<unsigned long long>::max()));
+  EXPECT_EQ(std::to_string(max<unsigned long long>()),
+            ScalarGetValue(max<unsigned long long>()));
 }
 
 TEST(ScalarTest, LongLongAssigmentOperator) {
   Scalar ull;
-  ull = std::numeric_limits<unsigned long long>::max();
-  EXPECT_EQ(std::numeric_limits<unsigned long long>::max(), ull.ULongLong());
+  ull = max<unsigned long long>();
+  EXPECT_EQ(max<unsigned long long>(), ull);
 
   Scalar sll;
-  sll = std::numeric_limits<signed long long>::max();
-  EXPECT_EQ(std::numeric_limits<signed long long>::max(), sll.SLongLong());
+  sll = max<signed long long>();
+  EXPECT_EQ(max<signed long long>(), sll);
 }
 
 TEST(ScalarTest, Division) {
@@ -324,11 +331,11 @@
 TEST(ScalarTest, TruncOrExtendTo) {
   Scalar S(0xffff);
   S.TruncOrExtendTo(12, true);
-  EXPECT_EQ(S.ULong(), 0xfffu);
+  EXPECT_EQ(S.ZExtOrTruncInt(), 0xfffu);
   S.TruncOrExtendTo(20, true);
-  EXPECT_EQ(S.ULong(), 0xfffffu);
+  EXPECT_EQ(S.ZExtOrTruncInt(), 0xfffffu);
   S.TruncOrExtendTo(24, false);
-  EXPECT_EQ(S.ULong(), 0x0fffffu);
+  EXPECT_EQ(S.ZExtOrTruncInt(), 0x0fffffu);
   S.TruncOrExtendTo(16, false);
-  EXPECT_EQ(S.ULong(), 0xffffu);
+  EXPECT_EQ(S.ZExtOrTruncInt(), 0xffffu);
 }
Index: lldb/source/Utility/Scalar.cpp
===================================================================
--- lldb/source/Utility/Scalar.cpp
+++ lldb/source/Utility/Scalar.cpp
@@ -644,7 +644,7 @@
   return success;
 }
 
-template <typename T> T Scalar::GetAsSigned(T fail_value) const {
+uint64_t Scalar::ZExtOrTruncInt(uint64_t fail_value) const {
   switch (m_type) {
   case e_void:
     break;
@@ -660,21 +660,21 @@
   case e_uint256:
   case e_sint512:
   case e_uint512:
-    return m_integer.sextOrTrunc(sizeof(T) * 8).getSExtValue();
+    return m_integer.zextOrTrunc(sizeof(uint64_t) * 8).getZExtValue();
 
   case e_float:
-    return static_cast<T>(m_float.convertToFloat());
+    return static_cast<uint64_t>(m_float.convertToFloat());
   case e_double:
-    return static_cast<T>(m_float.convertToDouble());
+    return static_cast<uint64_t>(m_float.convertToDouble());
   case e_long_double:
     llvm::APInt ldbl_val = m_float.bitcastToAPInt();
-    return static_cast<T>(
-        (ldbl_val.sextOrTrunc(sizeof(schar_t) * 8)).getSExtValue());
+    return static_cast<uint64_t>(
+        ldbl_val.zextOrTrunc(sizeof(uint64_t) * 8).getZExtValue());
   }
   return fail_value;
 }
 
-template <typename T> T Scalar::GetAsUnsigned(T fail_value) const {
+int64_t Scalar::SExtOrTruncInt(int64_t fail_value) const {
   switch (m_type) {
   case e_void:
     break;
@@ -690,55 +690,20 @@
   case e_uint256:
   case e_sint512:
   case e_uint512:
-    return m_integer.zextOrTrunc(sizeof(T) * 8).getZExtValue();
+    return m_integer.sextOrTrunc(sizeof(int64_t) * 8).getSExtValue();
 
   case e_float:
-    return static_cast<T>(m_float.convertToFloat());
+    return static_cast<int64_t>(m_float.convertToFloat());
   case e_double:
-    return static_cast<T>(m_float.convertToDouble());
+    return static_cast<int64_t>(m_float.convertToDouble());
   case e_long_double:
     llvm::APInt ldbl_val = m_float.bitcastToAPInt();
-    return static_cast<T>((ldbl_val.zextOrTrunc(sizeof(T) * 8)).getZExtValue());
+    return static_cast<int64_t>(
+        ldbl_val.sextOrTrunc(sizeof(int64_t) * 8).getSExtValue());
   }
   return fail_value;
 }
 
-signed char Scalar::SChar(signed char fail_value) const {
-  return GetAsSigned<signed char>(fail_value);
-}
-
-unsigned char Scalar::UChar(unsigned char fail_value) const {
-  return GetAsUnsigned<unsigned char>(fail_value);
-}
-
-short Scalar::SShort(short fail_value) const {
-  return GetAsSigned<short>(fail_value);
-}
-
-unsigned short Scalar::UShort(unsigned short fail_value) const {
-  return GetAsUnsigned<unsigned short>(fail_value);
-}
-
-int Scalar::SInt(int fail_value) const { return GetAsSigned<int>(fail_value); }
-
-unsigned int Scalar::UInt(unsigned int fail_value) const {
-  return GetAsUnsigned<unsigned int>(fail_value);
-}
-
-long Scalar::SLong(long fail_value) const { return GetAsSigned<long>(fail_value); }
-
-unsigned long Scalar::ULong(unsigned long fail_value) const {
-  return GetAsUnsigned<unsigned long>(fail_value);
-}
-
-long long Scalar::SLongLong(long long fail_value) const {
-  return GetAsSigned<long long>(fail_value);
-}
-
-unsigned long long Scalar::ULongLong(unsigned long long fail_value) const {
-  return GetAsUnsigned<unsigned long long>(fail_value);
-}
-
 llvm::APInt Scalar::SInt128(const llvm::APInt &fail_value) const {
   switch (m_type) {
   case e_void:
Index: lldb/source/Utility/RegisterValue.cpp
===================================================================
--- lldb/source/Utility/RegisterValue.cpp
+++ lldb/source/Utility/RegisterValue.cpp
@@ -540,7 +540,7 @@
     break;
   case eTypeUInt8:
   case eTypeUInt16:
-    return m_scalar.UShort(fail_value);
+    return m_scalar.ZExtOrTruncInt(fail_value);
   case eTypeBytes: {
     switch (buffer.length) {
     default:
@@ -569,7 +569,7 @@
   case eTypeFloat:
   case eTypeDouble:
   case eTypeLongDouble:
-    return m_scalar.UInt(fail_value);
+    return m_scalar.ZExtOrTruncInt(fail_value);
   case eTypeBytes: {
     switch (buffer.length) {
     default:
@@ -600,7 +600,7 @@
   case eTypeFloat:
   case eTypeDouble:
   case eTypeLongDouble:
-    return m_scalar.ULongLong(fail_value);
+    return m_scalar.ZExtOrTruncInt(fail_value);
   case eTypeBytes: {
     switch (buffer.length) {
     default:
Index: lldb/source/Target/ThreadPlanTracer.cpp
===================================================================
--- lldb/source/Target/ThreadPlanTracer.cpp
+++ lldb/source/Target/ThreadPlanTracer.cpp
@@ -198,9 +198,10 @@
 
     if (abi->GetArgumentValues(GetThread(), value_list)) {
       for (int arg_index = 0; arg_index < num_args; ++arg_index) {
-        stream->Printf(
-            "\n\targ[%d]=%llx", arg_index,
-            value_list.GetValueAtIndex(arg_index)->GetScalar().ULongLong());
+        stream->Format("\n\targ[{0}]={1:x}", arg_index,
+                       value_list.GetValueAtIndex(arg_index)
+                           ->GetScalar()
+                           .ZExtOrTruncInt());
 
         if (arg_index + 1 < num_args)
           stream->PutCString(", ");
Index: lldb/source/Target/Target.cpp
===================================================================
--- lldb/source/Target/Target.cpp
+++ lldb/source/Target/Target.cpp
@@ -1917,7 +1917,7 @@
   Scalar scalar;
   if (ReadScalarIntegerFromMemory(addr, prefer_file_cache, integer_byte_size,
                                   false, scalar, error))
-    return scalar.ULongLong(fail_value);
+    return scalar.ZExtOrTruncInt(fail_value);
   return fail_value;
 }
 
@@ -1927,7 +1927,7 @@
   if (ReadScalarIntegerFromMemory(addr, prefer_file_cache,
                                   m_arch.GetSpec().GetAddressByteSize(), false,
                                   scalar, error)) {
-    addr_t pointer_vm_addr = scalar.ULongLong(LLDB_INVALID_ADDRESS);
+    addr_t pointer_vm_addr = scalar.ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
     if (pointer_vm_addr != LLDB_INVALID_ADDRESS) {
       SectionLoadList &section_load_list = GetSectionLoadList();
       if (section_load_list.IsEmpty()) {
Index: lldb/source/Target/StopInfo.cpp
===================================================================
--- lldb/source/Target/StopInfo.cpp
+++ lldb/source/Target/StopInfo.cpp
@@ -805,7 +805,7 @@
             if (result_value_sp) {
               Scalar scalar_value;
               if (result_value_sp->ResolveValue(scalar_value)) {
-                if (scalar_value.ULongLong(1) == 0) {
+                if (scalar_value.ZExtOrTruncInt(1) == 0) {
                   // We have been vetoed.  This takes precedence over querying
                   // the watchpoint whether it should stop (aka ignore count
                   // and friends).  See also StopInfoWatchpoint::ShouldStop()
Index: lldb/source/Target/RegisterContextUnwind.cpp
===================================================================
--- lldb/source/Target/RegisterContextUnwind.cpp
+++ lldb/source/Target/RegisterContextUnwind.cpp
@@ -1527,7 +1527,7 @@
     if (dwarfexpr.Evaluate(&exe_ctx, this, 0, &cfa_val, nullptr, result,
                            &error)) {
       addr_t val;
-      val = result.GetScalar().ULongLong();
+      val = result.GetScalar().ZExtOrTruncInt();
       if (unwindplan_regloc.IsDWARFExpression()) {
         regloc.type = UnwindLLDB::RegisterLocation::eRegisterValueInferred;
         regloc.location.inferred_value = val;
@@ -1877,7 +1877,7 @@
     Status error;
     if (dwarfexpr.Evaluate(&exe_ctx, this, 0, nullptr, nullptr, result,
                            &error)) {
-      address = result.GetScalar().ULongLong();
+      address = result.GetScalar().ZExtOrTruncInt();
 
       UnwindLogMsg("CFA value set by DWARF expression is 0x%" PRIx64,
                    address);
Index: lldb/source/Target/RegisterContext.cpp
===================================================================
--- lldb/source/Target/RegisterContext.cpp
+++ lldb/source/Target/RegisterContext.cpp
@@ -88,7 +88,7 @@
   if (dwarf_expr.Evaluate(&exe_ctx, this, opcode_ctx, dwarf_data, nullptr,
                           eRegisterKindDWARF, nullptr, nullptr, result,
                           &error)) {
-    expr_result = result.GetScalar().SInt(-1);
+    expr_result = result.GetScalar().SExtOrTruncInt(-1);
     switch (expr_result) {
     case 0:
       return 4;
Index: lldb/source/Target/Process.cpp
===================================================================
--- lldb/source/Target/Process.cpp
+++ lldb/source/Target/Process.cpp
@@ -2209,7 +2209,7 @@
   Scalar scalar;
   if (ReadScalarIntegerFromMemory(vm_addr, integer_byte_size, false, scalar,
                                   error))
-    return scalar.ULongLong(fail_value);
+    return scalar.ZExtOrTruncInt(fail_value);
   return fail_value;
 }
 
@@ -2220,7 +2220,7 @@
   Scalar scalar;
   if (ReadScalarIntegerFromMemory(vm_addr, integer_byte_size, true, scalar,
                                   error))
-    return scalar.SLongLong(fail_value);
+    return scalar.SExtOrTruncInt(fail_value);
   return fail_value;
 }
 
@@ -2228,7 +2228,7 @@
   Scalar scalar;
   if (ReadScalarIntegerFromMemory(vm_addr, GetAddressByteSize(), false, scalar,
                                   error))
-    return scalar.ULongLong(LLDB_INVALID_ADDRESS);
+    return scalar.ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
   return LLDB_INVALID_ADDRESS;
 }
 
Index: lldb/source/Symbol/Function.cpp
===================================================================
--- lldb/source/Symbol/Function.cpp
+++ lldb/source/Symbol/Function.cpp
@@ -204,7 +204,8 @@
     return nullptr;
   }
 
-  addr_t raw_addr = callee_addr_val.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+  addr_t raw_addr =
+      callee_addr_val.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
   if (raw_addr == LLDB_INVALID_ADDRESS) {
     LLDB_LOG(log, "IndirectCallEdge: Could not extract address from scalar");
     return nullptr;
Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -1785,7 +1785,7 @@
                   if (location_result.GetValueType() ==
                       Value::eValueTypeFileAddress) {
                     lldb::addr_t file_addr =
-                        location_result.GetScalar().ULongLong();
+                        location_result.GetScalar().ZExtOrTruncInt();
                     lldb::addr_t byte_size = 1;
                     if (var_sp->GetType())
                       byte_size =
Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
===================================================================
--- lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
+++ lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
@@ -2467,7 +2467,8 @@
                     DataExtractor(debug_info_data, block_offset, block_length),
                     die.GetCU(), eRegisterKindDWARF, &initialValue, nullptr,
                     memberOffset, nullptr)) {
-              member_byte_offset = memberOffset.ResolveValue(nullptr).UInt();
+              member_byte_offset =
+                  memberOffset.ResolveValue(nullptr).ZExtOrTruncInt();
             }
           } else {
             // With DWARF 3 and later, if the value is an integer constant,
@@ -2902,7 +2903,7 @@
                         die.GetCU(), eRegisterKindDWARF, &initialValue, nullptr,
                         memberOffset, nullptr)) {
                   member_byte_offset =
-                      memberOffset.ResolveValue(nullptr).UInt();
+                      memberOffset.ResolveValue(nullptr).ZExtOrTruncInt();
                 }
               } else {
                 // With DWARF 3 and later, if the value is an integer constant,
Index: lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp
===================================================================
--- lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp
+++ lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp
@@ -892,7 +892,7 @@
 
   Scalar scalar;
   if (result_valobj_sp->ResolveValue(scalar)) {
-    if (scalar.UInt(1))
+    if (scalar.ZExtOrTruncInt(1))
       return Status("expression failed: \"%s\"", expr.GetData());
     process->ResetImageToken(image_token);
   }
Index: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp
===================================================================
--- lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp
+++ lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp
@@ -88,9 +88,9 @@
   if (level == lldb::eDescriptionLevelBrief)
     s->Printf("Step through ObjC trampoline");
   else {
-    s->Printf("Stepping to implementation of ObjC method - obj: 0x%llx, isa: "
-              "0x%" PRIx64 ", sel: 0x%" PRIx64,
-              m_input_values.GetValueAtIndex(0)->GetScalar().ULongLong(),
+    s->Format("Stepping to implementation of ObjC method - obj: {0:x}, isa: "
+              "{1:x}, sel: {2:x}",
+              m_input_values.GetValueAtIndex(0)->GetScalar().ZExtOrTruncInt(),
               m_isa_addr, m_sel_addr);
   }
 }
@@ -135,7 +135,7 @@
     m_impl_function->FetchFunctionResults(exc_ctx, m_args_addr,
                                           target_addr_value);
     m_impl_function->DeallocateFunctionResults(exc_ctx, m_args_addr);
-    lldb::addr_t target_addr = target_addr_value.GetScalar().ULongLong();
+    lldb::addr_t target_addr = target_addr_value.GetScalar().ZExtOrTruncInt();
     Address target_so_addr;
     target_so_addr.SetOpcodeLoadAddress(target_addr, exc_ctx.GetTargetPtr());
     Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_STEP));
Index: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
===================================================================
--- lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
+++ lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
@@ -981,8 +981,9 @@
     if (!success)
       return ret_plan_sp;
 
-    lldb::addr_t obj_addr =
-        argument_values.GetValueAtIndex(obj_index)->GetScalar().ULongLong();
+    lldb::addr_t obj_addr = argument_values.GetValueAtIndex(obj_index)
+                                ->GetScalar()
+                                .ZExtOrTruncInt();
     if (obj_addr == 0x0) {
       LLDB_LOGF(
           log,
@@ -998,8 +999,9 @@
     // used to look up the class/selector pair in our cache.
 
     lldb::addr_t isa_addr = LLDB_INVALID_ADDRESS;
-    lldb::addr_t sel_addr =
-        argument_values.GetValueAtIndex(sel_index)->GetScalar().ULongLong();
+    lldb::addr_t sel_addr = argument_values.GetValueAtIndex(sel_index)
+                                ->GetScalar()
+                                .ZExtOrTruncInt();
 
     // Figure out the class this is being dispatched to and see if
     // we've already cached this method call, If so we can push a
@@ -1024,7 +1026,7 @@
           super_value.GetScalar() += process->GetAddressByteSize();
           super_value.ResolveValue(&exe_ctx);
           if (super_value.GetScalar().IsValid())
-            isa_addr = super_value.GetScalar().ULongLong();
+            isa_addr = super_value.GetScalar().ZExtOrTruncInt();
           else {
             LLDB_LOGF(log, "Failed to extract the super class value from the "
                            "class in objc_super.");
@@ -1044,7 +1046,7 @@
         super_value.ResolveValue(&exe_ctx);
 
         if (super_value.GetScalar().IsValid()) {
-          isa_addr = super_value.GetScalar().ULongLong();
+          isa_addr = super_value.GetScalar().ZExtOrTruncInt();
         } else {
           LLDB_LOGF(log, "Failed to extract the class value from objc_super.");
         }
@@ -1067,7 +1069,7 @@
       isa_value.SetValueType(Value::eValueTypeLoadAddress);
       isa_value.ResolveValue(&exe_ctx);
       if (isa_value.GetScalar().IsValid()) {
-        isa_addr = isa_value.GetScalar().ULongLong();
+        isa_addr = isa_value.GetScalar().ZExtOrTruncInt();
       } else {
         LLDB_LOGF(log, "Failed to extract the isa value from object.");
       }
Index: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
===================================================================
--- lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
+++ lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
@@ -1477,7 +1477,7 @@
 
     if (results == eExpressionCompleted) {
       // The result is the number of ClassInfo structures that were filled in
-      num_class_infos = return_value.GetScalar().ULong();
+      num_class_infos = return_value.GetScalar().ZExtOrTruncInt();
       LLDB_LOGF(log, "Discovered %u ObjC classes\n", num_class_infos);
       if (num_class_infos > 0) {
         // Read the ClassInfo structures
@@ -1773,7 +1773,7 @@
 
     if (results == eExpressionCompleted) {
       // The result is the number of ClassInfo structures that were filled in
-      num_class_infos = return_value.GetScalar().ULong();
+      num_class_infos = return_value.GetScalar().ZExtOrTruncInt();
       LLDB_LOGF(log, "Discovered %u ObjC classes in shared cache\n",
                 num_class_infos);
       assert(num_class_infos <= num_classes);
@@ -2682,7 +2682,8 @@
 
     if (!abi->GetArgumentValues(*thread_sp, args)) return;
 
-    addr_t exception_addr = args.GetValueAtIndex(0)->GetScalar().ULongLong();
+    addr_t exception_addr =
+        args.GetValueAtIndex(0)->GetScalar().ZExtOrTruncInt();
 
     Value value(exception_addr);
     value.SetCompilerType(voidstar);
Index: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
===================================================================
--- lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
+++ lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
@@ -197,7 +197,7 @@
     return false;
   }
 
-  addr_t result_ptr = ret.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+  addr_t result_ptr = ret.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
 
   char buf[512];
   size_t cstr_len = 0;
Index: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp
===================================================================
--- lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp
+++ lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp
@@ -536,9 +536,9 @@
           offset_ptr, offset_ptr_size, is_signed, offset_scalar, error);
       if (error.Success() && 4 == read) {
         LLDB_LOGV(log, "offset_ptr = {0:x} --> {1}", offset_ptr,
-                  offset_scalar.SInt());
-        m_ivars.push_back(
-            {ConstString(name), ivar_type, size, offset_scalar.SInt()});
+                  offset_scalar.SExtOrTruncInt());
+        m_ivars.push_back({ConstString(name), ivar_type, size,
+                           int32_t(offset_scalar.SExtOrTruncInt())});
       } else
         LLDB_LOGV(log, "offset_ptr = {0:x} --> read fail, read = %{1}",
                   offset_ptr, read);
Index: lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
===================================================================
--- lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
+++ lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
@@ -580,7 +580,7 @@
   }
 
   size_t ptr_size = m_process->GetAddressByteSize();
-  addr_t result_ptr = results.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+  addr_t result_ptr = results.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
   addr_t exception_addr =
       m_process->ReadPointerFromMemory(result_ptr - ptr_size, error);
 
Index: lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
===================================================================
--- lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
+++ lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
@@ -472,7 +472,7 @@
   ClangExpressionVariable::ParserVars *parser_vars =
       entity->GetParserVars(GetParserID());
 
-  ptr = parser_vars->m_lldb_value.GetScalar().ULongLong();
+  ptr = parser_vars->m_lldb_value.GetScalar().ZExtOrTruncInt();
 
   return true;
 }
@@ -1509,7 +1509,7 @@
     if (!var_sc.module_sp)
       return false;
 
-    Address so_addr(var_location.GetScalar().ULongLong(),
+    Address so_addr(var_location.GetScalar().ZExtOrTruncInt(),
                     var_sc.module_sp->GetSectionList());
 
     lldb::addr_t load_addr = so_addr.GetLoadAddress(target);
Index: lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
===================================================================
--- lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
+++ lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
@@ -368,12 +368,12 @@
 
     if (abi->GetArgumentValues(exe_ctx.GetThreadRef(), argument_values)) {
       uint32_t dyld_mode =
-          argument_values.GetValueAtIndex(0)->GetScalar().UInt(-1);
+          argument_values.GetValueAtIndex(0)->GetScalar().ZExtOrTruncInt(-1);
       if (dyld_mode != static_cast<uint32_t>(-1)) {
         // Okay the mode was right, now get the number of elements, and the
         // array of new elements...
         uint32_t image_infos_count =
-            argument_values.GetValueAtIndex(1)->GetScalar().UInt(-1);
+            argument_values.GetValueAtIndex(1)->GetScalar().ZExtOrTruncInt(-1);
         if (image_infos_count != static_cast<uint32_t>(-1)) {
           // Got the number added, now go through the array of added elements,
           // putting out the mach header address, and adding the image. Note,
@@ -381,7 +381,7 @@
           // RemoveModules functions do all the logging internally.
 
           lldb::addr_t image_infos_addr =
-              argument_values.GetValueAtIndex(2)->GetScalar().ULongLong();
+              argument_values.GetValueAtIndex(2)->GetScalar().ZExtOrTruncInt();
           if (dyld_mode == 0) {
             // This is add:
             dyld_instance->AddModulesUsingImageInfosAddress(image_infos_addr,
Index: lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp
===================================================================
--- lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp
+++ lldb/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.cpp
@@ -264,15 +264,16 @@
 
     if (abi->GetArgumentValues(exe_ctx.GetThreadRef(), argument_values)) {
       uint32_t dyld_mode =
-          argument_values.GetValueAtIndex(0)->GetScalar().UInt(-1);
+          argument_values.GetValueAtIndex(0)->GetScalar().ZExtOrTruncInt(-1);
       if (dyld_mode != static_cast<uint32_t>(-1)) {
         // Okay the mode was right, now get the number of elements, and the
         // array of new elements...
         uint32_t image_infos_count =
-            argument_values.GetValueAtIndex(1)->GetScalar().UInt(-1);
+            argument_values.GetValueAtIndex(1)->GetScalar().ZExtOrTruncInt(-1);
         if (image_infos_count != static_cast<uint32_t>(-1)) {
           addr_t header_array =
-              argument_values.GetValueAtIndex(2)->GetScalar().ULongLong(-1);
+              argument_values.GetValueAtIndex(2)->GetScalar().ZExtOrTruncInt(
+                  -1);
           if (header_array != static_cast<uint64_t>(-1)) {
             std::vector<addr_t> image_load_addresses;
             for (uint64_t i = 0; i < image_infos_count; i++) {
Index: lldb/source/Expression/Materializer.cpp
===================================================================
--- lldb/source/Expression/Materializer.cpp
+++ lldb/source/Expression/Materializer.cpp
@@ -122,7 +122,7 @@
 
     map.Free((lldb::addr_t)m_persistent_variable_sp->m_live_sp->GetValue()
                  .GetScalar()
-                 .ULongLong(),
+                 .ZExtOrTruncInt(),
              deallocate_error);
 
     m_persistent_variable_sp->m_live_sp.reset();
@@ -255,7 +255,7 @@
 
       lldb::addr_t mem = m_persistent_variable_sp->m_live_sp->GetValue()
                              .GetScalar()
-                             .ULongLong();
+                             .ZExtOrTruncInt();
 
       if (!m_persistent_variable_sp->m_live_sp) {
         err.SetErrorStringWithFormat(
Index: lldb/source/Expression/IRMemoryMap.cpp
===================================================================
--- lldb/source/Expression/IRMemoryMap.cpp
+++ lldb/source/Expression/IRMemoryMap.cpp
@@ -772,7 +772,7 @@
   if (!error.Success())
     return;
 
-  *address = pointer_scalar.ULongLong();
+  *address = pointer_scalar.ZExtOrTruncInt();
 
   return;
 }
Index: lldb/source/Expression/IRInterpreter.cpp
===================================================================
--- lldb/source/Expression/IRInterpreter.cpp
+++ lldb/source/Expression/IRInterpreter.cpp
@@ -205,7 +205,8 @@
 
     lldb_private::Scalar cast_scalar;
 
-    if (!AssignToMatchType(cast_scalar, scalar.ULongLong(), value->getType()))
+    if (!AssignToMatchType(cast_scalar, scalar.ZExtOrTruncInt(),
+                           value->getType()))
       return false;
 
     size_t value_byte_size = m_target_data.getTypeStoreSize(value->getType());
@@ -891,7 +892,7 @@
 
       S.MakeSigned();
 
-      lldb_private::Scalar S_signextend(S.SLongLong());
+      lldb_private::Scalar S_signextend(S.SExtOrTruncInt());
 
       frame.AssignValue(inst, S_signextend, module);
     } break;
@@ -994,11 +995,11 @@
             return false;
           }
 
-          LLDB_LOGF(log, "Evaluated constant index %s as %llu",
-                    PrintValue(*ii).c_str(), I.ULongLong(LLDB_INVALID_ADDRESS));
+          LLDB_LOG(log, "Evaluated constant index {0} as {1}", PrintValue(*ii),
+                   I.ZExtOrTruncInt(LLDB_INVALID_ADDRESS));
 
           constant_index = cast<ConstantInt>(ConstantInt::get(
-              (*ii)->getType(), I.ULongLong(LLDB_INVALID_ADDRESS)));
+              (*ii)->getType(), I.ZExtOrTruncInt(LLDB_INVALID_ADDRESS)));
         }
 
         const_indices.push_back(constant_index);
@@ -1374,7 +1375,7 @@
         error.SetErrorString("unable to get address of function");
         return false;
       }
-      lldb_private::Address funcAddr(I.ULongLong(LLDB_INVALID_ADDRESS));
+      lldb_private::Address funcAddr(I.ZExtOrTruncInt(LLDB_INVALID_ADDRESS));
 
       lldb_private::DiagnosticManager diagnostics;
       lldb_private::EvaluateExpressionOptions options;
@@ -1430,7 +1431,7 @@
 
         // Check if this is a string literal or constant string pointer
         if (arg_ty->isPointerTy()) {
-          lldb::addr_t addr = tmp_op.ULongLong();
+          lldb::addr_t addr = tmp_op.ZExtOrTruncInt();
           size_t dataSize = 0;
 
           bool Success = execution_unit.GetAllocSize(addr, dataSize);
@@ -1456,7 +1457,7 @@
           // Get argument size in bytes
           rawArgs[i].size = arg_ty->getIntegerBitWidth() / 8;
           // Push value into argument list for thread plan
-          rawArgs[i].value = tmp_op.ULongLong();
+          rawArgs[i].value = tmp_op.ZExtOrTruncInt();
         }
       }
 
@@ -1473,9 +1474,9 @@
       lldb_private::StreamString ss;
       if (!call_plan_sp || !call_plan_sp->ValidatePlan(&ss)) {
         error.SetErrorToGenericError();
-        error.SetErrorStringWithFormat(
-            "unable to make ThreadPlanCallFunctionUsingABI for 0x%llx",
-            I.ULongLong());
+        error.SetErrorStringWithFormatv(
+            "unable to make ThreadPlanCallFunctionUsingABI for {0:x}",
+            I.ZExtOrTruncInt());
         return false;
       }
 
Index: lldb/source/Expression/DWARFExpression.cpp
===================================================================
--- lldb/source/Expression/DWARFExpression.cpp
+++ lldb/source/Expression/DWARFExpression.cpp
@@ -1025,15 +1025,15 @@
       Value::ValueType value_type = stack.back().GetValueType();
       switch (value_type) {
       case Value::eValueTypeHostAddress: {
-        void *src = (void *)stack.back().GetScalar().ULongLong();
+        void *src = (void *)stack.back().GetScalar().ZExtOrTruncInt();
         intptr_t ptr;
         ::memcpy(&ptr, src, sizeof(void *));
         stack.back().GetScalar() = ptr;
         stack.back().ClearContext();
       } break;
       case Value::eValueTypeFileAddress: {
-        auto file_addr = stack.back().GetScalar().ULongLong(
-            LLDB_INVALID_ADDRESS);
+        auto file_addr =
+            stack.back().GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
         if (!module_sp) {
           if (error_ptr)
             error_ptr->SetErrorStringWithFormat(
@@ -1062,7 +1062,7 @@
         if (exe_ctx) {
           if (process) {
             lldb::addr_t pointer_addr =
-                stack.back().GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+                stack.back().GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
             Status error;
             lldb::addr_t pointer_value =
                 process->ReadPointerFromMemory(pointer_addr, error);
@@ -1120,7 +1120,7 @@
       Value::ValueType value_type = stack.back().GetValueType();
       switch (value_type) {
       case Value::eValueTypeHostAddress: {
-        void *src = (void *)stack.back().GetScalar().ULongLong();
+        void *src = (void *)stack.back().GetScalar().ZExtOrTruncInt();
         intptr_t ptr;
         ::memcpy(&ptr, src, sizeof(void *));
         // I can't decide whether the size operand should apply to the bytes in
@@ -1163,7 +1163,7 @@
         if (exe_ctx) {
           if (process) {
             lldb::addr_t pointer_addr =
-                stack.back().GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+                stack.back().GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
             uint8_t addr_bytes[sizeof(lldb::addr_t)];
             Status error;
             if (process->ReadMemory(pointer_addr, &addr_bytes, size, error) ==
@@ -2093,7 +2093,7 @@
             if (process) {
               if (curr_piece.ResizeData(piece_byte_size) == piece_byte_size) {
                 lldb::addr_t load_addr =
-                    curr_piece_source_value.GetScalar().ULongLong(
+                    curr_piece_source_value.GetScalar().ZExtOrTruncInt(
                         LLDB_INVALID_ADDRESS);
                 if (process->ReadMemory(
                         load_addr, curr_piece.GetBuffer().GetBytes(),
@@ -2119,8 +2119,9 @@
           case Value::eValueTypeFileAddress:
           case Value::eValueTypeHostAddress:
             if (error_ptr) {
-              lldb::addr_t addr = curr_piece_source_value.GetScalar().ULongLong(
-                  LLDB_INVALID_ADDRESS);
+              lldb::addr_t addr =
+                  curr_piece_source_value.GetScalar().ZExtOrTruncInt(
+                      LLDB_INVALID_ADDRESS);
               error_ptr->SetErrorStringWithFormat(
                   "failed to read memory DW_OP_piece(%" PRIu64
                   ") from %s address 0x%" PRIx64,
@@ -2464,7 +2465,7 @@
 
       // Lookup the TLS block address for this thread and module.
       const addr_t tls_file_addr =
-          stack.back().GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+          stack.back().GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
       const addr_t tls_load_addr =
           thread->GetThreadLocalData(module_sp, tls_file_addr);
 
Index: lldb/source/Core/ValueObjectChild.cpp
===================================================================
--- lldb/source/Core/ValueObjectChild.cpp
+++ lldb/source/Core/ValueObjectChild.cpp
@@ -166,7 +166,7 @@
         case Value::eValueTypeFileAddress:
         case Value::eValueTypeHostAddress: {
           lldb::addr_t addr =
-              m_value.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+              m_value.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
           if (addr == LLDB_INVALID_ADDRESS) {
             m_error.SetErrorString("parent address is invalid.");
           } else if (addr == 0) {
Index: lldb/source/Core/ValueObject.cpp
===================================================================
--- lldb/source/Core/ValueObject.cpp
+++ lldb/source/Core/ValueObject.cpp
@@ -412,8 +412,8 @@
       case Value::eValueTypeFileAddress:
       case Value::eValueTypeHostAddress: {
         uint32_t addr_nibble_size = data.GetAddressByteSize() * 2;
-        sstr.Printf("0x%*.*llx", addr_nibble_size, addr_nibble_size,
-                    value.GetScalar().ULongLong(LLDB_INVALID_ADDRESS));
+        sstr.Printf("0x%*.*" PRIx64, addr_nibble_size, addr_nibble_size,
+                    value.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS));
         m_location_str = std::string(sstr.GetString());
       } break;
       }
@@ -464,7 +464,7 @@
   }
 
   bool ret;
-  ret = scalar_value.ULongLong(1) != 0;
+  ret = scalar_value != 0;
   error.Clear();
   return ret;
 }
@@ -860,7 +860,7 @@
           GetCompilerType().GetByteSize(exe_ctx.GetBestExecutionContextScope());
       if (max_bytes && *max_bytes > offset) {
         size_t bytes_read = std::min<uint64_t>(*max_bytes - offset, bytes);
-        addr = m_value.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+        addr = m_value.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
         if (addr == 0 || addr == LLDB_INVALID_ADDRESS)
           break;
         heap_buf_ptr->CopyData((uint8_t *)(addr + offset), bytes_read);
@@ -926,7 +926,8 @@
     ExecutionContext exe_ctx(GetExecutionContextRef());
     Process *process = exe_ctx.GetProcessPtr();
     if (process) {
-      addr_t target_addr = m_value.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+      addr_t target_addr =
+          m_value.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
       size_t bytes_written = process->WriteMemory(
           target_addr, data.GetDataStart(), byte_size, error);
       if (!error.Success())
@@ -1203,7 +1204,7 @@
     if (ResolveValue(scalar)) {
       if (success)
         *success = true;
-      return scalar.ULongLong(fail_value);
+      return scalar.ZExtOrTruncInt(fail_value);
     }
     // fallthrough, otherwise...
   }
@@ -1220,7 +1221,7 @@
     if (ResolveValue(scalar)) {
       if (success)
         *success = true;
-      return scalar.SLongLong(fail_value);
+      return scalar.SExtOrTruncInt(fail_value);
     }
     // fallthrough, otherwise...
   }
@@ -1517,7 +1518,7 @@
     if (scalar_is_load_address) {
       if (address_type)
         *address_type = eAddressTypeLoad;
-      return m_value.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+      return m_value.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
     }
     break;
 
@@ -1525,7 +1526,7 @@
   case Value::eValueTypeFileAddress: {
     if (address_type)
       *address_type = m_value.GetValueAddressType();
-    return m_value.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+    return m_value.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
   } break;
   case Value::eValueTypeHostAddress: {
     if (address_type)
@@ -1549,7 +1550,7 @@
   switch (m_value.GetValueType()) {
   case Value::eValueTypeScalar:
   case Value::eValueTypeVector:
-    address = m_value.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+    address = m_value.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
     break;
 
   case Value::eValueTypeHostAddress:
@@ -1601,7 +1602,7 @@
         Process *process = exe_ctx.GetProcessPtr();
         if (process) {
           addr_t target_addr =
-              m_value.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+              m_value.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
           size_t bytes_written = process->WriteScalarToMemory(
               target_addr, new_scalar, byte_size, error);
           if (!error.Success())
@@ -2051,7 +2052,7 @@
         return;
       } else {
         uint64_t load_addr =
-            m_value.GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+            m_value.GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
         if (load_addr != LLDB_INVALID_ADDRESS) {
           s.Printf("(*( (%s *)0x%" PRIx64 "))", GetTypeName().AsCString("void"),
                    load_addr);
Index: lldb/source/Core/Value.cpp
===================================================================
--- lldb/source/Core/Value.cpp
+++ lldb/source/Core/Value.cpp
@@ -61,7 +61,7 @@
       m_value_type(v.m_value_type), m_context_type(v.m_context_type),
       m_data_buffer() {
   const uintptr_t rhs_value =
-      (uintptr_t)v.m_value.ULongLong(LLDB_INVALID_ADDRESS);
+      (uintptr_t)v.m_value.ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
   if ((rhs_value != 0) &&
       (rhs_value == (uintptr_t)v.m_data_buffer.GetBytes())) {
     m_data_buffer.CopyData(v.m_data_buffer.GetBytes(),
@@ -80,7 +80,7 @@
     m_value_type = rhs.m_value_type;
     m_context_type = rhs.m_context_type;
     const uintptr_t rhs_value =
-        (uintptr_t)rhs.m_value.ULongLong(LLDB_INVALID_ADDRESS);
+        (uintptr_t)rhs.m_value.ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
     if ((rhs_value != 0) &&
         (rhs_value == (uintptr_t)rhs.m_data_buffer.GetBytes())) {
       m_data_buffer.CopyData(rhs.m_data_buffer.GetBytes(),
@@ -371,7 +371,7 @@
           // execute commands where you can look at types in data sections.
           const SectionLoadList &target_sections = target->GetSectionLoadList();
           if (!target_sections.IsEmpty()) {
-            address = m_value.ULongLong(LLDB_INVALID_ADDRESS);
+            address = m_value.ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
             if (target_sections.ResolveLoadAddress(address, file_so_addr)) {
               address_type = eAddressTypeLoad;
               data.SetByteOrder(target->GetArchitecture().GetByteOrder());
@@ -384,7 +384,7 @@
           error.SetErrorString("can't read load address (invalid process)");
         }
       } else {
-        address = m_value.ULongLong(LLDB_INVALID_ADDRESS);
+        address = m_value.ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
         address_type = eAddressTypeLoad;
         data.SetByteOrder(
             process->GetTarget().GetArchitecture().GetByteOrder());
@@ -400,7 +400,7 @@
     } else if (exe_ctx->GetTargetPtr() == nullptr) {
       error.SetErrorString("can't read file address (invalid target)");
     } else {
-      address = m_value.ULongLong(LLDB_INVALID_ADDRESS);
+      address = m_value.ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
       if (address == LLDB_INVALID_ADDRESS) {
         error.SetErrorString("invalid file address");
       } else {
@@ -485,7 +485,7 @@
     break;
 
   case eValueTypeHostAddress:
-    address = m_value.ULongLong(LLDB_INVALID_ADDRESS);
+    address = m_value.ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
     address_type = eAddressTypeHost;
     if (exe_ctx) {
       Target *target = exe_ctx->GetTargetPtr();
@@ -600,7 +600,7 @@
                                 // that is using liblldb)
     {
       DataExtractor data;
-      lldb::addr_t addr = m_value.ULongLong(LLDB_INVALID_ADDRESS);
+      lldb::addr_t addr = m_value.ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
       Status error(GetValueAsData(exe_ctx, data, nullptr));
       if (error.Success()) {
         Scalar scalar;
@@ -676,7 +676,7 @@
   if (!module || !target || (GetValueType() != eValueTypeFileAddress))
     return;
 
-  lldb::addr_t file_addr = GetScalar().ULongLong(LLDB_INVALID_ADDRESS);
+  lldb::addr_t file_addr = GetScalar().ZExtOrTruncInt(LLDB_INVALID_ADDRESS);
   if (file_addr == LLDB_INVALID_ADDRESS)
     return;
 
Index: lldb/include/lldb/Utility/Scalar.h
===================================================================
--- lldb/include/lldb/Utility/Scalar.h
+++ lldb/include/lldb/Utility/Scalar.h
@@ -181,28 +181,17 @@
   // Access the type of the current value.
   Scalar::Type GetType() const { return m_type; }
 
-  // Returns a casted value of the current contained data without modifying the
-  // current value. FAIL_VALUE will be returned if the type of the value is
-  // void or invalid.
-  int SInt(int fail_value = 0) const;
-
-  unsigned char UChar(unsigned char fail_value = 0) const;
-
-  signed char SChar(signed char fail_value = 0) const;
-
-  unsigned short UShort(unsigned short fail_value = 0) const;
-
-  short SShort(short fail_value = 0) const;
-
-  unsigned int UInt(unsigned int fail_value = 0) const;
-
-  long SLong(long fail_value = 0) const;
-
-  unsigned long ULong(unsigned long fail_value = 0) const;
-
-  long long SLongLong(long long fail_value = 0) const;
-
-  unsigned long long ULongLong(unsigned long long fail_value = 0) const;
+  /// Return an unsigned integer representation of this value. Integers values
+  /// will be zero-extended or truncated. Floating point values will be
+  /// converted to integers first. In case of a void type, fail_value is
+  /// returned.
+  uint64_t ZExtOrTruncInt(uint64_t fail_value = 0) const;
+
+  /// Return an signed integer representation of this value. Integers values
+  /// will be sign-extended or truncated. Floating point values will be
+  /// converted to integers first. In case of a void type, fail_value is
+  /// returned.
+  int64_t SExtOrTruncInt(int64_t fail_value = 0) const;
 
   llvm::APInt SInt128(const llvm::APInt &fail_value) const;
 
@@ -267,9 +256,6 @@
   llvm::APInt m_integer;
   llvm::APFloat m_float;
 
-  template <typename T> T GetAsSigned(T fail_value) const;
-  template <typename T> T GetAsUnsigned(T fail_value) const;
-
 private:
   friend const Scalar operator+(const Scalar &lhs, const Scalar &rhs);
   friend const Scalar operator-(const Scalar &lhs, const Scalar &rhs);
Index: lldb/include/lldb/Utility/RegisterValue.h
===================================================================
--- lldb/include/lldb/Utility/RegisterValue.h
+++ lldb/include/lldb/Utility/RegisterValue.h
@@ -110,7 +110,7 @@
     if (m_type == eTypeUInt8) {
       if (success_ptr)
         *success_ptr = true;
-      return m_scalar.UChar(fail_value);
+      return m_scalar.ZExtOrTruncInt(fail_value);
     }
     if (success_ptr)
       *success_ptr = true;
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
  • [Lldb-commits] [PATCH]... Pavel Labath via Phabricator via lldb-commits

Reply via email to