Skip to content

[ASTGen] Implement some expressions and types #70281

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Dec 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions include/swift/AST/ASTBridging.h
Original file line number Diff line number Diff line change
Expand Up @@ -656,6 +656,16 @@ SWIFT_NAME("BridgedAssignExpr.createParsed(_:equalsLoc:)")
BridgedAssignExpr BridgedAssignExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cEqualsLoc);

SWIFT_NAME("BridgedAwaitExpr.createParsed(_:awaitLoc:subExpr:)")
BridgedAwaitExpr BridgedAwaitExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cAwaitLoc,
BridgedExpr cSubExpr);

SWIFT_NAME("BridgedBorrowExpr.createParsed(_:borrowLoc:subExpr:)")
BridgedBorrowExpr BridgedBorrowExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cBorrowLoc,
BridgedExpr cSubExpr);

SWIFT_NAME("BridgedCallExpr.createParsed(_:fn:args:)")
BridgedCallExpr BridgedCallExpr_createParsed(BridgedASTContext cContext,
BridgedExpr fn,
Expand All @@ -680,11 +690,40 @@ BridgedConditionalCheckedCastExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cQuestionLoc,
BridgedTypeRepr cType);

SWIFT_NAME("BridgedConsumeExpr.createParsed(_:consumeLoc:subExpr:)")
BridgedConsumeExpr BridgedConsumeExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cConsumeLoc,
BridgedExpr cSubExpr);

SWIFT_NAME("BridgedCopyExpr.createParsed(_:copyLoc:subExpr:)")
BridgedCopyExpr BridgedCopyExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cCopyLoc,
BridgedExpr cSubExpr);

SWIFT_NAME("BridgedDiscardAssignmentExpr.createParsed(_:loc:)")
BridgedDiscardAssignmentExpr
BridgedDiscardAssignmentExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cLoc);

SWIFT_NAME("BridgedDictionaryExpr.createParsed(_:lBracketLoc:elements:"
"colonLocs:rBracketLoc:)")
BridgedDictionaryExpr BridgedDictionaryExpr_createParsed(
BridgedASTContext cContext, BridgedSourceLoc cLBracketLoc,
BridgedArrayRef cElements, BridgedArrayRef cCommaLocs,
BridgedSourceLoc cRBracketLoc);

SWIFT_NAME("BridgedDotSelfExpr.createParsed(_:subExpr:dotLoc:selfLoc:)")
BridgedDotSelfExpr BridgedDotSelfExpr_createParsed(BridgedASTContext cContext,
BridgedExpr cSubExpr,
BridgedSourceLoc cDotLoc,
BridgedSourceLoc cSelfLoc);

SWIFT_NAME("BridgedForceTryExpr.createParsed(_:tryLoc:subExpr:exclaimLoc:)")
BridgedForceTryExpr
BridgedForceTryExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cTryLoc, BridgedExpr cSubExpr,
BridgedSourceLoc cExclaimLoc);

SWIFT_NAME(
"BridgedForcedCheckedCastExpr.createParsed(_:asLoc:exclaimLoc:type:)")
BridgedForcedCheckedCastExpr BridgedForcedCheckedCastExpr_createParsed(
Expand All @@ -696,6 +735,23 @@ BridgedIsExpr BridgedIsExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cIsLoc,
BridgedTypeRepr cType);

SWIFT_NAME("BridgedOptionalTryExpr.createParsed(_:tryLoc:subExpr:questionLoc:)")
BridgedOptionalTryExpr BridgedOptionalTryExpr_createParsed(
BridgedASTContext cContext, BridgedSourceLoc cTryLoc, BridgedExpr cSubExpr,
BridgedSourceLoc cQuestionLoc);

SWIFT_NAME("BridgedPackElementExpr.createParsed(_:eachLoc:packRefExpr:)")
BridgedPackElementExpr
BridgedPackElementExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cEachLoc,
BridgedExpr cPackRefExpr);

SWIFT_NAME("BridgedPackExpansionExpr.createParsed(_:repeatLoc:patternExpr:)")
BridgedPackExpansionExpr
BridgedPackExpansionExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cRepeatLoc,
BridgedExpr cPatternExpr);

SWIFT_NAME("BridgedSingleValueStmtExpr.createWithWrappedBranches(_:stmt:"
"declContext:mustBeExpr:)")
BridgedSingleValueStmtExpr BridgedSingleValueStmtExpr_createWithWrappedBranches(
Expand All @@ -717,12 +773,21 @@ BridgedTernaryExpr BridgedTernaryExpr_createParsed(
BridgedASTContext cContext, BridgedSourceLoc cQuestionLoc,
BridgedExpr cThenExpr, BridgedSourceLoc cColonLoc);

SWIFT_NAME("BridgedTryExpr.createParsed(_:tryLoc:subExpr:)")
BridgedTryExpr BridgedTryExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cTryLoc,
BridgedExpr cSubExpr);

SWIFT_NAME("BridgedTupleExpr.createParsed(_:leftParenLoc:exprs:labels:"
"labelLocs:rightParenLoc:)")
BridgedTupleExpr BridgedTupleExpr_createParsed(
BridgedASTContext cContext, BridgedSourceLoc cLParen, BridgedArrayRef subs,
BridgedArrayRef names, BridgedArrayRef cNameLocs, BridgedSourceLoc cRParen);

SWIFT_NAME("BridgedTupleExpr.createParsedDictionaryElement(_:key:value:)")
BridgedTupleExpr BridgedTupleExpr_createParsedDictionaryElement(
BridgedASTContext cContext, BridgedExpr cKeyExpr, BridgedExpr cValueExpr);

SWIFT_NAME("BridgedIntegerLiteralExpr.createParsed(_:value:loc:)")
BridgedIntegerLiteralExpr
BridgedIntegerLiteralExpr_createParsed(BridgedASTContext cContext,
Expand Down Expand Up @@ -970,6 +1035,12 @@ BridgedTypeRepr BridgedImplicitlyUnwrappedOptionalTypeRepr_createParsed(
BridgedASTContext cContext, BridgedTypeRepr base,
BridgedSourceLoc cExclamationLoc);

SWIFT_NAME("BridgedInverseTypeRepr.createParsed(_:tildeLoc:constraint:)")
BridgedTypeRepr
BridgedInverseTypeRepr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cTildeLoc,
BridgedTypeRepr cConstraint);

SWIFT_NAME("BridgedMemberTypeRepr.createParsed(_:base:members:)")
BridgedTypeRepr
BridgedMemberTypeRepr_createParsed(BridgedASTContext cContext,
Expand All @@ -987,6 +1058,12 @@ BridgedProtocolTypeRepr_createParsed(BridgedASTContext cContext,
BridgedTypeRepr baseType,
BridgedSourceLoc cProtoLoc);

SWIFT_NAME("BridgedPackElementTypeRepr.createParsed(_:base:eachKeywordLoc:)")
BridgedTypeRepr
BridgedPackElementTypeRepr_createParsed(BridgedASTContext cContext,
BridgedTypeRepr base,
BridgedSourceLoc cEachLoc);

SWIFT_NAME(
"BridgedPackExpansionTypeRepr.createParsed(_:base:repeatKeywordLoc:)")
BridgedTypeRepr
Expand Down
110 changes: 110 additions & 0 deletions lib/AST/ASTBridging.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -869,6 +869,20 @@ BridgedAssignExpr BridgedAssignExpr_createParsed(BridgedASTContext cContext,
return new (cContext.unbridged()) AssignExpr(cEqualsLoc.unbridged());
}

BridgedAwaitExpr BridgedAwaitExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cAwaitLoc,
BridgedExpr cSubExpr) {
return new (cContext.unbridged())
AwaitExpr(cAwaitLoc.unbridged(), cSubExpr.unbridged());
}

BridgedBorrowExpr BridgedBorrowExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cBorrowLoc,
BridgedExpr cSubExpr) {
return new (cContext.unbridged())
BorrowExpr(cBorrowLoc.unbridged(), cSubExpr.unbridged());
}

BridgedClosureExpr
BridgedClosureExpr_createParsed(BridgedASTContext cContext,
BridgedDeclContext cDeclContext,
Expand Down Expand Up @@ -910,13 +924,45 @@ BridgedConditionalCheckedCastExpr_createParsed(BridgedASTContext cContext,
cType.unbridged());
}

BridgedConsumeExpr BridgedConsumeExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cConsumeLoc,
BridgedExpr cSubExpr) {
return new (cContext.unbridged())
ConsumeExpr(cConsumeLoc.unbridged(), cSubExpr.unbridged());
}

BridgedCopyExpr BridgedCopyExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cCopyLoc,
BridgedExpr cSubExpr) {
return new (cContext.unbridged())
CopyExpr(cCopyLoc.unbridged(), cSubExpr.unbridged());
}

BridgedDiscardAssignmentExpr
BridgedDiscardAssignmentExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cLoc) {
return new (cContext.unbridged())
DiscardAssignmentExpr(cLoc.unbridged(), /*Implicit=*/false);
}

BridgedDictionaryExpr BridgedDictionaryExpr_createParsed(
BridgedASTContext cContext, BridgedSourceLoc cLBracketLoc,
BridgedArrayRef cElements, BridgedArrayRef cCommaLocs,
BridgedSourceLoc cRBracketLoc) {
return DictionaryExpr::create(cContext.unbridged(), cLBracketLoc.unbridged(),
cElements.unbridged<Expr *>(),
cCommaLocs.unbridged<SourceLoc>(),
cRBracketLoc.unbridged());
}

BridgedForceTryExpr
BridgedForceTryExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cTryLoc, BridgedExpr cSubExpr,
BridgedSourceLoc cExclaimLoc) {
return new (cContext.unbridged()) ForceTryExpr(
cTryLoc.unbridged(), cSubExpr.unbridged(), cExclaimLoc.unbridged());
}

BridgedForcedCheckedCastExpr BridgedForcedCheckedCastExpr_createParsed(
BridgedASTContext cContext, BridgedSourceLoc cAsLoc,
BridgedSourceLoc cExclaimLoc, BridgedTypeRepr cType) {
Expand All @@ -925,18 +971,58 @@ BridgedForcedCheckedCastExpr BridgedForcedCheckedCastExpr_createParsed(
cType.unbridged());
}

BridgedDotSelfExpr BridgedDotSelfExpr_createParsed(BridgedASTContext cContext,
BridgedExpr cSubExpr,
BridgedSourceLoc cDotLoc,
BridgedSourceLoc cSelfLoc) {

return new (cContext.unbridged()) DotSelfExpr(
cSubExpr.unbridged(), cDotLoc.unbridged(), cSelfLoc.unbridged());
}

BridgedIsExpr BridgedIsExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cIsLoc,
BridgedTypeRepr cType) {
return IsExpr::create(cContext.unbridged(), cIsLoc.unbridged(),
cType.unbridged());
}

BridgedOptionalTryExpr BridgedOptionalTryExpr_createParsed(
BridgedASTContext cContext, BridgedSourceLoc cTryLoc, BridgedExpr cSubExpr,
BridgedSourceLoc cQuestionLoc) {
return new (cContext.unbridged()) OptionalTryExpr(
cTryLoc.unbridged(), cSubExpr.unbridged(), cQuestionLoc.unbridged());
}

BridgedPackElementExpr
BridgedPackElementExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cEachLoc,
BridgedExpr cPackRefExpr) {
return PackElementExpr::create(cContext.unbridged(), cEachLoc.unbridged(),
cPackRefExpr.unbridged());
}

BridgedPackExpansionExpr
BridgedPackExpansionExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cRepeatLoc,
BridgedExpr cPatternExpr) {
return PackExpansionExpr::create(cContext.unbridged(), cRepeatLoc.unbridged(),
cPatternExpr.unbridged(),
/*genericEnv=*/nullptr);
}

BridgedSequenceExpr BridgedSequenceExpr_createParsed(BridgedASTContext cContext,
BridgedArrayRef exprs) {
return SequenceExpr::create(cContext.unbridged(), exprs.unbridged<Expr *>());
}

BridgedTryExpr BridgedTryExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cTryLoc,
BridgedExpr cSubExpr) {
return new (cContext.unbridged())
TryExpr(cTryLoc.unbridged(), cSubExpr.unbridged());
}

BridgedTupleExpr BridgedTupleExpr_createParsed(BridgedASTContext cContext,
BridgedSourceLoc cLParen,
BridgedArrayRef subs,
Expand All @@ -950,6 +1036,12 @@ BridgedTupleExpr BridgedTupleExpr_createParsed(BridgedASTContext cContext,
cRParen.unbridged(), /*Implicit*/ false);
}

BridgedTupleExpr BridgedTupleExpr_createParsedDictionaryElement(
BridgedASTContext cContext, BridgedExpr cKeyExpr, BridgedExpr cValueExpr) {
return TupleExpr::createImplicit(
cContext.unbridged(), {cKeyExpr.unbridged(), cValueExpr.unbridged()}, {});
}

BridgedCallExpr BridgedCallExpr_createParsed(BridgedASTContext cContext,
BridgedExpr fn,
BridgedTupleExpr args) {
Expand Down Expand Up @@ -1236,6 +1328,15 @@ BridgedTypeRepr BridgedDictionaryTypeRepr_createParsed(
SourceRange{lSquareLoc, rSquareLoc});
}

BridgedTypeRepr
BridgedInverseTypeRepr_createParsed(BridgedASTContext cContext,
Comment on lines +1331 to +1332
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed all the current BridgedXXXTyprRepr_createParsed() returns BridgedTypeRepr instead of the concrete wrapper types. Since we haven't implemented checked down casting, I think it'd be better to keep the sub type as long as possible (and that's consistent with Decl/Stmt/Expr). WDYT @hamishknight ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah this was just done for convenience since nothing on the ASTGen side cared about the kind of TypeRepr at the time, changing it to use the subclasses makes sense to me

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 Will do in a followup

BridgedSourceLoc cTildeLoc,
BridgedTypeRepr cConstraint) {

return new (cContext.unbridged())
InverseTypeRepr(cTildeLoc.unbridged(), cConstraint.unbridged());
}

BridgedTypeRepr
BridgedMetatypeTypeRepr_createParsed(BridgedASTContext cContext,
BridgedTypeRepr baseType,
Expand All @@ -1254,6 +1355,15 @@ BridgedProtocolTypeRepr_createParsed(BridgedASTContext cContext,
return new (context) ProtocolTypeRepr(baseType.unbridged(), protoLoc);
}

BridgedTypeRepr
BridgedPackElementTypeRepr_createParsed(BridgedASTContext cContext,
BridgedTypeRepr base,
BridgedSourceLoc cEachLoc) {
ASTContext &context = cContext.unbridged();
return new (context)
PackElementTypeRepr(cEachLoc.unbridged(), base.unbridged());
}

BridgedTypeRepr
BridgedPackExpansionTypeRepr_createParsed(BridgedASTContext cContext,
BridgedTypeRepr base,
Expand Down
6 changes: 6 additions & 0 deletions lib/ASTGen/Sources/ASTGen/Bridge.swift
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,12 @@ extension BridgedStringRef {
}
}

extension BridgedStringRef: ExpressibleByStringLiteral {
public init(stringLiteral str: StaticString) {
self.init(data: str.utf8Start, count: str.utf8CodeUnitCount)
}
}

extension SyntaxProtocol {
/// Obtains the bridged start location of the node excluding leading trivia in the source buffer provided by `astgen`
///
Expand Down
Loading