Skip to content

Commit 15f9d49

Browse files
add function name syntax highlighting in Swift backtraces
1 parent 2210f33 commit 15f9d49

File tree

14 files changed

+1777
-92
lines changed

14 files changed

+1777
-92
lines changed

lldb/.clang-format-ignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
source/Plugins/Language/CPlusPlus/LanguageCPlusPlusProperties.td
2+
source/Plugins/Language/Swift/LanguageSwiftProperties.td

lldb/include/lldb/Core/DemangledNameInfo.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ struct DemangledNameInfo {
7373
bool hasBasename() const {
7474
return BasenameRange.second > BasenameRange.first;
7575
}
76+
77+
/// Returns \c true if this object holds a valid arguments range.
78+
bool hasArguments() const {
79+
return ArgumentsRange.second > ArgumentsRange.first;
80+
}
7681
};
7782

7883
/// An OutputBuffer which keeps a record of where certain parts of a

lldb/include/lldb/Core/PluginManager.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,14 @@ class PluginManager {
610610
static bool CreateSettingForCPlusPlusLanguagePlugin(
611611
Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
612612
llvm::StringRef description, bool is_global_property);
613+
614+
static lldb::OptionValuePropertiesSP
615+
GetSettingForSwiftLanguagePlugin(Debugger &debugger,
616+
llvm::StringRef setting_name);
617+
618+
static bool CreateSettingForSwiftLanguagePlugin(
619+
Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
620+
llvm::StringRef description, bool is_global_property);
613621
};
614622

615623
} // namespace lldb_private

lldb/source/Core/Mangled.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,8 +353,16 @@ ConstString Mangled::GetDemangledNameImpl(bool force, // BEGIN SWIFT
353353
const char *mangled_name = m_mangled.GetCString();
354354
Log *log = GetLog(LLDBLog::Demangle);
355355
LLDB_LOGF(log, "demangle swift: %s", mangled_name);
356-
std::string demangled(SwiftLanguageRuntime::DemangleSymbolAsString(
357-
mangled_name, SwiftLanguageRuntime::eTypeName, sc));
356+
auto [demangled, info] =
357+
SwiftLanguageRuntime::TrackedDemangleSymbolAsString(
358+
mangled_name, SwiftLanguageRuntime::eSimplified, sc);
359+
info.PrefixRange.second =
360+
std::min(info.BasenameRange.first, info.ArgumentsRange.first);
361+
info.SuffixRange.first =
362+
std::max(info.BasenameRange.second, info.ArgumentsRange.second);
363+
info.SuffixRange.second = demangled.length();
364+
m_demangled_info.emplace(info);
365+
358366
// Don't cache the demangled name the function isn't available yet.
359367
if (!sc || !sc->function) {
360368
LLDB_LOGF(log, "demangle swift: %s -> \"%s\" (not cached)", mangled_name,

lldb/source/Core/PluginManager.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1766,6 +1766,7 @@ static constexpr llvm::StringLiteral kJITLoaderPluginName("jit-loader");
17661766
static constexpr llvm::StringLiteral
17671767
kStructuredDataPluginName("structured-data");
17681768
static constexpr llvm::StringLiteral kCPlusPlusLanguagePlugin("cplusplus");
1769+
static constexpr llvm::StringLiteral kSwiftLanguagePlugin("swift");
17691770

17701771
lldb::OptionValuePropertiesSP
17711772
PluginManager::GetSettingForDynamicLoaderPlugin(Debugger &debugger,
@@ -1937,3 +1938,17 @@ bool PluginManager::CreateSettingForCPlusPlusLanguagePlugin(
19371938
"Settings for CPlusPlus language plug-ins",
19381939
properties_sp, description, is_global_property);
19391940
}
1941+
1942+
lldb::OptionValuePropertiesSP
1943+
PluginManager::GetSettingForSwiftLanguagePlugin(Debugger &debugger,
1944+
llvm::StringRef setting_name) {
1945+
return GetSettingForPlugin(debugger, setting_name, kSwiftLanguagePlugin);
1946+
}
1947+
1948+
bool PluginManager::CreateSettingForSwiftLanguagePlugin(
1949+
Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
1950+
llvm::StringRef description, bool is_global_property) {
1951+
return CreateSettingForPlugin(debugger, kSwiftLanguagePlugin,
1952+
"Settings for Swift language plug-ins",
1953+
properties_sp, description, is_global_property);
1954+
}

lldb/source/Plugins/Language/Swift/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
lldb_tablegen(LanguageSwiftProperties.inc -gen-lldb-property-defs
2+
SOURCE LanguageSwiftProperties.td
3+
TARGET LLDBPluginLanguageSwiftPropertiesGen)
4+
5+
lldb_tablegen(LanguageSwiftPropertiesEnum.inc -gen-lldb-property-enum-defs
6+
SOURCE LanguageSwiftProperties.td
7+
TARGET LLDBPluginLanguageSwiftPropertiesEnumGen)
8+
19
set(LLVM_NO_RTTI 1)
210

311
add_lldb_library(lldbPluginSwiftLanguage PLUGIN
@@ -36,3 +44,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL Clang AND NOT SWIFT_COMPILER_MSVC_LIKE)
3644
target_compile_options(lldbPluginSwiftLanguage PRIVATE
3745
-Wno-dollar-in-identifier-extension)
3846
endif()
47+
48+
add_dependencies(lldbPluginSwiftLanguage
49+
LLDBPluginLanguageSwiftPropertiesGen
50+
LLDBPluginLanguageSwiftPropertiesEnumGen)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
include "../../../../include/lldb/Core/PropertiesBase.td"
2+
3+
let Definition = "language_swift" in {
4+
def FunctionNameFormat: Property<"function-name-format", "FormatEntity">,
5+
Global,
6+
DefaultStringValue<"${function.prefix}${ansi.fg.yellow}${function.basename}${ansi.normal}${function.formatted-arguments}${function.suffix}">,
7+
Desc<"Swift specific frame format string to use when displaying stack frame information for threads.">;
8+
}

0 commit comments

Comments
 (0)