Skip to content

Commit 87f7bc3

Browse files
committed
Swift: introduce closure capture AST test
1 parent 62158c5 commit 87f7bc3

File tree

3 files changed

+119
-0
lines changed

3 files changed

+119
-0
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
closures.swift:
2+
# 1| [ConcreteFuncDecl] bar()
3+
# 1| InterfaceType = () -> String
4+
# 1| getBody(): [BraceStmt] { ... }
5+
# 2| getElement(0): [ReturnStmt] return ...
6+
# 2| getResult(): [StringLiteralExpr] Hello world!
7+
# 5| [ConcreteFuncDecl] foo()
8+
# 5| InterfaceType = () -> ()
9+
# 5| getBody(): [BraceStmt] { ... }
10+
# 6| getElement(0): [PatternBindingDecl] var ... = ...
11+
# 6| getInit(0): [IntegerLiteralExpr] 123
12+
# 6| getPattern(0): [NamedPattern] y
13+
# 6| getElement(1): [ConcreteVarDecl] y
14+
# 6| Type = Int
15+
# 7| getElement(2): [CallExpr] call to ...
16+
# 7| getFunction(): [CaptureListExpr] { ... }
17+
# 7| getBindingDecl(0): [PatternBindingDecl] var ... = ...
18+
# 7| getInit(0): [CallExpr] call to bar()
19+
# 7| getFunction(): [DeclRefExpr] bar()
20+
# 7| getPattern(0): [NamedPattern] x
21+
# 7| getClosureBody(): [ClosureExpr] { ... }
22+
# 7| getBody(): [BraceStmt] { ... }
23+
# 8| getElement(0): [CallExpr] call to print(_:separator:terminator:)
24+
# 8| getFunction(): [DeclRefExpr] print(_:separator:terminator:)
25+
# 8| getArgument(0): [Argument] : [...]
26+
# 8| getExpr(): [VarargExpansionExpr] [...]
27+
# 8| getSubExpr(): [ArrayExpr] [...]
28+
# 8| getElement(0): [DeclRefExpr] x
29+
# 8| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ...
30+
# 8| getArgument(1): [Argument] separator: default separator
31+
# 8| getExpr(): [DefaultArgumentExpr] default separator
32+
# 8| getArgument(2): [Argument] terminator: default terminator
33+
# 8| getExpr(): [DefaultArgumentExpr] default terminator
34+
# 9| getElement(1): [CallExpr] call to print(_:separator:terminator:)
35+
# 9| getFunction(): [DeclRefExpr] print(_:separator:terminator:)
36+
# 9| getArgument(0): [Argument] : [...]
37+
# 9| getExpr(): [VarargExpansionExpr] [...]
38+
# 9| getSubExpr(): [ArrayExpr] [...]
39+
# 9| getElement(0): [DeclRefExpr] y
40+
# 9| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ...
41+
# 9| getArgument(1): [Argument] separator: default separator
42+
# 9| getExpr(): [DefaultArgumentExpr] default separator
43+
# 9| getArgument(2): [Argument] terminator: default terminator
44+
# 9| getExpr(): [DefaultArgumentExpr] default terminator
45+
# 8| getCapture(0): [CapturedDecl] x
46+
# 9| getCapture(1): [CapturedDecl] y
47+
# 7| [ConcreteVarDecl] x
48+
# 7| Type = String
49+
# 12| [TopLevelCodeDecl] { ... }
50+
# 12| getBody(): [BraceStmt] { ... }
51+
# 12| getElement(0): [PatternBindingDecl] var ... = ...
52+
# 12| getInit(0): [NilLiteralExpr] nil
53+
# 12| getPattern(0): [TypedPattern] ... as ...
54+
# 12| getSubPattern(): [NamedPattern] escape
55+
# 12| getTypeRepr(): [TypeRepr] (() -> ())?
56+
# 12| [ConcreteVarDecl] escape
57+
# 12| Type = (() -> ())?
58+
# 14| [ConcreteFuncDecl] baz()
59+
# 14| InterfaceType = () -> ()
60+
# 14| getBody(): [BraceStmt] { ... }
61+
# 15| getElement(0): [PatternBindingDecl] var ... = ...
62+
# 15| getInit(0): [IntegerLiteralExpr] 0
63+
# 15| getPattern(0): [NamedPattern] x
64+
# 15| getElement(1): [ConcreteVarDecl] x
65+
# 15| Type = Int
66+
# 16| getElement(2): [ConcreteFuncDecl] quux()
67+
# 16| InterfaceType = () -> ()
68+
# 16| getBody(): [BraceStmt] { ... }
69+
# 17| getElement(0): [BinaryExpr] ... .+=(_:_:) ...
70+
# 17| getFunction(): [MethodLookupExpr] .+=(_:_:)
71+
# 17| getBase(): [TypeExpr] Int.Type
72+
# 17| getTypeRepr(): [TypeRepr] Int
73+
# 17| getMethodRef(): [DeclRefExpr] +=(_:_:)
74+
# 17| getArgument(0): [Argument] : &...
75+
# 17| getExpr(): [InOutExpr] &...
76+
# 17| getSubExpr(): [DeclRefExpr] x
77+
# 17| getArgument(1): [Argument] : 1
78+
# 17| getExpr(): [IntegerLiteralExpr] 1
79+
# 18| getElement(1): [CallExpr] call to print(_:separator:terminator:)
80+
# 18| getFunction(): [DeclRefExpr] print(_:separator:terminator:)
81+
# 18| getArgument(0): [Argument] : [...]
82+
# 18| getExpr(): [VarargExpansionExpr] [...]
83+
# 18| getSubExpr(): [ArrayExpr] [...]
84+
# 18| getElement(0): [DeclRefExpr] x
85+
# 18| getElement(0).getFullyConverted(): [ErasureExpr] (Any) ...
86+
# 18| getImmediateSubExpr(): [LoadExpr] (Int) ...
87+
# 18| getArgument(1): [Argument] separator: default separator
88+
# 18| getExpr(): [DefaultArgumentExpr] default separator
89+
# 18| getArgument(2): [Argument] terminator: default terminator
90+
# 18| getExpr(): [DefaultArgumentExpr] default terminator
91+
# 17| getCapture(0): [CapturedDecl] x
92+
# 20| getElement(3): [AssignExpr] ... = ...
93+
# 20| getDest(): [DeclRefExpr] escape
94+
# 20| getSource(): [DeclRefExpr] quux()
95+
# 20| getSource().getFullyConverted(): [InjectIntoOptionalExpr] ((() -> ())?) ...
96+
# 20| getCapture(0): [CapturedDecl] escape
97+
# 23| [ConcreteFuncDecl] callEscape()
98+
# 23| InterfaceType = () -> ()
99+
# 23| getBody(): [BraceStmt] { ... }
100+
# 24| getElement(0): [CallExpr] call to baz()
101+
# 24| getFunction(): [DeclRefExpr] baz()
102+
# 25| getElement(1): [OptionalEvaluationExpr] OptionalEvaluationExpr
103+
# 25| getSubExpr(): [CallExpr] call to ...
104+
# 25| getFunction(): [BindOptionalExpr] ...?
105+
# 25| getSubExpr(): [DeclRefExpr] escape
106+
# 25| getFunction().getFullyConverted(): [LoadExpr] ((() -> ())) ...
107+
# 25| getSubExpr().getFullyConverted(): [InjectIntoOptionalExpr] (()?) ...
108+
# 25| getCapture(0): [CapturedDecl] escape
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
library-tests/ast/PrintAst.ql
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
func bar() -> String {
2+
return "Hello world!"
3+
}
4+
5+
func foo() {
6+
let y = 123
7+
{ [x = bar()] () in
8+
print(x)
9+
print(y) }()
10+
}

0 commit comments

Comments
 (0)