13
13
import ASTBridging
14
14
15
15
@_spi ( ExperimentalLanguageFeatures)
16
+ @_spi ( RawSyntax)
16
17
import SwiftSyntax
17
18
18
19
extension ASTGenVisitor {
@@ -95,30 +96,8 @@ extension ASTGenVisitor {
95
96
case . type( let type) :
96
97
return self . generate ( type: type)
97
98
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'.
101
99
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
122
101
}
123
102
}
124
103
@@ -127,30 +106,8 @@ extension ASTGenVisitor {
127
106
case . type( let type) :
128
107
return self . generate ( type: type)
129
108
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'.
133
109
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
154
111
}
155
112
}
156
113
@@ -159,47 +116,45 @@ extension ASTGenVisitor {
159
116
case . type( let type) :
160
117
return self . generate ( type: type)
161
118
162
- // The only expressions generic argument types support right now are
163
- // integer literals, '123', and prefix operators for negative integer
164
- // literals, '-123'.
165
119
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
+ }
169
123
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
172
127
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
176
134
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
180
137
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
+ }
182
141
183
- default :
142
+ guard let node = node . expression . as ( IntegerLiteralExprSyntax . self ) else {
184
143
fatalError ( " Unknown expression kind for generic argument type " )
185
144
}
186
- }
187
- }
188
145
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 " )
196
151
}
197
152
198
- return BridgedIntegerTypeRepr . createParsed (
153
+ return . createParsed(
199
154
self . ctx,
200
- string: str ,
201
- loc: self . generateSourceLoc ( node ) ,
155
+ string: self . copyAndStripUnderscores ( text : literalExpr . literal . rawText ) ,
156
+ loc: self . generateSourceLoc ( literalExpr ) ,
202
157
minusLoc: minusLoc
203
- ) . asTypeRepr
158
+ )
204
159
}
205
160
}
0 commit comments