@@ -8,7 +8,7 @@ import MachOFoundation
88@testable import MachOTestingSupport
99
1010@Suite ( . serialized)
11- final class SymbolDemangleTests : DyldCacheTests {
11+ final class DyldCacheSymbolDemangleTests : DyldCacheTests {
1212 struct MachOSwiftSymbol {
1313 let imagePath : String
1414 let offset : Int
@@ -18,23 +18,23 @@ final class SymbolDemangleTests: DyldCacheTests {
1818 @MainActor
1919 @Test func symbols( ) throws {
2020 let allSwiftSymbols = try allSymbols ( )
21- print ( " Total Swift Symbols: \( allSwiftSymbols. count) " )
21+ " Total Swift Symbols: \( allSwiftSymbols. count) " . print ( )
2222 for symbol in allSwiftSymbols {
2323 let swiftStdlibDemangledName = stdlib_demangleName ( symbol. stringValue)
2424 do {
25- guard !symbol. stringValue. hasSuffix ( " $delayInitStub " ) else { continue }
26- var demangler = Demangler ( scalars: symbol. stringValue. unicodeScalars)
27- let node = try demangler. demangleSymbol ( )
25+ let node = try demangleAsNode ( symbol. stringValue)
2826 let swiftSectionDemanlgedName = node. print ( )
2927 #expect( swiftStdlibDemangledName == swiftSectionDemanlgedName, " \( symbol. stringValue) " )
3028 } catch {
3129 #expect( symbol. stringValue == swiftStdlibDemangledName)
30+ #if !SILENT_TEST
3231 print ( symbol)
33- print ( error)
32+ #endif
33+ error. print ( )
3434 }
3535 }
3636 }
37-
37+
3838 #if !SILENT_TEST
3939 @Test func writeSwiftUISymbolsToDesktop( ) async throws {
4040 var string = " "
@@ -51,30 +51,13 @@ final class SymbolDemangleTests: DyldCacheTests {
5151 }
5252 try string. write ( to: . desktopDirectory. appendingPathComponent ( " \( imageName. rawValue) -SwiftSymbols.txt " ) , atomically: true , encoding: . utf8)
5353 }
54- #endif
55-
54+
5655 @Test func demangle( ) async throws {
5756 var demangler = Demangler ( scalars: " _$s6Charts10ChartProxyV5value2at2asx_q_tSgSo7CGPointV_x_q_tmtAA9PlottableRzAaJR_r0_lF " . unicodeScalars)
5857 let node = try demangler. demangleSymbol ( )
5958 node. print ( ) . print ( )
6059 }
61-
62- @Test func swiftSymbols( ) async throws {
63- let symbols = try symbols ( for: . SwiftUI)
64- for symbol in symbols {
65- var demangler = Demangler ( scalars: symbol. stringValue. unicodeScalars)
66- let node = try demangler. demangleSymbol ( )
67- if let functionNode = node. children. first, functionNode. kind == . function {
68- if let structureNode = functionNode. children. first, structureNode. kind == . structure {
69- node. print ( using: . interface) . print ( )
70- let typeNode = Node ( kind: . global) {
71- Node ( kind: . type, child: structureNode)
72- }
73- typeNode. print ( using: . interface) . print ( )
74- }
75- }
76- }
77- }
60+ #endif
7861
7962 private func symbols( for machOImageNames: MachOImageName ... ) throws -> [ MachOSwiftSymbol ] {
8063 var symbols : [ MachOSwiftSymbol ] = [ ]
@@ -108,3 +91,48 @@ final class SymbolDemangleTests: DyldCacheTests {
10891 return symbols
10992 }
11093}
94+
95+ @Suite ( . serialized)
96+ final class XcodeMachOFilesSymbolDemangleTests {
97+ struct MachOSwiftSymbol {
98+ let imagePath : String
99+ let offset : Int
100+ let stringValue : String
101+ }
102+
103+ @MainActor
104+ @Test func symbols( ) throws {
105+ let allSwiftSymbols = try allSymbols ( )
106+ " Total Swift Symbols: \( allSwiftSymbols. count) " . print ( )
107+ for symbol in allSwiftSymbols {
108+ let swiftStdlibDemangledName = stdlib_demangleName ( symbol. stringValue)
109+ do {
110+ let node = try demangleAsNode ( symbol. stringValue)
111+ let swiftSectionDemanlgedName = node. print ( )
112+ #expect( swiftStdlibDemangledName == swiftSectionDemanlgedName, " \( symbol. stringValue) " )
113+ } catch {
114+ #expect( symbol. stringValue == swiftStdlibDemangledName)
115+ #if !SILENT_TEST
116+ print ( symbol)
117+ #endif
118+ error. print ( )
119+ }
120+ }
121+ }
122+
123+ private func allSymbols( ) throws -> [ MachOSwiftSymbol ] {
124+ guard FileManager . default. fileExists ( atPath: " /Applications/Xcode.app " ) else { return [ ] }
125+ var symbols : [ MachOSwiftSymbol ] = [ ]
126+ for machOFile in try XcodeMachOFileName . allCases. compactMap ( { try File . loadFromFile ( url: . init( fileURLWithPath: $0. path) ) . machOFiles. first } ) {
127+ for symbol in machOFile. symbols where symbol. name. isSwiftSymbol {
128+ symbols. append ( MachOSwiftSymbol ( imagePath: machOFile. imagePath, offset: symbol. offset, stringValue: symbol. name) )
129+ }
130+ for symbol in machOFile. exportedSymbols where symbol. name. isSwiftSymbol {
131+ if let offset = symbol. offset {
132+ symbols. append ( MachOSwiftSymbol ( imagePath: machOFile. imagePath, offset: offset, stringValue: symbol. name) )
133+ }
134+ }
135+ }
136+ return symbols
137+ }
138+ }
0 commit comments