Skip to content

Commit 9a5614e

Browse files
committed
Swift: subsume IterableDeclContext into Decl [codegen'd]
1 parent f96c18a commit 9a5614e

33 files changed

+226
-200
lines changed

swift/ql/.generated.list

Lines changed: 30 additions & 21 deletions
Large diffs are not rendered by default.

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import codeql.swift.elements.decl.GenericTypeParamDecl
3535
import codeql.swift.elements.decl.IfConfigDecl
3636
import codeql.swift.elements.decl.ImportDecl
3737
import codeql.swift.elements.decl.InfixOperatorDecl
38-
import codeql.swift.elements.decl.IterableDeclContext
3938
import codeql.swift.elements.decl.MissingMemberDecl
4039
import codeql.swift.elements.decl.ModuleDecl
4140
import codeql.swift.elements.decl.NominalTypeDecl

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

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -198,14 +198,18 @@ private module Impl {
198198
}
199199

200200
private Element getImmediateChildOfDecl(Decl e, int index, string partialPredicateCall) {
201-
exists(int b, int bAstNode, int n |
201+
exists(int b, int bAstNode, int n, int nMember |
202202
b = 0 and
203203
bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and
204204
n = bAstNode and
205+
nMember = n + 1 + max(int i | i = -1 or exists(e.getImmediateMember(i)) | i) and
205206
(
206207
none()
207208
or
208209
result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall)
210+
or
211+
result = e.getImmediateMember(index - n) and
212+
partialPredicateCall = "Member(" + (index - n).toString() + ")"
209213
)
210214
)
211215
}
@@ -230,25 +234,6 @@ private module Impl {
230234
)
231235
}
232236

233-
private Element getImmediateChildOfIterableDeclContext(
234-
IterableDeclContext e, int index, string partialPredicateCall
235-
) {
236-
exists(int b, int bElement, int n, int nMember |
237-
b = 0 and
238-
bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and
239-
n = bElement and
240-
nMember = n + 1 + max(int i | i = -1 or exists(e.getImmediateMember(i)) | i) and
241-
(
242-
none()
243-
or
244-
result = getImmediateChildOfElement(e, index - b, partialPredicateCall)
245-
or
246-
result = e.getImmediateMember(index - n) and
247-
partialPredicateCall = "Member(" + (index - n).toString() + ")"
248-
)
249-
)
250-
}
251-
252237
private Element getImmediateChildOfEnumCaseDecl(
253238
EnumCaseDecl e, int index, string partialPredicateCall
254239
) {
@@ -267,26 +252,19 @@ private module Impl {
267252
private Element getImmediateChildOfExtensionDecl(
268253
ExtensionDecl e, int index, string partialPredicateCall
269254
) {
270-
exists(int b, int bGenericContext, int bIterableDeclContext, int bDecl, int n |
255+
exists(int b, int bGenericContext, int bDecl, int n |
271256
b = 0 and
272257
bGenericContext =
273258
b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericContext(e, i, _)) | i) and
274-
bIterableDeclContext =
275-
bGenericContext + 1 +
276-
max(int i | i = -1 or exists(getImmediateChildOfIterableDeclContext(e, i, _)) | i) and
277259
bDecl =
278-
bIterableDeclContext + 1 +
279-
max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and
260+
bGenericContext + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and
280261
n = bDecl and
281262
(
282263
none()
283264
or
284265
result = getImmediateChildOfGenericContext(e, index - b, partialPredicateCall)
285266
or
286-
result =
287-
getImmediateChildOfIterableDeclContext(e, index - bGenericContext, partialPredicateCall)
288-
or
289-
result = getImmediateChildOfDecl(e, index - bIterableDeclContext, partialPredicateCall)
267+
result = getImmediateChildOfDecl(e, index - bGenericContext, partialPredicateCall)
290268
)
291269
)
292270
}
@@ -799,21 +777,15 @@ private module Impl {
799777
private Element getImmediateChildOfNominalTypeDecl(
800778
NominalTypeDecl e, int index, string partialPredicateCall
801779
) {
802-
exists(int b, int bGenericTypeDecl, int bIterableDeclContext, int n |
780+
exists(int b, int bGenericTypeDecl, int n |
803781
b = 0 and
804782
bGenericTypeDecl =
805783
b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericTypeDecl(e, i, _)) | i) and
806-
bIterableDeclContext =
807-
bGenericTypeDecl + 1 +
808-
max(int i | i = -1 or exists(getImmediateChildOfIterableDeclContext(e, i, _)) | i) and
809-
n = bIterableDeclContext and
784+
n = bGenericTypeDecl and
810785
(
811786
none()
812787
or
813788
result = getImmediateChildOfGenericTypeDecl(e, index - b, partialPredicateCall)
814-
or
815-
result =
816-
getImmediateChildOfIterableDeclContext(e, index - bGenericTypeDecl, partialPredicateCall)
817789
)
818790
)
819791
}

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ module Raw {
7575

7676
class Decl extends @decl, AstNode {
7777
ModuleDecl getModule() { decls(this, result) }
78+
79+
Decl getMember(int index) { decl_members(this, index, result) }
7880
}
7981

8082
class GenericContext extends @generic_context, Element {
@@ -83,17 +85,13 @@ module Raw {
8385
}
8486
}
8587

86-
class IterableDeclContext extends @iterable_decl_context, Element {
87-
Decl getMember(int index) { iterable_decl_context_members(this, index, result) }
88-
}
89-
9088
class EnumCaseDecl extends @enum_case_decl, Decl {
9189
override string toString() { result = "EnumCaseDecl" }
9290

9391
EnumElementDecl getElement(int index) { enum_case_decl_elements(this, index, result) }
9492
}
9593

96-
class ExtensionDecl extends @extension_decl, GenericContext, IterableDeclContext, Decl {
94+
class ExtensionDecl extends @extension_decl, GenericContext, Decl {
9795
override string toString() { result = "ExtensionDecl" }
9896

9997
NominalTypeDecl getExtendedTypeDecl() { extension_decls(this, result) }
@@ -292,7 +290,7 @@ module Raw {
292290
override string toString() { result = "GenericTypeParamDecl" }
293291
}
294292

295-
class NominalTypeDecl extends @nominal_type_decl, GenericTypeDecl, IterableDeclContext {
293+
class NominalTypeDecl extends @nominal_type_decl, GenericTypeDecl {
296294
Type getType() { nominal_type_decls(this, result) }
297295
}
298296

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

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -338,8 +338,6 @@ module Synth {
338338

339339
class TGenericTypeDecl = TNominalTypeDecl or TOpaqueTypeDecl or TTypeAliasDecl;
340340

341-
class TIterableDeclContext = TExtensionDecl or TNominalTypeDecl;
342-
343341
class TNominalTypeDecl = TClassDecl or TEnumDecl or TProtocolDecl or TStructDecl;
344342

345343
class TOperatorDecl = TInfixOperatorDecl or TPostfixOperatorDecl or TPrefixOperatorDecl;
@@ -1381,8 +1379,6 @@ module Synth {
13811379
or
13821380
result = convertGenericContextFromRaw(e)
13831381
or
1384-
result = convertIterableDeclContextFromRaw(e)
1385-
or
13861382
result = convertLocatableFromRaw(e)
13871383
or
13881384
result = convertLocationFromRaw(e)
@@ -1519,13 +1515,6 @@ module Synth {
15191515
result = convertTypeAliasDeclFromRaw(e)
15201516
}
15211517

1522-
cached
1523-
TIterableDeclContext convertIterableDeclContextFromRaw(Raw::Element e) {
1524-
result = convertExtensionDeclFromRaw(e)
1525-
or
1526-
result = convertNominalTypeDeclFromRaw(e)
1527-
}
1528-
15291518
cached
15301519
TNominalTypeDecl convertNominalTypeDeclFromRaw(Raw::Element e) {
15311520
result = convertClassDeclFromRaw(e)
@@ -3019,8 +3008,6 @@ module Synth {
30193008
or
30203009
result = convertGenericContextToRaw(e)
30213010
or
3022-
result = convertIterableDeclContextToRaw(e)
3023-
or
30243011
result = convertLocatableToRaw(e)
30253012
or
30263013
result = convertLocationToRaw(e)
@@ -3157,13 +3144,6 @@ module Synth {
31573144
result = convertTypeAliasDeclToRaw(e)
31583145
}
31593146

3160-
cached
3161-
Raw::Element convertIterableDeclContextToRaw(TIterableDeclContext e) {
3162-
result = convertExtensionDeclToRaw(e)
3163-
or
3164-
result = convertNominalTypeDeclToRaw(e)
3165-
}
3166-
31673147
cached
31683148
Raw::Element convertNominalTypeDeclToRaw(TNominalTypeDecl e) {
31693149
result = convertClassDeclToRaw(e)

swift/ql/lib/codeql/swift/generated/decl/Decl.qll

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,30 @@ module Generated {
2121
* Gets the module of this declaration.
2222
*/
2323
final ModuleDecl getModule() { result = getImmediateModule().resolve() }
24+
25+
/**
26+
* Gets the `index`th member of this declaration (0-based).
27+
*
28+
* This includes nodes from the "hidden" AST. It can be overridden in subclasses to change the
29+
* behavior of both the `Immediate` and non-`Immediate` versions.
30+
*/
31+
Decl getImmediateMember(int index) {
32+
result = Synth::convertDeclFromRaw(Synth::convertDeclToRaw(this).(Raw::Decl).getMember(index))
33+
}
34+
35+
/**
36+
* Gets the `index`th member of this declaration (0-based).
37+
*/
38+
final Decl getMember(int index) { result = getImmediateMember(index).resolve() }
39+
40+
/**
41+
* Gets any of the members of this declaration.
42+
*/
43+
final Decl getAMember() { result = getMember(_) }
44+
45+
/**
46+
* Gets the number of members of this declaration.
47+
*/
48+
final int getNumberOfMembers() { result = count(int i | exists(getMember(i))) }
2449
}
2550
}

swift/ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ private import codeql.swift.generated.Synth
33
private import codeql.swift.generated.Raw
44
import codeql.swift.elements.decl.Decl
55
import codeql.swift.elements.decl.GenericContext
6-
import codeql.swift.elements.decl.IterableDeclContext
76
import codeql.swift.elements.decl.NominalTypeDecl
87
import codeql.swift.elements.decl.ProtocolDecl
98

109
module Generated {
11-
class ExtensionDecl extends Synth::TExtensionDecl, GenericContext, IterableDeclContext, Decl {
10+
class ExtensionDecl extends Synth::TExtensionDecl, GenericContext, Decl {
1211
override string getAPrimaryQlClass() { result = "ExtensionDecl" }
1312

1413
/**

swift/ql/lib/codeql/swift/generated/decl/IterableDeclContext.qll

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

swift/ql/lib/codeql/swift/generated/decl/NominalTypeDecl.qll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22
private import codeql.swift.generated.Synth
33
private import codeql.swift.generated.Raw
44
import codeql.swift.elements.decl.GenericTypeDecl
5-
import codeql.swift.elements.decl.IterableDeclContext
65
import codeql.swift.elements.type.Type
76

87
module Generated {
9-
class NominalTypeDecl extends Synth::TNominalTypeDecl, GenericTypeDecl, IterableDeclContext {
8+
class NominalTypeDecl extends Synth::TNominalTypeDecl, GenericTypeDecl {
109
/**
1110
* Gets the type of this nominal type declaration.
1211
*

swift/ql/lib/swift.dbscheme

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ sourceLocationPrefix(
1515
@callable
1616
| @file
1717
| @generic_context
18-
| @iterable_decl_context
1918
| @locatable
2019
| @location
2120
| @type
@@ -177,6 +176,13 @@ decls( //dir=decl
177176
int module: @module_decl_or_none ref
178177
);
179178

179+
#keyset[id, index]
180+
decl_members( //dir=decl
181+
int id: @decl ref,
182+
int index: int ref,
183+
int member: @decl_or_none ref
184+
);
185+
180186
@generic_context =
181187
@abstract_function_decl
182188
| @extension_decl
@@ -191,18 +197,6 @@ generic_context_generic_type_params( //dir=decl
191197
int generic_type_param: @generic_type_param_decl_or_none ref
192198
);
193199

194-
@iterable_decl_context =
195-
@extension_decl
196-
| @nominal_type_decl
197-
;
198-
199-
#keyset[id, index]
200-
iterable_decl_context_members( //dir=decl
201-
int id: @iterable_decl_context ref,
202-
int index: int ref,
203-
int member: @decl_or_none ref
204-
);
205-
206200
enum_case_decls( //dir=decl
207201
unique int id: @enum_case_decl
208202
);

0 commit comments

Comments
 (0)