File tree Expand file tree Collapse file tree 4 files changed +47
-1
lines changed Expand file tree Collapse file tree 4 files changed +47
-1
lines changed Original file line number Diff line number Diff line change @@ -1375,6 +1375,11 @@ BridgedTransposeAttr BridgedTransposeAttr_createParsed(
1375
1375
BridgedDeclNameRef cOriginalName, BridgedDeclNameLoc cOriginalNameLoc,
1376
1376
BridgedArrayRef cParams);
1377
1377
1378
+ SWIFT_NAME (" BridgedTypeEraserAttr.createParsed(_:atLoc:range:typeExpr:)" )
1379
+ BridgedTypeEraserAttr BridgedTypeEraserAttr_createParsed(
1380
+ BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
1381
+ BridgedSourceRange cRange, BridgedTypeExpr cTypeExpr);
1382
+
1378
1383
SWIFT_NAME (
1379
1384
" BridgedUnavailableFromAsyncAttr.createParsed(_:atLoc:range:message:)" )
1380
1385
BridgedUnavailableFromAsyncAttr BridgedUnavailableFromAsyncAttr_createParsed(
Original file line number Diff line number Diff line change @@ -867,6 +867,15 @@ BridgedTransposeAttr BridgedTransposeAttr_createParsed(
867
867
params);
868
868
}
869
869
870
+ BridgedTypeEraserAttr BridgedTypeEraserAttr_createParsed (
871
+ BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
872
+ BridgedSourceRange cRange, BridgedTypeExpr cTypeExpr
873
+
874
+ ) {
875
+ return TypeEraserAttr::create (cContext.unbridged (), cAtLoc.unbridged (),
876
+ cRange.unbridged (), cTypeExpr.unbridged ());
877
+ }
878
+
870
879
BridgedUnavailableFromAsyncAttr BridgedUnavailableFromAsyncAttr_createParsed (
871
880
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
872
881
BridgedSourceRange cRange, BridgedStringRef cMessage) {
Original file line number Diff line number Diff line change @@ -190,7 +190,7 @@ extension ASTGenVisitor {
190
190
case . transpose:
191
191
return handle ( self . generateTransposeAttr ( attribute: node) ? . asDeclAttribute)
192
192
case . typeEraser:
193
- fatalError ( " unimplemented " )
193
+ return handle ( self . generateTypeEraserAttr ( attribute : node ) ? . asDeclAttribute )
194
194
case . unavailableFromAsync:
195
195
return handle ( self . generateUnavailableFromAsyncAttr ( attribute: node) ? . asDeclAttribute)
196
196
case . reasync:
@@ -2124,6 +2124,33 @@ extension ASTGenVisitor {
2124
2124
)
2125
2125
}
2126
2126
2127
+ /// E.g.:
2128
+ /// ```
2129
+ /// @_typeEraser(MyProtocol)
2130
+ /// ```
2131
+ func generateTypeEraserAttr( attribute node: AttributeSyntax ) -> BridgedTypeEraserAttr ? {
2132
+ // FIXME: Should be normal LabeledExprListSyntax arguments.
2133
+ // FIXME: Error handling
2134
+ let type : BridgedTypeRepr ? = self . generateSingleAttrOption ( attribute: node, { token in
2135
+ let nameLoc = self . generateIdentifierAndSourceLoc ( token)
2136
+ return BridgedUnqualifiedIdentTypeRepr . createParsed (
2137
+ self . ctx,
2138
+ loc: nameLoc. sourceLoc,
2139
+ name: nameLoc. identifier
2140
+ ) . asTypeRepr
2141
+ } )
2142
+ guard let type else {
2143
+ return nil
2144
+ }
2145
+
2146
+ return . createParsed(
2147
+ self . ctx,
2148
+ atLoc: self . generateSourceLoc ( node. atSign) ,
2149
+ range: self . generateAttrSourceRange ( node) ,
2150
+ typeExpr: . createParsed( self . ctx, type: type)
2151
+ )
2152
+ }
2153
+
2127
2154
/// E.g.:
2128
2155
/// ```
2129
2156
/// @_unavailableFromAsync
Original file line number Diff line number Diff line change @@ -259,3 +259,8 @@ struct LayoutOuter {
259
259
@rethrows protocol RethrowingProtocol {
260
260
func source( ) throws
261
261
}
262
+
263
+ @_typeEraser ( AnyEraser) protocol EraserProto { }
264
+ struct AnyEraser : EraserProto {
265
+ init < T: EraserProto > ( erasing: T ) { }
266
+ }
You can’t perform that action at this time.
0 commit comments