1313import ASTBridging
1414
1515@_spi ( ExperimentalLanguageFeatures)
16+ @_spi ( RawSyntax)
1617import SwiftSyntax
1718
1819extension ASTGenVisitor {
@@ -95,30 +96,8 @@ extension ASTGenVisitor {
9596 case . type( let type) :
9697 return self . generate ( type: type)
9798
98- // The only expressions same type left types support right now are
99- // integer literals, '123', and prefix operators for negative integer
100- // literals, '-123'.
10199 case . expr( let expr) :
102- switch expr. as ( ExprSyntaxEnum . self) {
103- case . integerLiteralExpr( let node) :
104- return self . generate ( integerType: node)
105-
106- case . prefixOperatorExpr( let node) :
107- let op = node. operator
108-
109- guard op. text == " - " else {
110- fatalError ( " Unknown prefix operator for same type left type " )
111- }
112-
113- guard case . integerLiteralExpr( let node) = node. expression. as ( ExprSyntaxEnum . self) else {
114- fatalError ( " Unknown expression kind for same type left type " )
115- }
116-
117- return self . generate ( integerType: node, minusLoc: self . generateSourceLoc ( op) )
118-
119- default :
120- fatalError ( " Unknown expression kind for same type left type " )
121- }
100+ return self . generateIntegerType ( expr: expr) . asTypeRepr
122101 }
123102 }
124103
@@ -127,30 +106,8 @@ extension ASTGenVisitor {
127106 case . type( let type) :
128107 return self . generate ( type: type)
129108
130- // The only expressions same type right types support right now are
131- // integer literals, '123', and prefix operators for negative integer
132- // literals, '-123'.
133109 case . expr( let expr) :
134- switch expr. as ( ExprSyntaxEnum . self) {
135- case . integerLiteralExpr( let node) :
136- return self . generate ( integerType: node)
137-
138- case . prefixOperatorExpr( let node) :
139- let op = node. operator
140-
141- guard op. text == " - " else {
142- fatalError ( " Unknown prefix operator for same type right type " )
143- }
144-
145- guard case . integerLiteralExpr( let node) = node. expression. as ( ExprSyntaxEnum . self) else {
146- fatalError ( " Unknown expression kind for same type right type " )
147- }
148-
149- return self . generate ( integerType: node, minusLoc: self . generateSourceLoc ( op) )
150-
151- default :
152- fatalError ( " Unknown expression kind for same type right type " )
153- }
110+ return self . generateIntegerType ( expr: expr) . asTypeRepr
154111 }
155112 }
156113
@@ -159,47 +116,45 @@ extension ASTGenVisitor {
159116 case . type( let type) :
160117 return self . generate ( type: type)
161118
162- // The only expressions generic argument types support right now are
163- // integer literals, '123', and prefix operators for negative integer
164- // literals, '-123'.
165119 case . expr( let expr) :
166- switch expr . as ( ExprSyntaxEnum . self ) {
167- case . integerLiteralExpr ( let node ) :
168- return self . generate ( integerType : node )
120+ return self . generateIntegerType ( expr : expr ) . asTypeRepr
121+ }
122+ }
169123
170- case . prefixOperatorExpr( let node) :
171- let op = node. operator
124+ func generateIntegerType( expr node: ExprSyntax ) -> BridgedIntegerTypeRepr {
125+ var minusLoc = BridgedSourceLoc ( )
126+ let literalExpr : IntegerLiteralExprSyntax
172127
173- guard op. text == " - " else {
174- fatalError ( " Unknown prefix operator for generic argument type " )
175- }
128+ // The only expressions generic argument types support right now are
129+ // integer literals, '123', and prefix operators for negative integer
130+ // literals, '-123'.
131+ switch node. as ( ExprSyntaxEnum . self) {
132+ case . integerLiteralExpr( let node) :
133+ literalExpr = node
176134
177- guard case . integerLiteralExpr( let node) = node. expression. as ( ExprSyntaxEnum . self) else {
178- fatalError ( " Unknown expression kind for generic argument type " )
179- }
135+ case . prefixOperatorExpr( let node) :
136+ let op = node. operator
180137
181- return self . generate ( integerType: node, minusLoc: self . generateSourceLoc ( op) )
138+ guard op. text == " - " else {
139+ fatalError ( " Unknown prefix operator for generic argument type " )
140+ }
182141
183- default :
142+ guard let node = node . expression . as ( IntegerLiteralExprSyntax . self ) else {
184143 fatalError ( " Unknown expression kind for generic argument type " )
185144 }
186- }
187- }
188145
189- func generate(
190- integerType node: IntegerLiteralExprSyntax ,
191- minusLoc: BridgedSourceLoc = BridgedSourceLoc ( )
192- ) -> BridgedTypeRepr {
193- var desc = node. trimmedDescription
194- let str = desc. withBridgedString {
195- self . ctx. allocateCopy ( string: $0)
146+ minusLoc = self . generateSourceLoc ( op)
147+ literalExpr = node
148+
149+ default :
150+ fatalError ( " Unknown expression kind for generic argument type " )
196151 }
197152
198- return BridgedIntegerTypeRepr . createParsed (
153+ return . createParsed(
199154 self . ctx,
200- string: str ,
201- loc: self . generateSourceLoc ( node ) ,
155+ string: self . copyAndStripUnderscores ( text : literalExpr . literal . rawText ) ,
156+ loc: self . generateSourceLoc ( literalExpr ) ,
202157 minusLoc: minusLoc
203- ) . asTypeRepr
158+ )
204159 }
205160}
0 commit comments