Skip to content

Commit 8bbe4d2

Browse files
rintaronkcsgexi
authored andcommitted
[libSyntax] Support TypeExpr (#13317)
Just for `Any` for now.
1 parent 3aa0396 commit 8bbe4d2

File tree

4 files changed

+16
-2
lines changed

4 files changed

+16
-2
lines changed

lib/Parse/ParseExpr.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "swift/AST/DiagnosticsParse.h"
1919
#include "swift/Basic/EditorPlaceholder.h"
2020
#include "swift/Parse/CodeCompletionCallbacks.h"
21+
#include "swift/Syntax/SyntaxBuilders.h"
2122
#include "swift/Syntax/SyntaxFactory.h"
2223
#include "swift/Syntax/TokenSyntax.h"
2324
#include "swift/Syntax/SyntaxParsingContext.h"
@@ -1563,6 +1564,11 @@ Parser::parseExprPostfixWithoutSuffix(Diag<> ID, bool isExprBasic) {
15631564
case tok::kw_Any: { // Any
15641565
auto SynResult = parseAnyType();
15651566
auto expr = new (Context) TypeExpr(TypeLoc(SynResult.getAST()));
1567+
if (SynResult.hasSyntax()) {
1568+
TypeExprSyntaxBuilder Builder;
1569+
Builder.useType(SynResult.getSyntax());
1570+
SyntaxContext->addSyntax(Builder.build());
1571+
}
15661572
Result = makeParserResult(expr);
15671573
break;
15681574
}

test/Syntax/Outputs/round_trip_parse_gen.swift.withkinds

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class C {
4949
}</CodeBlock>
5050

5151
func foo3() <CodeBlock>{<SequenceExpr><DiscardAssignmentExpr>
52+
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><ArrayExpr>[<ArrayElement><TypeExpr><SimpleTypeIdentifier>Any</SimpleTypeIdentifier></TypeExpr></ArrayElement>]</ArrayExpr>()</SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
5253
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><MemberAccessExpr><MemberAccessExpr><IdentifierExpr>a</IdentifierExpr>.a</MemberAccessExpr>.a</MemberAccessExpr></SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
5354
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><MemberAccessExpr><IdentifierExpr>a</IdentifierExpr>.b</MemberAccessExpr></SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
5455
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><MemberAccessExpr><IntegerLiteralExpr>1</IntegerLiteralExpr>.a</MemberAccessExpr></SequenceExpr><MemberAccessExpr><MemberAccessExpr><MemberAccessExpr><TupleExpr>
@@ -91,4 +92,4 @@ private </DeclModifier>struct S<GenericParameterClause><<GenericParameter>A, </G
9192
private </DeclModifier>struct S<TypeInheritanceClause>: <InheritedType><SimpleTypeIdentifier>A</SimpleTypeIdentifier>, </InheritedType><InheritedType><SimpleTypeIdentifier>B </SimpleTypeIdentifier></InheritedType></TypeInheritanceClause><MemberDeclBlock>{}</MemberDeclBlock></StructDecl>
9293
}</MemberDeclBlock></StructDecl>
9394

94-
protocol P<TypeInheritanceClause>: <InheritedType>class </InheritedType></TypeInheritanceClause>{}
95+
protocol P<TypeInheritanceClause>: <InheritedType>class </InheritedType></TypeInheritanceClause>{}

test/Syntax/round_trip_parse_gen.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class C {
4949
}
5050

5151
func foo3() {
52+
_ = [Any]()
5253
_ = a.a.a
5354
_ = a.b
5455
_ = 1.a
@@ -91,4 +92,4 @@ private struct S<A, B>: Base where A: B {
9192
private struct S: A, B {}
9293
}
9394

94-
protocol P: class {}
95+
protocol P: class {}

utils/gyb_syntax_support/ExprNodes.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,4 +256,10 @@
256256
]),
257257
Child("TypeName", kind='Type')
258258
]),
259+
260+
# Type
261+
Node('TypeExpr', kind='Expr',
262+
children=[
263+
Child('Type', kind='Type'),
264+
]),
259265
]

0 commit comments

Comments
 (0)