File tree Expand file tree Collapse file tree 3 files changed +43
-0
lines changed Expand file tree Collapse file tree 3 files changed +43
-0
lines changed Original file line number Diff line number Diff line change @@ -773,6 +773,22 @@ extension Parser {
773
773
}
774
774
}
775
775
776
+ extension Parser {
777
+ mutating func parseOpaqueReturnTypeOfAttributeArguments( ) -> RawOpaqueReturnTypeOfAttributeArgumentsSyntax {
778
+ let ( unexpectedBeforeString, mangledName) = self . expect ( . stringLiteral)
779
+ let ( unexpectedBeforeComma, comma) = self . expect ( . comma)
780
+ let ( unexpectedBeforeOrdinal, ordinal) = self . expect ( . integerLiteral)
781
+ return RawOpaqueReturnTypeOfAttributeArgumentsSyntax (
782
+ unexpectedBeforeString,
783
+ mangledName: mangledName,
784
+ unexpectedBeforeComma,
785
+ comma: comma,
786
+ unexpectedBeforeOrdinal,
787
+ ordinal: ordinal,
788
+ arena: self . arena)
789
+ }
790
+ }
791
+
776
792
// MARK: Lookahead
777
793
778
794
extension Parser . Lookahead {
Original file line number Diff line number Diff line change @@ -820,6 +820,26 @@ extension Parser {
820
820
arena: self . arena
821
821
)
822
822
)
823
+ case . _opaqueReturnTypeOf:
824
+ let ( unexpectedBeforeAt, at) = self . expect ( . atSign)
825
+ let ident = self . expectIdentifierWithoutRecovery ( )
826
+ let ( unexpectedBeforeLeftParen, leftParen) = self . expect ( . leftParen)
827
+ let argument = self . parseOpaqueReturnTypeOfAttributeArguments ( )
828
+ let ( unexpectedBeforeRightParen, rightParen) = self . expect ( . rightParen)
829
+ return RawSyntax (
830
+ RawAttributeSyntax (
831
+ unexpectedBeforeAt,
832
+ atSignToken: at,
833
+ attributeName: ident,
834
+ unexpectedBeforeLeftParen,
835
+ leftParen: leftParen,
836
+ argument: RawSyntax ( argument) ,
837
+ unexpectedBeforeRightParen,
838
+ rightParen: rightParen,
839
+ tokenList: nil ,
840
+ arena: self . arena
841
+ )
842
+ )
823
843
824
844
default :
825
845
let ( unexpectedBeforeAt, at) = self . expect ( . atSign)
Original file line number Diff line number Diff line change @@ -59,4 +59,11 @@ final class TypeTests: XCTestCase {
59
59
DiagnosticSpec ( message: " Unexpected text '`' found in closure capture signature " )
60
60
] )
61
61
}
62
+
63
+ func testOpaqueReturnTypes( ) throws {
64
+ AssertParse ( """
65
+ public typealias Body = @_opaqueReturnTypeOf( " $s6CatKit10pspspspspsV5cmereV6lilguyQrvp " , 0) __
66
+ """ )
67
+ }
62
68
}
69
+
You can’t perform that action at this time.
0 commit comments