66// Copyright © 2019 MJ Lee. All rights reserved.
77//
88
9+ import Foundation
10+
11+ struct FieldRecord {
12+ let flags : Int32
13+ var _mangledTypeName : RelativeDirectPointer < UInt8 >
14+ var _fieldName : RelativeDirectPointer < UInt8 >
15+ var isVar : Bool { return ( flags & 0x2 ) == 0x2 }
16+ mutating func fieldName( ) -> String { return String ( cString: _fieldName. advanced ( ) ) }
17+ mutating func mangledTypeName( ) -> String { return String ( cString: _mangledTypeName. advanced ( ) ) }
18+
19+ mutating func type( _ genericContext: UnsafeRawPointer ? ,
20+ _ genericArguments: UnsafeRawPointer ? ) -> Any . Type {
21+ let name = _mangledTypeName. advanced ( )
22+ let nameLength = UInt ( strlen ( name ~>> UnsafePointer< Int8> . self ) )
23+ return _getTypeByMangledNameInContext (
24+ name,
25+ nameLength,
26+ genericContext,
27+ genericArguments
28+ ) !
29+ }
30+ }
31+
932struct FieldDescriptor {
1033 let mangledTypeName : RelativeDirectPointer < CChar >
1134 let superclass : RelativeDirectPointer < CChar >
@@ -29,43 +52,8 @@ enum FieldDescriptorKind: UInt16 {
2952
3053@_silgen_name ( " swift_getTypeByMangledNameInContext " )
3154private func _getTypeByMangledNameInContext(
32- _ name: UnsafePointer < UInt8 > ,
33- _ nameLength: UInt ,
34- _ genericContext: UnsafeRawPointer ? ,
35- _ genericArguments: UnsafeRawPointer ? )
36- -> Any . Type ?
37-
38- struct FieldRecord {
39- let flags : Int32
40- var _mangledTypeName : RelativeDirectPointer < UInt8 >
41- var _fieldName : RelativeDirectPointer < UInt8 >
42- var isVar : Bool { return ( flags & 0x2 ) == 0x2 }
43- mutating func fieldName( ) -> String { return String ( cString: _fieldName. advanced ( ) ) }
44- mutating func mangledTypeName( ) -> String { return String ( cString: _mangledTypeName. advanced ( ) ) }
45-
46- mutating func type( _ genericContext: UnsafeRawPointer ? ,
47- _ genericArguments: UnsafeRawPointer ? ) -> Any . Type {
48- let typeName = _mangledTypeName. advanced ( )
49- return _getTypeByMangledNameInContext (
50- typeName,
51- nameLength ( typeName) ,
52- genericContext,
53- genericArguments
54- ) !
55- }
56-
57- func nameLength( _ begin: UnsafeRawPointer ) -> UInt {
58- var end = begin
59- while true {
60- let cur = end. load ( as: UInt8 . self)
61- if cur == 0 { break }
62- if cur >= 0x1 && cur <= 0x17 {
63- end += 4
64- } else if cur >= 0x18 && cur <= 0x1F {
65- end += MemoryLayout< Int> . size
66- }
67- end += 1
68- }
69- return UInt ( end - begin)
70- }
71- }
55+ _ name: UnsafePointer < UInt8 > ,
56+ _ nameLength: UInt ,
57+ _ genericContext: UnsafeRawPointer ? ,
58+ _ genericArguments: UnsafeRawPointer ? )
59+ -> Any . Type ?
0 commit comments