@@ -13,13 +13,17 @@ struct Variadic<each T> {
1313 struct Nested < U, each V : Equatable > { }
1414}
1515
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(
1824 _ descriptor: UnsafeRawPointer ,
1925 _ genericArgs: UnsafeRawPointer ,
20- _ genericArgsSize: UInt ,
21- _ packCounts: UnsafeRawPointer ? ,
22- _ packCountsSize: UInt
26+ _ genericArgsSize: UInt
2327) -> Any . Type ?
2428
2529func metaPointer( _ x: Any . Type ) -> UnsafeRawPointer {
@@ -39,12 +43,10 @@ testSuite.test("_swift_checkedCreateType non-variadic") {
3943 let dictGenericArgs : [ Any . Type ] = [ String . self, Double . self]
4044
4145 dictGenericArgs. withUnsafeBufferPointer {
42- let newDict = _checkedCreateType (
46+ let newDict = _instantiateCheckedGenericMetadata (
4347 dictDesc,
4448 UnsafeRawPointer ( $0. baseAddress!) ,
45- UInt ( $0. count) ,
46- nil ,
47- 0
49+ UInt ( $0. count)
4850 )
4951
5052 expectTrue ( newDict == [ String : Double ] . self)
@@ -62,23 +64,22 @@ testSuite.test("_swift_checkedCreateType variadic") {
6264 )
6365
6466 let variPack : [ Any . Type ] = [ Int . self, Int8 . self, UInt8 . self]
65- let variPackCounts : [ Int32 ] = [ 3 ]
6667
6768 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]
6974
7075 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+ )
7981
80- expectTrue ( newVari == Variadic< Int, Int8, UInt8> . self )
81- }
82+ expectTrue ( newVari == Variadic< Int, Int8, UInt8> . self )
8283 }
8384 }
8485}
@@ -100,26 +101,26 @@ testSuite.test("_swift_checkedCreateType variadic nested with requirements") {
100101 nestedPack. withUnsafeBufferPointer { nestedPack in
101102 variPack. withUnsafeBufferPointer { variPack in
102103 let nestedGenericArgs = [
103- UnsafeRawPointer ( variPack. baseAddress!) ,
104+ allocateMetadataPack (
105+ UnsafeRawPointer ( variPack. baseAddress!) ,
106+ UInt ( variPack. count)
107+ ) ,
104108 metaPointer ( Int16 . self) ,
105- UnsafeRawPointer ( nestedPack. baseAddress!)
109+ allocateMetadataPack (
110+ UnsafeRawPointer ( nestedPack. baseAddress!) ,
111+ UInt ( nestedPack. count)
112+ )
106113 ]
107114
108115 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 )
123124 }
124125 }
125126 }
0 commit comments