@@ -13,13 +13,17 @@ struct Variadic<each T> {
13
13
struct Nested < U, each V : Equatable > { }
14
14
}
15
15
16
- @_silgen_name ( " _swift_checkedCreateType " )
17
- func _checkedCreateType(
16
+ @_silgen_name ( " swift_allocateMetadataPack " )
17
+ func allocateMetadataPack(
18
+ _ packPointer: UnsafeRawPointer ,
19
+ _ packCount: UInt
20
+ ) -> UnsafeRawPointer
21
+
22
+ @_silgen_name ( " _swift_instantiateCheckedGenericMetadata " )
23
+ func _instantiateCheckedGenericMetadata(
18
24
_ descriptor: UnsafeRawPointer ,
19
25
_ genericArgs: UnsafeRawPointer ,
20
- _ genericArgsSize: UInt ,
21
- _ packCounts: UnsafeRawPointer ? ,
22
- _ packCountsSize: UInt
26
+ _ genericArgsSize: UInt
23
27
) -> Any . Type ?
24
28
25
29
func metaPointer( _ x: Any . Type ) -> UnsafeRawPointer {
@@ -39,12 +43,10 @@ testSuite.test("_swift_checkedCreateType non-variadic") {
39
43
let dictGenericArgs : [ Any . Type ] = [ String . self, Double . self]
40
44
41
45
dictGenericArgs. withUnsafeBufferPointer {
42
- let newDict = _checkedCreateType (
46
+ let newDict = _instantiateCheckedGenericMetadata (
43
47
dictDesc,
44
48
UnsafeRawPointer ( $0. baseAddress!) ,
45
- UInt ( $0. count) ,
46
- nil ,
47
- 0
49
+ UInt ( $0. count)
48
50
)
49
51
50
52
expectTrue ( newDict == [ String : Double ] . self)
@@ -62,23 +64,22 @@ testSuite.test("_swift_checkedCreateType variadic") {
62
64
)
63
65
64
66
let variPack : [ Any . Type ] = [ Int . self, Int8 . self, UInt8 . self]
65
- let variPackCounts : [ Int32 ] = [ 3 ]
66
67
67
68
variPack. withUnsafeBufferPointer { pack in
68
- let genericArgs = [ UnsafeRawPointer ( pack. baseAddress!) ]
69
+ let packPointer = allocateMetadataPack (
70
+ UnsafeRawPointer ( pack. baseAddress!) ,
71
+ UInt ( pack. count)
72
+ )
73
+ let genericArgs = [ packPointer]
69
74
70
75
genericArgs. withUnsafeBufferPointer { genericArgs in
71
- variPackCounts. withUnsafeBufferPointer { packCounts in
72
- let newVari = _checkedCreateType (
73
- variDesc,
74
- UnsafeRawPointer ( genericArgs. baseAddress!) ,
75
- UInt ( genericArgs. count) ,
76
- UnsafeRawPointer ( packCounts. baseAddress!) ,
77
- UInt ( packCounts. count)
78
- )
76
+ let newVari = _instantiateCheckedGenericMetadata (
77
+ variDesc,
78
+ UnsafeRawPointer ( genericArgs. baseAddress!) ,
79
+ UInt ( genericArgs. count)
80
+ )
79
81
80
- expectTrue ( newVari == Variadic< Int, Int8, UInt8> . self )
81
- }
82
+ expectTrue ( newVari == Variadic< Int, Int8, UInt8> . self )
82
83
}
83
84
}
84
85
}
@@ -100,26 +101,26 @@ testSuite.test("_swift_checkedCreateType variadic nested with requirements") {
100
101
nestedPack. withUnsafeBufferPointer { nestedPack in
101
102
variPack. withUnsafeBufferPointer { variPack in
102
103
let nestedGenericArgs = [
103
- UnsafeRawPointer ( variPack. baseAddress!) ,
104
+ allocateMetadataPack (
105
+ UnsafeRawPointer ( variPack. baseAddress!) ,
106
+ UInt ( variPack. count)
107
+ ) ,
104
108
metaPointer ( Int16 . self) ,
105
- UnsafeRawPointer ( nestedPack. baseAddress!)
109
+ allocateMetadataPack (
110
+ UnsafeRawPointer ( nestedPack. baseAddress!) ,
111
+ UInt ( nestedPack. count)
112
+ )
106
113
]
107
114
108
115
nestedGenericArgs. withUnsafeBufferPointer { nestedGenericArgs in
109
- // 3 for each T, -1 for U, and 3 for each V
110
- let nestedPackCounts : [ Int32 ] = [ 3 , - 1 , 3 ]
111
-
112
- nestedPackCounts. withUnsafeBufferPointer { nestedPackCounts in
113
- let newNested = _checkedCreateType (
114
- nestedDesc,
115
- UnsafeRawPointer ( nestedGenericArgs. baseAddress!) ,
116
- UInt ( nestedGenericArgs. count) ,
117
- UnsafeRawPointer ( nestedPackCounts. baseAddress!) ,
118
- UInt ( nestedPackCounts. count)
119
- )
120
-
121
- expectTrue ( newNested == Variadic< String, [ Int] , UInt64> . Nested< Int16, Int, Substring, Bool> . self )
122
- }
116
+
117
+ let newNested = _instantiateCheckedGenericMetadata (
118
+ nestedDesc,
119
+ UnsafeRawPointer ( nestedGenericArgs. baseAddress!) ,
120
+ UInt ( nestedGenericArgs. count)
121
+ )
122
+
123
+ expectTrue ( newNested == Variadic< String, [ Int] , UInt64> . Nested< Int16, Int, Substring, Bool> . self )
123
124
}
124
125
}
125
126
}
0 commit comments