Skip to content

Commit e69d003

Browse files
authored
Merge pull request github#11196 from github/redsun82/swift-error-element
Swift: create common `ErrorElement` superclass and tests
2 parents 38acdaa + ce1fb4c commit e69d003

File tree

54 files changed

+255
-319
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+255
-319
lines changed

swift/ql/lib/codeql/swift/elements.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import codeql.swift.elements.DbFile
66
import codeql.swift.elements.DbLocation
77
import codeql.swift.elements.Diagnostics
88
import codeql.swift.elements.Element
9+
import codeql.swift.elements.ErrorElement
910
import codeql.swift.elements.File
1011
import codeql.swift.elements.Locatable
1112
import codeql.swift.elements.Location
1213
import codeql.swift.elements.UnknownFile
1314
import codeql.swift.elements.UnknownLocation
14-
import codeql.swift.elements.UnresolvedElement
1515
import codeql.swift.elements.UnspecifiedElement
1616
import codeql.swift.elements.decl.AbstractFunctionDecl
1717
import codeql.swift.elements.decl.AbstractStorageDecl
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
2+
private import codeql.swift.generated.ErrorElement
3+
4+
class ErrorElement extends Generated::ErrorElement { }

swift/ql/lib/codeql/swift/elements/UnresolvedElement.qll

Lines changed: 0 additions & 4 deletions
This file was deleted.

swift/ql/lib/codeql/swift/elements/UnspecifiedElement.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
private import codeql.swift.generated.UnspecifiedElement
22
import codeql.swift.elements.Location
3+
import codeql.swift.elements.Locatable
34

45
class UnspecifiedElement extends Generated::UnspecifiedElement {
56
override string toString() {

swift/ql/lib/codeql/swift/generated/UnresolvedElement.qll renamed to swift/ql/lib/codeql/swift/generated/ErrorElement.qll

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,8 @@ private import codeql.swift.generated.Raw
44
import codeql.swift.elements.Locatable
55

66
module Generated {
7-
class UnresolvedElement extends Synth::TUnresolvedElement, Locatable { }
7+
/**
8+
* The superclass of all elements indicating some kind of error.
9+
*/
10+
class ErrorElement extends Synth::TErrorElement, Locatable { }
811
}

swift/ql/lib/codeql/swift/generated/ParentChild.qll

Lines changed: 78 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,21 @@ private module Impl {
135135
)
136136
}
137137

138+
private Element getImmediateChildOfErrorElement(
139+
ErrorElement e, int index, string partialPredicateCall
140+
) {
141+
exists(int b, int bLocatable, int n |
142+
b = 0 and
143+
bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and
144+
n = bLocatable and
145+
(
146+
none()
147+
or
148+
result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall)
149+
)
150+
)
151+
}
152+
138153
private Element getImmediateChildOfUnknownFile(
139154
UnknownFile e, int index, string partialPredicateCall
140155
) {
@@ -165,32 +180,18 @@ private module Impl {
165180
)
166181
}
167182

168-
private Element getImmediateChildOfUnresolvedElement(
169-
UnresolvedElement e, int index, string partialPredicateCall
170-
) {
171-
exists(int b, int bLocatable, int n |
172-
b = 0 and
173-
bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and
174-
n = bLocatable and
175-
(
176-
none()
177-
or
178-
result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall)
179-
)
180-
)
181-
}
182-
183183
private Element getImmediateChildOfUnspecifiedElement(
184184
UnspecifiedElement e, int index, string partialPredicateCall
185185
) {
186-
exists(int b, int bLocatable, int n |
186+
exists(int b, int bErrorElement, int n |
187187
b = 0 and
188-
bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and
189-
n = bLocatable and
188+
bErrorElement =
189+
b + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
190+
n = bErrorElement and
190191
(
191192
none()
192193
or
193-
result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall)
194+
result = getImmediateChildOfErrorElement(e, index - b, partialPredicateCall)
194195
)
195196
)
196197
}
@@ -1215,14 +1216,18 @@ private module Impl {
12151216
}
12161217

12171218
private Element getImmediateChildOfErrorExpr(ErrorExpr e, int index, string partialPredicateCall) {
1218-
exists(int b, int bExpr, int n |
1219+
exists(int b, int bExpr, int bErrorElement, int n |
12191220
b = 0 and
12201221
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
1221-
n = bExpr and
1222+
bErrorElement =
1223+
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
1224+
n = bErrorElement and
12221225
(
12231226
none()
12241227
or
12251228
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
1229+
or
1230+
result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall)
12261231
)
12271232
)
12281233
}
@@ -1592,14 +1597,18 @@ private module Impl {
15921597
private Element getImmediateChildOfOverloadedDeclRefExpr(
15931598
OverloadedDeclRefExpr e, int index, string partialPredicateCall
15941599
) {
1595-
exists(int b, int bExpr, int n |
1600+
exists(int b, int bExpr, int bErrorElement, int n |
15961601
b = 0 and
15971602
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
1598-
n = bExpr and
1603+
bErrorElement =
1604+
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
1605+
n = bErrorElement and
15991606
(
16001607
none()
16011608
or
16021609
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
1610+
or
1611+
result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall)
16031612
)
16041613
)
16051614
}
@@ -1744,38 +1753,38 @@ private module Impl {
17441753
private Element getImmediateChildOfUnresolvedDeclRefExpr(
17451754
UnresolvedDeclRefExpr e, int index, string partialPredicateCall
17461755
) {
1747-
exists(int b, int bExpr, int bUnresolvedElement, int n |
1756+
exists(int b, int bExpr, int bErrorElement, int n |
17481757
b = 0 and
17491758
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
1750-
bUnresolvedElement =
1751-
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
1752-
n = bUnresolvedElement and
1759+
bErrorElement =
1760+
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
1761+
n = bErrorElement and
17531762
(
17541763
none()
17551764
or
17561765
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
17571766
or
1758-
result = getImmediateChildOfUnresolvedElement(e, index - bExpr, partialPredicateCall)
1767+
result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall)
17591768
)
17601769
)
17611770
}
17621771

17631772
private Element getImmediateChildOfUnresolvedDotExpr(
17641773
UnresolvedDotExpr e, int index, string partialPredicateCall
17651774
) {
1766-
exists(int b, int bExpr, int bUnresolvedElement, int n, int nBase |
1775+
exists(int b, int bExpr, int bErrorElement, int n, int nBase |
17671776
b = 0 and
17681777
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
1769-
bUnresolvedElement =
1770-
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
1771-
n = bUnresolvedElement and
1778+
bErrorElement =
1779+
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
1780+
n = bErrorElement and
17721781
nBase = n + 1 and
17731782
(
17741783
none()
17751784
or
17761785
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
17771786
or
1778-
result = getImmediateChildOfUnresolvedElement(e, index - bExpr, partialPredicateCall)
1787+
result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall)
17791788
or
17801789
index = n and result = e.getImmediateBase() and partialPredicateCall = "Base()"
17811790
)
@@ -1785,38 +1794,38 @@ private module Impl {
17851794
private Element getImmediateChildOfUnresolvedMemberExpr(
17861795
UnresolvedMemberExpr e, int index, string partialPredicateCall
17871796
) {
1788-
exists(int b, int bExpr, int bUnresolvedElement, int n |
1797+
exists(int b, int bExpr, int bErrorElement, int n |
17891798
b = 0 and
17901799
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
1791-
bUnresolvedElement =
1792-
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
1793-
n = bUnresolvedElement and
1800+
bErrorElement =
1801+
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
1802+
n = bErrorElement and
17941803
(
17951804
none()
17961805
or
17971806
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
17981807
or
1799-
result = getImmediateChildOfUnresolvedElement(e, index - bExpr, partialPredicateCall)
1808+
result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall)
18001809
)
18011810
)
18021811
}
18031812

18041813
private Element getImmediateChildOfUnresolvedPatternExpr(
18051814
UnresolvedPatternExpr e, int index, string partialPredicateCall
18061815
) {
1807-
exists(int b, int bExpr, int bUnresolvedElement, int n, int nSubPattern |
1816+
exists(int b, int bExpr, int bErrorElement, int n, int nSubPattern |
18081817
b = 0 and
18091818
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
1810-
bUnresolvedElement =
1811-
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
1812-
n = bUnresolvedElement and
1819+
bErrorElement =
1820+
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
1821+
n = bErrorElement and
18131822
nSubPattern = n + 1 and
18141823
(
18151824
none()
18161825
or
18171826
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
18181827
or
1819-
result = getImmediateChildOfUnresolvedElement(e, index - bExpr, partialPredicateCall)
1828+
result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall)
18201829
or
18211830
index = n and result = e.getImmediateSubPattern() and partialPredicateCall = "SubPattern()"
18221831
)
@@ -1826,19 +1835,19 @@ private module Impl {
18261835
private Element getImmediateChildOfUnresolvedSpecializeExpr(
18271836
UnresolvedSpecializeExpr e, int index, string partialPredicateCall
18281837
) {
1829-
exists(int b, int bExpr, int bUnresolvedElement, int n, int nSubExpr |
1838+
exists(int b, int bExpr, int bErrorElement, int n, int nSubExpr |
18301839
b = 0 and
18311840
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
1832-
bUnresolvedElement =
1833-
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
1834-
n = bUnresolvedElement and
1841+
bErrorElement =
1842+
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
1843+
n = bErrorElement and
18351844
nSubExpr = n + 1 and
18361845
(
18371846
none()
18381847
or
18391848
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
18401849
or
1841-
result = getImmediateChildOfUnresolvedElement(e, index - bExpr, partialPredicateCall)
1850+
result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall)
18421851
or
18431852
index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()"
18441853
)
@@ -2805,45 +2814,43 @@ private module Impl {
28052814
private Element getImmediateChildOfUnresolvedMemberChainResultExpr(
28062815
UnresolvedMemberChainResultExpr e, int index, string partialPredicateCall
28072816
) {
2808-
exists(int b, int bIdentityExpr, int bUnresolvedElement, int n |
2817+
exists(int b, int bIdentityExpr, int bErrorElement, int n |
28092818
b = 0 and
28102819
bIdentityExpr =
28112820
b + 1 + max(int i | i = -1 or exists(getImmediateChildOfIdentityExpr(e, i, _)) | i) and
2812-
bUnresolvedElement =
2821+
bErrorElement =
28132822
bIdentityExpr + 1 +
2814-
max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
2815-
n = bUnresolvedElement and
2823+
max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
2824+
n = bErrorElement and
28162825
(
28172826
none()
28182827
or
28192828
result = getImmediateChildOfIdentityExpr(e, index - b, partialPredicateCall)
28202829
or
2821-
result =
2822-
getImmediateChildOfUnresolvedElement(e, index - bIdentityExpr, partialPredicateCall)
2830+
result = getImmediateChildOfErrorElement(e, index - bIdentityExpr, partialPredicateCall)
28232831
)
28242832
)
28252833
}
28262834

28272835
private Element getImmediateChildOfUnresolvedTypeConversionExpr(
28282836
UnresolvedTypeConversionExpr e, int index, string partialPredicateCall
28292837
) {
2830-
exists(int b, int bImplicitConversionExpr, int bUnresolvedElement, int n |
2838+
exists(int b, int bImplicitConversionExpr, int bErrorElement, int n |
28312839
b = 0 and
28322840
bImplicitConversionExpr =
28332841
b + 1 +
28342842
max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and
2835-
bUnresolvedElement =
2843+
bErrorElement =
28362844
bImplicitConversionExpr + 1 +
2837-
max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
2838-
n = bUnresolvedElement and
2845+
max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
2846+
n = bErrorElement and
28392847
(
28402848
none()
28412849
or
28422850
result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall)
28432851
or
28442852
result =
2845-
getImmediateChildOfUnresolvedElement(e, index - bImplicitConversionExpr,
2846-
partialPredicateCall)
2853+
getImmediateChildOfErrorElement(e, index - bImplicitConversionExpr, partialPredicateCall)
28472854
)
28482855
)
28492856
}
@@ -3838,14 +3845,18 @@ private module Impl {
38383845
}
38393846

38403847
private Element getImmediateChildOfErrorType(ErrorType e, int index, string partialPredicateCall) {
3841-
exists(int b, int bType, int n |
3848+
exists(int b, int bType, int bErrorElement, int n |
38423849
b = 0 and
38433850
bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and
3844-
n = bType and
3851+
bErrorElement =
3852+
bType + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
3853+
n = bErrorElement and
38453854
(
38463855
none()
38473856
or
38483857
result = getImmediateChildOfType(e, index - b, partialPredicateCall)
3858+
or
3859+
result = getImmediateChildOfErrorElement(e, index - bType, partialPredicateCall)
38493860
)
38503861
)
38513862
}
@@ -3993,18 +4004,18 @@ private module Impl {
39934004
private Element getImmediateChildOfUnresolvedType(
39944005
UnresolvedType e, int index, string partialPredicateCall
39954006
) {
3996-
exists(int b, int bType, int bUnresolvedElement, int n |
4007+
exists(int b, int bType, int bErrorElement, int n |
39974008
b = 0 and
39984009
bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and
3999-
bUnresolvedElement =
4000-
bType + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnresolvedElement(e, i, _)) | i) and
4001-
n = bUnresolvedElement and
4010+
bErrorElement =
4011+
bType + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and
4012+
n = bErrorElement and
40024013
(
40034014
none()
40044015
or
40054016
result = getImmediateChildOfType(e, index - b, partialPredicateCall)
40064017
or
4007-
result = getImmediateChildOfUnresolvedElement(e, index - bType, partialPredicateCall)
4018+
result = getImmediateChildOfErrorElement(e, index - bType, partialPredicateCall)
40084019
)
40094020
)
40104021
}

0 commit comments

Comments
 (0)