Skip to content

Commit 3a4ecf9

Browse files
committed
[ASTGen] Implement non-refutable patterns
1 parent bf102d2 commit 3a4ecf9

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,12 +1111,44 @@ void BridgedTypeRepr_dump(BridgedTypeRepr type);
11111111
// MARK: Patterns
11121112
//===----------------------------------------------------------------------===//
11131113

1114+
SWIFT_NAME("BridgedAnyPattern.createParsed(_:loc:)")
1115+
BridgedAnyPattern BridgedAnyPattern_createParsed(BridgedASTContext cContext,
1116+
BridgedSourceLoc cLoc);
1117+
1118+
SWIFT_NAME("BridgedBindingPattern.createParsed(_:keywordLoc:isLet:subPattern:)")
1119+
BridgedBindingPattern
1120+
BridgedBindingPattern_createParsed(BridgedASTContext cContext,
1121+
BridgedSourceLoc cKeywordLoc, bool isLet,
1122+
BridgedPattern cSubPattern);
1123+
11141124
SWIFT_NAME("BridgedNamedPattern.createParsed(_:declContext:name:loc:)")
11151125
BridgedNamedPattern
11161126
BridgedNamedPattern_createParsed(BridgedASTContext astContext,
11171127
BridgedDeclContext declContext,
11181128
BridgedIdentifier name, BridgedSourceLoc cLoc);
11191129

1130+
SWIFT_NAME(
1131+
"BridgedParenPattern.createParsed(_:lParenLoc:subPattern:rParenLoc:)")
1132+
BridgedParenPattern BridgedParenPattern_createParsed(
1133+
BridgedASTContext cContext, BridgedSourceLoc cLParenLoc,
1134+
BridgedPattern cSubPattern, BridgedSourceLoc cRParenLoc);
1135+
1136+
struct BridgedTuplePatternElt {
1137+
BridgedIdentifier Label;
1138+
BridgedSourceLoc LabelLoc;
1139+
BridgedPattern ThePattern;
1140+
};
1141+
1142+
SWIFT_NAME("BridgedTuplePattern.createParsed(_:lParenLoc:elements:rParenLoc:)")
1143+
BridgedTuplePattern BridgedTuplePattern_createParsed(
1144+
BridgedASTContext cContext, BridgedSourceLoc cLParenLoc,
1145+
BridgedArrayRef cElements, BridgedSourceLoc cRParenLoc);
1146+
1147+
SWIFT_NAME("BridgedTypedPattern.createParsed(_:pattern:type:)")
1148+
BridgedTypedPattern BridgedTypedPattern_createParsed(BridgedASTContext cContext,
1149+
BridgedPattern cPattern,
1150+
BridgedTypeRepr cType);
1151+
11201152
//===----------------------------------------------------------------------===//
11211153
// MARK: Misc
11221154
//===----------------------------------------------------------------------===//

lib/AST/ASTBridging.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1538,6 +1538,21 @@ BridgedExistentialTypeRepr_createParsed(BridgedASTContext cContext,
15381538
// MARK: Patterns
15391539
//===----------------------------------------------------------------------===//
15401540

1541+
BridgedAnyPattern BridgedAnyPattern_createParsed(BridgedASTContext cContext,
1542+
BridgedSourceLoc cLoc) {
1543+
return new (cContext.unbridged()) AnyPattern(cLoc.unbridged());
1544+
}
1545+
1546+
BridgedBindingPattern
1547+
BridgedBindingPattern_createParsed(BridgedASTContext cContext,
1548+
BridgedSourceLoc cKeywordLoc, bool isLet,
1549+
BridgedPattern cSubPattern) {
1550+
VarDecl::Introducer introducer =
1551+
isLet ? VarDecl::Introducer::Let : VarDecl::Introducer::Var;
1552+
return new (cContext.unbridged()) BindingPattern(
1553+
cKeywordLoc.unbridged(), introducer, cSubPattern.unbridged());
1554+
}
1555+
15411556
BridgedNamedPattern
15421557
BridgedNamedPattern_createParsed(BridgedASTContext cContext,
15431558
BridgedDeclContext cDeclContext,
@@ -1554,6 +1569,37 @@ BridgedNamedPattern_createParsed(BridgedASTContext cContext,
15541569
return pattern;
15551570
}
15561571

1572+
BridgedParenPattern BridgedParenPattern_createParsed(
1573+
BridgedASTContext cContext, BridgedSourceLoc cLParenLoc,
1574+
BridgedPattern cSubPattern, BridgedSourceLoc cRParenLoc) {
1575+
return new (cContext.unbridged()) ParenPattern(
1576+
cLParenLoc.unbridged(), cSubPattern.unbridged(), cRParenLoc.unbridged());
1577+
}
1578+
1579+
BridgedTuplePattern BridgedTuplePattern_createParsed(
1580+
BridgedASTContext cContext, BridgedSourceLoc cLParenLoc,
1581+
BridgedArrayRef cElements, BridgedSourceLoc cRParenLoc) {
1582+
ASTContext &context = cContext.unbridged();
1583+
llvm::SmallVector<TuplePatternElt, 4> elements;
1584+
elements.reserve(cElements.Length);
1585+
llvm::transform(cElements.unbridged<BridgedTuplePatternElt>(),
1586+
elements.begin(), [](const BridgedTuplePatternElt &elt) {
1587+
return TuplePatternElt(elt.Label.unbridged(),
1588+
elt.LabelLoc.unbridged(),
1589+
elt.ThePattern.unbridged());
1590+
});
1591+
1592+
return TuplePattern::create(context, cLParenLoc.unbridged(), elements,
1593+
cRParenLoc.unbridged());
1594+
}
1595+
1596+
BridgedTypedPattern BridgedTypedPattern_createParsed(BridgedASTContext cContext,
1597+
BridgedPattern cPattern,
1598+
BridgedTypeRepr cType) {
1599+
return new (cContext.unbridged())
1600+
TypedPattern(cPattern.unbridged(), cType.unbridged());
1601+
}
1602+
15571603
//===----------------------------------------------------------------------===//
15581604
// MARK: Misc
15591605
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)