Avatar
norio_nomura 8/2/2019 5:24 AM
  • __TEXT,__swift5_protoセクションにprotocol conformance descriptorへのポインタが列挙されてる。
  • protocol conformance descriptorには以下 が含まれる。
    • protocol descriptorプロトコル
    • nominal type descriptorそのプロトコルに準拠する型。メタデータとは別
    • witness tableその型がプロトコル準拠するに必要なwitness一覧
  • nominal type descriptorにはメタデータへのポインタが含まれる。
これらのデータを元に、swift_conformsToSwiftProtocolは渡されたメタデータが準拠するプロトコル情報を探してきてくれる。実装はこちら。 https://github.com/apple/swift/blob/swift-5.1-branch/stdlib/public/runtime/ProtocolConformance.cpp#L544-L608
(edited)
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
5:28 AM
* frame #0: 0x00000001012f3d13 libswiftCore.dylib`swift_conformsToSwiftProtocolImpl(… frame #1: 0x00000001012f3a56 libswiftCore.dylib`swift_conformsToProtocol [inlined]… frame #2: 0x00000001012f3a11 libswiftCore.dylib`swift_conformsToProtocol [inlined]… frame #3: 0x00000001012f3a11 libswiftCore.dylib`swift_conformsToProtocol… frame #4: 0x00000001012c4efa libswiftCore.dylib`swift::_conformsToProtocol… frame #5: 0x00000001012c8e07 libswiftCore.dylib`_conformsToProtocols… frame #6: 0x00000001012c849e libswiftCore.dylib`_dynamicCastToExistential(… (edited)
5:29 AM
これならば、witness tableへのポインタ持ちたくもなる。