Skip to content

Commit 6018662

Browse files
authored
Merge pull request #76889 from rintaro/astgen-regexexpr
[ASTGen] Implement some Expr generation
2 parents f7e62d8 + 56de714 commit 6018662

File tree

9 files changed

+389
-42
lines changed

9 files changed

+389
-42
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,17 @@ SWIFT_NAME("BridgedASTContext.init(raw:)")
200200
BRIDGED_INLINE
201201
BridgedASTContext BridgedASTContext_fromRaw(void * _Nonnull ptr);
202202

203+
SWIFT_NAME("BridgedASTContext.allocate(self:size:alignment:)")
204+
BRIDGED_INLINE
205+
void *_Nullable BridgedASTContext_allocate(BridgedASTContext bridged,
206+
size_t size, size_t alignment);
207+
208+
SWIFT_NAME("BridgedASTContext.allocateCopy(self:string:)")
209+
BRIDGED_INLINE
210+
BridgedStringRef
211+
BridgedASTContext_allocateCopyString(BridgedASTContext cContext,
212+
BridgedStringRef cStr);
213+
203214
SWIFT_NAME("BridgedASTContext.getIdentifier(self:_:)")
204215
BridgedIdentifier BridgedASTContext_getIdentifier(BridgedASTContext cContext,
205216
BridgedStringRef cStr);
@@ -1310,6 +1321,16 @@ BridgedDotSelfExpr BridgedDotSelfExpr_createParsed(BridgedASTContext cContext,
13101321
BridgedSourceLoc cDotLoc,
13111322
BridgedSourceLoc cSelfLoc);
13121323

1324+
SWIFT_NAME("BridgedErrorExpr.create(_:loc:)")
1325+
BridgedErrorExpr BridgedErrorExpr_create(BridgedASTContext cContext,
1326+
BridgedSourceRange cRange);
1327+
1328+
SWIFT_NAME("BridgedFloatLiteralExpr.createParsed(_:value:loc:)")
1329+
BridgedFloatLiteralExpr
1330+
BridgedFloatLiteralExpr_createParsed(BridgedASTContext cContext,
1331+
BridgedStringRef cStr,
1332+
BridgedSourceLoc cTokenLoc);
1333+
13131334
SWIFT_NAME("BridgedForceTryExpr.createParsed(_:tryLoc:subExpr:exclaimLoc:)")
13141335
BridgedForceTryExpr
13151336
BridgedForceTryExpr_createParsed(BridgedASTContext cContext,
@@ -1322,6 +1343,18 @@ BridgedForcedCheckedCastExpr BridgedForcedCheckedCastExpr_createParsed(
13221343
BridgedASTContext cContext, BridgedSourceLoc cAsLoc,
13231344
BridgedSourceLoc cExclaimLoc, BridgedTypeRepr cType);
13241345

1346+
SWIFT_NAME("BridgedUnresolvedSpecializeExpr.createParsed(_:subExpr:lAngleLoc:"
1347+
"arguments:rAngleLoc:)")
1348+
BridgedUnresolvedSpecializeExpr BridgedUnresolvedSpecializeExpr_createParsed(
1349+
BridgedASTContext cContext, BridgedExpr cSubExpr,
1350+
BridgedSourceLoc cLAngleLoc, BridgedArrayRef cArguments,
1351+
BridgedSourceLoc cRAngleLoc);
1352+
1353+
SWIFT_NAME("BridgedInOutExpr.createParsed(_:loc:subExpr:)")
1354+
BridgedInOutExpr BridgedInOutExpr_createParsed(BridgedASTContext cContext,
1355+
BridgedSourceLoc cLoc,
1356+
BridgedExpr cSubExpr);
1357+
13251358
SWIFT_NAME("BridgedIntegerLiteralExpr.createParsed(_:value:loc:)")
13261359
BridgedIntegerLiteralExpr
13271360
BridgedIntegerLiteralExpr_createParsed(BridgedASTContext cContext,
@@ -1372,6 +1405,18 @@ BridgedPrefixUnaryExpr
13721405
BridgedPrefixUnaryExpr_createParsed(BridgedASTContext cContext,
13731406
BridgedExpr oper, BridgedExpr operand);
13741407

1408+
SWIFT_NAME("BridgedRegexLiteralExpr."
1409+
"allocateCaptureStructureSerializationBuffer(_:size:)")
1410+
BridgedData BridgedRegexLiteralExpr_allocateCaptureStructureSerializationBuffer(
1411+
BridgedASTContext cContext, SwiftInt size);
1412+
1413+
SWIFT_NAME("BridgedRegexLiteralExpr.createParsed(_:loc:regexText:version:"
1414+
"captureStructure:)")
1415+
BridgedRegexLiteralExpr BridgedRegexLiteralExpr_createParsed(
1416+
BridgedASTContext cContext, BridgedSourceLoc cLoc,
1417+
BridgedStringRef cRegexText, SwiftInt version,
1418+
BridgedData cCaptureStructure);
1419+
13751420
SWIFT_NAME("BridgedSequenceExpr.createParsed(_:exprs:)")
13761421
BridgedSequenceExpr BridgedSequenceExpr_createParsed(BridgedASTContext cContext,
13771422
BridgedArrayRef exprs);
@@ -1388,6 +1433,17 @@ BridgedStringLiteralExpr_createParsed(BridgedASTContext cContext,
13881433
BridgedStringRef cStr,
13891434
BridgedSourceLoc cTokenLoc);
13901435

1436+
SWIFT_NAME("BridgedSuperRefExpr.createParsed(_:superLoc:)")
1437+
BridgedSuperRefExpr
1438+
BridgedSuperRefExpr_createParsed(BridgedASTContext cContext,
1439+
BridgedSourceLoc cSuperLoc);
1440+
1441+
SWIFT_NAME("BridgedSubscriptExpr.createParsed(_:baseExpr:args:)")
1442+
BridgedSubscriptExpr
1443+
BridgedSubscriptExpr_createParsed(BridgedASTContext cContext,
1444+
BridgedExpr cBaseExpr,
1445+
BridgedArgumentList cArgs);
1446+
13911447
SWIFT_NAME("BridgedTapExpr.create(_:body:)")
13921448
BridgedTapExpr BridgedTapExpr_create(BridgedASTContext cContext,
13931449
BridgedBraceStmt cBody);

include/swift/AST/ASTBridgingImpl.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#ifndef SWIFT_AST_ASTBRIDGINGIMPL_H
1414
#define SWIFT_AST_ASTBRIDGINGIMPL_H
1515

16+
#include "swift/AST/ASTContext.h"
1617
#include "swift/AST/Decl.h"
1718
#include "swift/AST/ProtocolConformance.h"
1819
#include "swift/AST/ProtocolConformanceRef.h"
@@ -31,6 +32,17 @@ BridgedASTContext BridgedASTContext_fromRaw(void * _Nonnull ptr) {
3132
return *static_cast<swift::ASTContext *>(ptr);
3233
}
3334

35+
BRIDGED_INLINE
36+
void *_Nullable BridgedASTContext_allocate(BridgedASTContext bridged,
37+
size_t size, size_t alignment) {
38+
return bridged.unbridged().Allocate(size, alignment);
39+
}
40+
41+
BridgedStringRef BridgedASTContext_allocateCopyString(BridgedASTContext bridged,
42+
BridgedStringRef cStr) {
43+
return bridged.unbridged().AllocateCopy(cStr.unbridged());
44+
}
45+
3446
//===----------------------------------------------------------------------===//
3547
// MARK: BridgedDeclObj
3648
//===----------------------------------------------------------------------===//

lib/AST/Bridging/ExprBridging.cpp

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,11 @@ BridgedDotSelfExpr BridgedDotSelfExpr_createParsed(BridgedASTContext cContext,
198198
cSubExpr.unbridged(), cDotLoc.unbridged(), cSelfLoc.unbridged());
199199
}
200200

201+
BridgedErrorExpr BridgedErrorExpr_create(BridgedASTContext cContext,
202+
BridgedSourceRange cRange) {
203+
return new (cContext.unbridged()) ErrorExpr(cRange.unbridged());
204+
}
205+
201206
BridgedForceTryExpr
202207
BridgedForceTryExpr_createParsed(BridgedASTContext cContext,
203208
BridgedSourceLoc cTryLoc, BridgedExpr cSubExpr,
@@ -206,6 +211,15 @@ BridgedForceTryExpr_createParsed(BridgedASTContext cContext,
206211
cTryLoc.unbridged(), cSubExpr.unbridged(), cExclaimLoc.unbridged());
207212
}
208213

214+
BridgedFloatLiteralExpr
215+
BridgedFloatLiteralExpr_createParsed(BridgedASTContext cContext,
216+
BridgedStringRef cStr,
217+
BridgedSourceLoc cTokenLoc) {
218+
ASTContext &context = cContext.unbridged();
219+
return new (context)
220+
FloatLiteralExpr(cStr.unbridged(), cTokenLoc.unbridged());
221+
}
222+
209223
BridgedForcedCheckedCastExpr BridgedForcedCheckedCastExpr_createParsed(
210224
BridgedASTContext cContext, BridgedSourceLoc cAsLoc,
211225
BridgedSourceLoc cExclaimLoc, BridgedTypeRepr cType) {
@@ -214,13 +228,48 @@ BridgedForcedCheckedCastExpr BridgedForcedCheckedCastExpr_createParsed(
214228
cType.unbridged());
215229
}
216230

231+
BridgedUnresolvedSpecializeExpr BridgedUnresolvedSpecializeExpr_createParsed(
232+
BridgedASTContext cContext, BridgedExpr cSubExpr,
233+
BridgedSourceLoc cLAngleLoc, BridgedArrayRef cArguments,
234+
BridgedSourceLoc cRAngleLoc) {
235+
236+
ASTContext &context = cContext.unbridged();
237+
return UnresolvedSpecializeExpr::create(
238+
cContext.unbridged(), cSubExpr.unbridged(), cLAngleLoc.unbridged(),
239+
cArguments.unbridged<TypeRepr *>(), cRAngleLoc.unbridged());
240+
}
241+
242+
BridgedInOutExpr BridgedInOutExpr_createParsed(BridgedASTContext cContext,
243+
BridgedSourceLoc cLoc,
244+
BridgedExpr cSubExpr) {
245+
ASTContext &context = cContext.unbridged();
246+
return new (context)
247+
InOutExpr(cLoc.unbridged(), cSubExpr.unbridged(), Type());
248+
}
249+
217250
BridgedIntegerLiteralExpr
218251
BridgedIntegerLiteralExpr_createParsed(BridgedASTContext cContext,
219252
BridgedStringRef cStr,
220253
BridgedSourceLoc cTokenLoc) {
221254
ASTContext &context = cContext.unbridged();
222-
auto str = context.AllocateCopy(cStr.unbridged());
223-
return new (context) IntegerLiteralExpr(str, cTokenLoc.unbridged());
255+
return new (context)
256+
IntegerLiteralExpr(cStr.unbridged(), cTokenLoc.unbridged());
257+
}
258+
259+
BridgedSuperRefExpr
260+
BridgedSuperRefExpr_createParsed(BridgedASTContext cContext,
261+
BridgedSourceLoc cSuperLoc) {
262+
ASTContext &context = cContext.unbridged();
263+
return new (context)
264+
SuperRefExpr(/*Self=*/nullptr, cSuperLoc.unbridged(), /*Implicit=*/false);
265+
}
266+
267+
BridgedSubscriptExpr
268+
BridgedSubscriptExpr_createParsed(BridgedASTContext cContext,
269+
BridgedExpr cBaseExpr,
270+
BridgedArgumentList cArgs) {
271+
return SubscriptExpr::create(cContext.unbridged(), cBaseExpr.unbridged(),
272+
cArgs.unbridged());
224273
}
225274

226275
BridgedInterpolatedStringLiteralExpr
@@ -283,6 +332,27 @@ BridgedPrefixUnaryExpr_createParsed(BridgedASTContext cContext,
283332
operand.unbridged());
284333
}
285334

335+
BridgedData BridgedRegexLiteralExpr_allocateCaptureStructureSerializationBuffer(
336+
BridgedASTContext cContext, SwiftInt size) {
337+
auto buf = cContext.unbridged().AllocateUninitialized<uint8_t>(
338+
RegexLiteralExpr::getCaptureStructureSerializationAllocationSize(
339+
unsigned(size)));
340+
return BridgedData(reinterpret_cast<const char *>(buf.data()), buf.size());
341+
}
342+
343+
BridgedRegexLiteralExpr BridgedRegexLiteralExpr_createParsed(
344+
BridgedASTContext cContext, BridgedSourceLoc cLoc,
345+
BridgedStringRef cRegexText, SwiftInt version,
346+
BridgedData cCaptureStructure) {
347+
ArrayRef<uint8_t> captures(
348+
reinterpret_cast<const uint8_t *>(cCaptureStructure.BaseAddress),
349+
cCaptureStructure.Length);
350+
351+
return RegexLiteralExpr::createParsed(cContext.unbridged(), cLoc.unbridged(),
352+
cRegexText.unbridged(),
353+
unsigned(version), captures);
354+
}
355+
286356
BridgedSequenceExpr BridgedSequenceExpr_createParsed(BridgedASTContext cContext,
287357
BridgedArrayRef exprs) {
288358
return SequenceExpr::create(cContext.unbridged(), exprs.unbridged<Expr *>());

lib/ASTGen/Sources/ASTGen/Diagnostics.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,12 @@ struct UnknownAccessorSpecifierError: ASTGenError {
110110
"unknown accessor specifier '\(specifier.text)'"
111111
}
112112
}
113+
114+
struct RegexParserError: ASTGenError {
115+
var message: String
116+
init(_ message: String) {
117+
self.message = message
118+
}
119+
120+
var severity: DiagnosticSeverity { .error }
121+
}

0 commit comments

Comments
 (0)