Skip to content

Commit f983d85

Browse files
Merge pull request #32094 from adrian-prantl/demangler-hide-objc
Add a demangler option to hide the "__C" module name.
2 parents ec60746 + fe93b19 commit f983d85

File tree

5 files changed

+39
-6
lines changed

5 files changed

+39
-6
lines changed

include/swift/Demangling/Demangle.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ std::string genericParameterName(uint64_t depth, uint64_t index);
4242
/// Display style options for the demangler.
4343
struct DemangleOptions {
4444
bool SynthesizeSugarOnTypes = false;
45-
bool DisplayDebuggerGeneratedModule = true;
4645
bool QualifyEntities = true;
4746
bool DisplayExtensionContexts = true;
4847
bool DisplayUnmangledSuffix = true;
@@ -57,6 +56,9 @@ struct DemangleOptions {
5756
bool ShortenArchetype = false;
5857
bool ShowPrivateDiscriminators = true;
5958
bool ShowFunctionArgumentTypes = true;
59+
bool DisplayDebuggerGeneratedModule = true;
60+
bool DisplayStdlibModule = true;
61+
bool DisplayObjCModule = true;
6062
std::function<std::string(uint64_t, uint64_t)> GenericParameterName =
6163
genericParameterName;
6264

lib/Demangling/NodePrinter.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,13 @@ class NodePrinter {
243243
if (!Options.QualifyEntities)
244244
return false;
245245

246-
if (Context->getKind() == Node::Kind::Module &&
247-
Context->getText().startswith(LLDB_EXPRESSIONS_MODULE_NAME_PREFIX)) {
248-
return Options.DisplayDebuggerGeneratedModule;
246+
if (Context->getKind() == Node::Kind::Module) {
247+
if (Context->getText() == swift::STDLIB_NAME)
248+
return Options.DisplayStdlibModule;
249+
if (Context->getText() == swift::MANGLING_MODULE_OBJC)
250+
return Options.DisplayObjCModule;
251+
if (Context->getText().startswith(LLDB_EXPRESSIONS_MODULE_NAME_PREFIX))
252+
return Options.DisplayDebuggerGeneratedModule;
249253
}
250254
return true;
251255
}
@@ -1947,8 +1951,8 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) {
19471951
printChildren(type_list, " & ");
19481952
Printer << " & ";
19491953
}
1950-
if (Options.QualifyEntities)
1951-
Printer << "Swift.";
1954+
if (Options.QualifyEntities && Options.DisplayStdlibModule)
1955+
Printer << swift::STDLIB_NAME << ".";
19521956
Printer << "AnyObject";
19531957
return nullptr;
19541958
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
RUN: swift-demangle -display-stdlib-module=true sSi | %FileCheck %s --check-prefix=SWIFT-INT
2+
SWIFT-INT: {{ Swift.Int$}}
3+
RUN: swift-demangle -display-stdlib-module=false sSi | %FileCheck %s --check-prefix=INT
4+
INT: {{ Int$}}
5+
6+
RUN: swift-demangle -display-objc-module=true sSo6CGRectVD | %FileCheck %s --check-prefix=OBJC-CGRECT
7+
OBJC-CGRECT: {{ __C.CGRect$}}
8+
RUN: swift-demangle -display-objc-module=false sSo6CGRectVD | %FileCheck %s --check-prefix=CGRECT
9+
CGRECT: {{ CGRect$}}

test/Demangle/lit.local.cfg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# suffixes: A list of file extensions to treat as test files.
2+
config.suffixes.add('.test')

tools/swift-demangle/swift-demangle.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,20 @@ static llvm::cl::opt<bool>
7474
Classify("classify",
7575
llvm::cl::desc("Display symbol classification characters"));
7676

77+
/// Options that are primarily used for testing.
78+
/// \{
79+
static llvm::cl::opt<bool> DisplayStdlibModule(
80+
"display-stdlib-module", llvm::cl::init(true),
81+
llvm::cl::desc("Qualify types originating from the Swift standard library"),
82+
llvm::cl::Hidden);
83+
84+
static llvm::cl::opt<bool> DisplayObjCModule(
85+
"display-objc-module", llvm::cl::init(true),
86+
llvm::cl::desc("Qualify types originating from the __ObjC module"),
87+
llvm::cl::Hidden);
88+
/// \}
89+
90+
7791
static llvm::cl::list<std::string>
7892
InputNames(llvm::cl::Positional, llvm::cl::desc("[mangled name...]"),
7993
llvm::cl::ZeroOrMore);
@@ -233,6 +247,8 @@ int main(int argc, char **argv) {
233247
options.SynthesizeSugarOnTypes = !DisableSugar;
234248
if (Simplified)
235249
options = swift::Demangle::DemangleOptions::SimplifiedUIDemangleOptions();
250+
options.DisplayStdlibModule = DisplayStdlibModule;
251+
options.DisplayObjCModule = DisplayObjCModule;
236252

237253
if (InputNames.empty()) {
238254
CompactMode = true;

0 commit comments

Comments
 (0)