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(
13751375 BridgedDeclNameRef cOriginalName, BridgedDeclNameLoc cOriginalNameLoc,
13761376 BridgedArrayRef cParams);
13771377
1378+ SWIFT_NAME (" BridgedTypeEraserAttr.createParsed(_:atLoc:range:typeExpr:)" )
1379+ BridgedTypeEraserAttr BridgedTypeEraserAttr_createParsed(
1380+ BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
1381+ BridgedSourceRange cRange, BridgedTypeExpr cTypeExpr);
1382+
13781383SWIFT_NAME (
13791384 " BridgedUnavailableFromAsyncAttr.createParsed(_:atLoc:range:message:)" )
13801385BridgedUnavailableFromAsyncAttr BridgedUnavailableFromAsyncAttr_createParsed(
Original file line number Diff line number Diff line change @@ -867,6 +867,15 @@ BridgedTransposeAttr BridgedTransposeAttr_createParsed(
867867 params);
868868}
869869
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+
870879BridgedUnavailableFromAsyncAttr BridgedUnavailableFromAsyncAttr_createParsed (
871880 BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
872881 BridgedSourceRange cRange, BridgedStringRef cMessage) {
Original file line number Diff line number Diff line change @@ -190,7 +190,7 @@ extension ASTGenVisitor {
190190 case . transpose:
191191 return handle ( self . generateTransposeAttr ( attribute: node) ? . asDeclAttribute)
192192 case . typeEraser:
193- fatalError ( " unimplemented " )
193+ return handle ( self . generateTypeEraserAttr ( attribute : node ) ? . asDeclAttribute )
194194 case . unavailableFromAsync:
195195 return handle ( self . generateUnavailableFromAsyncAttr ( attribute: node) ? . asDeclAttribute)
196196 case . reasync:
@@ -2124,6 +2124,33 @@ extension ASTGenVisitor {
21242124 )
21252125 }
21262126
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+
21272154 /// E.g.:
21282155 /// ```
21292156 /// @_unavailableFromAsync
Original file line number Diff line number Diff line change @@ -259,3 +259,8 @@ struct LayoutOuter {
259259@rethrows protocol RethrowingProtocol {
260260 func source( ) throws
261261}
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