================
@@ -745,66 +745,62 @@ llvm::json::Value CreateThreadStopped(DAP &dap,
lldb::SBThread &thread,
return llvm::json::Value(std::move(event));
}
-const char *GetNonNullVariableName(lldb::SBValue &v) {
- const char *name = v.GetName();
- return name ? name : "<null>";
+llvm::StringRef GetNonNullVariableName(lldb::SBValue &v) {
+ const llvm::StringRef name = v.GetName();
+ return !name.empty() ? name : "<null>";
}
std::string CreateUniqueVariableNameForDisplay(lldb::SBValue &v,
bool is_name_duplicated) {
- lldb::SBStream name_builder;
- name_builder.Print(GetNonNullVariableName(v));
+ std::string unique_name{};
+ llvm::raw_string_ostream name_builder(unique_name);
+ name_builder << GetNonNullVariableName(v);
if (is_name_duplicated) {
- lldb::SBDeclaration declaration = v.GetDeclaration();
- const char *file_name = declaration.GetFileSpec().GetFilename();
+ const lldb::SBDeclaration declaration = v.GetDeclaration();
+ const llvm::StringRef file_name = declaration.GetFileSpec().GetFilename();
const uint32_t line = declaration.GetLine();
- if (file_name != nullptr && line > 0)
- name_builder.Printf(" @ %s:%u", file_name, line);
- else if (const char *location = v.GetLocation())
- name_builder.Printf(" @ %s", location);
+ if (!file_name.empty() && line != 0 && line != LLDB_INVALID_LINE_NUMBER)
+ name_builder << llvm::formatv(" @ {}:{}", file_name, line);
+ else if (llvm::StringRef location = v.GetLocation(); !location.empty())
+ name_builder << llvm::formatv(" @ {}", location);
}
- return name_builder.GetData();
-}
-
-VariableDescription::VariableDescription(lldb::SBValue v,
- bool auto_variable_summaries,
- bool format_hex,
- bool is_name_duplicated,
- std::optional<std::string>
custom_name)
- : v(v) {
- name = custom_name
- ? *custom_name
- : CreateUniqueVariableNameForDisplay(v, is_name_duplicated);
-
- type_obj = v.GetType();
- std::string raw_display_type_name =
- llvm::StringRef(type_obj.GetDisplayTypeName()).str();
+ return unique_name;
+}
+
+VariableDescription::VariableDescription(
+ lldb::SBValue val, bool auto_variable_summaries, bool format_hex,
+ bool is_name_duplicated, std::optional<llvm::StringRef> custom_name)
+ : val(val) {
+ name = custom_name.value_or(
+ CreateUniqueVariableNameForDisplay(val, is_name_duplicated));
+
+ type_obj = val.GetType();
+ llvm::StringRef raw_display_type_name = type_obj.GetDisplayTypeName();
display_type_name =
!raw_display_type_name.empty() ? raw_display_type_name : NO_TYPENAME;
// Only format hex/default if there is no existing special format.
- if (v.GetFormat() == lldb::eFormatDefault ||
- v.GetFormat() == lldb::eFormatHex) {
- if (format_hex)
- v.SetFormat(lldb::eFormatHex);
- else
- v.SetFormat(lldb::eFormatDefault);
+ if (const lldb::Format current_format = val.GetFormat();
+ current_format == lldb::eFormatDefault ||
+ current_format == lldb::eFormatHex) {
+
+ val.SetFormat(format_hex ? lldb::eFormatHex : lldb::eFormatDefault);
}
llvm::raw_string_ostream os_display_value(display_value);
- if (lldb::SBError sb_error = v.GetError(); sb_error.Fail()) {
+ if (lldb::SBError sb_error = val.GetError(); sb_error.Fail()) {
error = sb_error.GetCString();
os_display_value << "<error: " << error << ">";
} else {
- value = llvm::StringRef(v.GetValue()).str();
- summary = llvm::StringRef(v.GetSummary()).str();
+ value = val.GetValue();
+ summary = val.GetSummary();
if (summary.empty() && auto_variable_summaries)
- auto_summary = TryCreateAutoSummary(v);
+ auto_summary = TryCreateAutoSummary(val);
std::optional<std::string> effective_summary =
- !summary.empty() ? summary : auto_summary;
+ !summary.empty() ? summary.str() : auto_summary;
----------------
DrSergei wrote:
nit: `llvm::StringRef effective_summary = auto_summary ? *auto_summary :
summary` and check that `!effective_summary.empty()` below
https://github.com/llvm/llvm-project/pull/172661
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits