7
7
// ID: A96961F3546506F21D8995C6092F15B5
8
8
9
9
internal import OpenGraphShims
10
+ internal import COpenSwiftUI
10
11
11
12
@frozen
12
13
public struct AnyView : PrimitiveView {
@@ -30,7 +31,23 @@ public struct AnyView: PrimitiveView {
30
31
view = AnyView ( value as! V )
31
32
}
32
33
}
33
- fatalError ( " TODO " )
34
+ guard let conformace = TypeConformance < ViewDescriptor > ( type ( of: value) ) else {
35
+ return nil
36
+ }
37
+ // FIXME: pass a structure like the following to _OpenSwiftUI_callVisitViewType1 and remove _OpenSwiftUI_callVisitViewType
38
+ // x0 = pointer
39
+ // x1 = View.self
40
+ // x2 = PWT V: View.self
41
+ // pointer+0x0 -> pointer+0x18
42
+ // pointer+0x8 -> Visitor.self
43
+ // pointer+0x10 -> PWT Visitor: ViewTypeVisitor
44
+ // pointer+0x18~0x37 -> visitor.value
45
+ // pointer+0x38 -> visitor.view
46
+ var visitor : any ViewTypeVisitor = Visitor ( value: value)
47
+ withUnsafeMutablePointer ( to: & visitor) { value in
48
+ _OpenSwiftUI_callVisitViewType1 ( value, conformace. metadata, conformace. conformance)
49
+ }
50
+ self = ( visitor as! Visitor ) . view!
34
51
}
35
52
36
53
init < V: View > ( _ view: V , id: UniqueID ? ) {
@@ -226,3 +243,12 @@ private struct AnyViewChildList<V: View> {
226
243
@Attribute var view : AnyView
227
244
var id : UniqueID ?
228
245
}
246
+
247
+ @_silgen_name ( " _OpenSwiftUI_callVisitViewType1 " )
248
+ func visitViewType( _ visitor: UnsafeMutablePointer < any ViewTypeVisitor > , type: UnsafeRawPointer , pwt: UnsafeRawPointer )
249
+
250
+ // Called by _OpenSwiftUI_callVisitViewType2 as a temporary workaround implementation
251
+ @_silgen_name( " _OpenSwiftUI_callVisitViewType" )
252
+ func visit< V: View> ( _ visitor: UnsafeMutablePointer < any ViewTypeVisitor > , type: V . Type ) {
253
+ visitor. pointee. visit ( type: V . self)
254
+ }
0 commit comments