Skip to content

Commit d230431

Browse files
committed
Swift: extract closure captures (codegen'd part)
1 parent 6895c11 commit d230431

File tree

15 files changed

+200
-13
lines changed

15 files changed

+200
-13
lines changed

swift/ql/.generated.list

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ ql/lib/codeql/swift/elements/decl/AbstractTypeParamDecl.qll 83950437007703c0f35e
1111
ql/lib/codeql/swift/elements/decl/AccessorDeclConstructor.qll 08376434fd14a2b07280e931d3e22d3eafd2063d745f7c78cad0f9fd7e6156ba 6f74d15a88433953998a07eb2131841679a88cb13efb0569ed9b5502c4a2e362
1212
ql/lib/codeql/swift/elements/decl/AssociatedTypeDecl.qll ae6107c8d9ee9affa7e8430a4d8cd58879578eafcfba668275af4d20f8ea9c53 e81dc740623b4e2c75f83104acaa3d2b6cc6d001dd36a8520c381e0de10e15c4
1313
ql/lib/codeql/swift/elements/decl/AssociatedTypeDeclConstructor.qll ec9007ea072ff22c367f40da69db2f0a8463bb411bbfd33e2d6c8b489a496027 631f688a8410ddcfbaa575fa2f8ffcdbc1b51ee37639b337c804ca1d5af56e0c
14+
ql/lib/codeql/swift/elements/decl/CapturedDeclConstructor.qll 4a33802b047de8d52778c262329f17b88de79c2b3162ebfa3d2b1d40dbf97041 0ed1c94469236252cf81e014138a6b2e6478e3b194512ba36e2a43e03e46cc4a
1415
ql/lib/codeql/swift/elements/decl/ClassDecl.qll 225405ad04e5e959319fbc1ea086ec4eab0b66f5671ebc58290cce45e4103c51 ac681bdc1770a823ea529456f32b1da7b389621254ccd9102e6a49136c53854b
1516
ql/lib/codeql/swift/elements/decl/ClassDeclConstructor.qll 0092ab4b76cd858489d76be94a43442c0e5f395b1d5684309674957e107979b7 9bc496e483feb88552ca0d48e32039aa4566f4612fc27073fea48ad954985d46
1617
ql/lib/codeql/swift/elements/decl/ConcreteFuncDecl.qll 7dd23b6145977ec6ca60dd39cf9db09673e0340cdb8de2080279c83599ccd831 3a07a73dc11ef06ddaeb3d401748ef14a1ee66447c86d2e8c8f187dda92b34a2
@@ -363,7 +364,7 @@ ql/lib/codeql/swift/elements/type/VariadicSequenceType.qll 5bca77dd661d3b2653d31
363364
ql/lib/codeql/swift/elements/type/VariadicSequenceTypeConstructor.qll 0d1d2328a3b5e503a883e7e6d7efd0ca5e7f2633abead9e4c94a9f98ed3cb223 69bff81c1b9413949eacb9298d2efb718ea808e68364569a1090c9878c4af856
364365
ql/lib/codeql/swift/elements/type/WeakStorageType.qll 87a28616eea3600fb0156fffcd65eeddc1ea74ce9c0ba5886c6365b9359e00ce 9c968414d7cc8d672f3754bced5d4f83f43a6d7872d0d263d79ff60483e1f996
365366
ql/lib/codeql/swift/elements/type/WeakStorageTypeConstructor.qll d88b031ef44d6de14b3ddcff2eb47b53dbd11550c37250ff2edb42e5d21ec3e9 26d855c33492cf7a118e439f7baeed0e5425cfaf058b1dcc007eca7ed765c897
366-
ql/lib/codeql/swift/elements.qll 1cab985d76142988a328bdcbbf47c12dad09fa950333ec4c15f220b199ef75ef 1cab985d76142988a328bdcbbf47c12dad09fa950333ec4c15f220b199ef75ef
367+
ql/lib/codeql/swift/elements.qll 3d387d94fce53782d0729062e3b4f0235e8a92365371410bfd4850b0b5bf2972 3d387d94fce53782d0729062e3b4f0235e8a92365371410bfd4850b0b5bf2972
367368
ql/lib/codeql/swift/generated/AstNode.qll 02ca56d82801f942ae6265c6079d92ccafdf6b532f6bcebd98a04029ddf696e4 6216fda240e45bd4302fa0cf0f08f5f945418b144659264cdda84622b0420aa2
368369
ql/lib/codeql/swift/generated/Callable.qll cc67625a86b62f91d1480e284a946aa5274a21a7da03d7ad9f1dc2197927d394 7ee41be3d36c74ed5662d7c1babe591942429f87020d09d7ba2c447ba058fb0a
369370
ql/lib/codeql/swift/generated/Comment.qll f58b49f6e68c21f87c51e2ff84c8a64b09286d733e86f70d67d3a98fe6260bd6 975bbb599a2a7adc35179f6ae06d9cbc56ea8a03b972ef2ee87604834bc6deb1
@@ -375,11 +376,11 @@ ql/lib/codeql/swift/generated/ErrorElement.qll 4b032abe8ffb71376a29c63e470a52943
375376
ql/lib/codeql/swift/generated/File.qll 61454459f5f1ae378bd4970ad1da4f39f3e696bac8a5eebdd162f131995c5316 3e6805f8858cd55dd0e0d0e5aeab923d6a55292dbf98b0029db1ae0208efe684
376377
ql/lib/codeql/swift/generated/Locatable.qll bdc98b9fb7788f44a4bf7e487ee5bd329473409950a8e9f116d61995615ad849 0b36b4fe45e2aa195e4bb70c50ea95f32f141b8e01e5f23466c6427dd9ab88fb
377378
ql/lib/codeql/swift/generated/Location.qll 851766e474cdfdfa67da42e0031fc42dd60196ff5edd39d82f08d3e32deb84c1 b29b2c37672f5acff15f1d3c5727d902f193e51122327b31bd27ec5f877bca3b
378-
ql/lib/codeql/swift/generated/ParentChild.qll 254455f775de22e625d349fb0a953a86894233ad40aabd8ae8877bebbd1d8432 c77bd5423d79b08354fe8905b9f262abe0d48f8ed22b41263d12ee8e1e202b00
379+
ql/lib/codeql/swift/generated/ParentChild.qll 951f61a1f0a46feb0741ced1a550c263de6cc29c704b9e7126a7b47a78cd96c9 1fabdcc6b98c72fecc6724584f6bc6b4c3a911011343ce25446c8dd769b0f778
379380
ql/lib/codeql/swift/generated/PureSynthConstructors.qll 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98
380-
ql/lib/codeql/swift/generated/Raw.qll 5452ceffbcdc1959e152e321f74363448ac39bf52f6c7d0dab39e7d7593c3c40 9e540580dd52ca67e85d5ceb38fae6179c042a6efd49fd8fdfa3941d690b9331
381-
ql/lib/codeql/swift/generated/Synth.qll 2ef42ec87a7943f3c6ebcc95a0db78be227f51d3333f1926cdce65107ec1ba0a a08ff724b500797f68b3cdf91ce7d70ac60b4844d91d5014d0489d963d1c54b0
382-
ql/lib/codeql/swift/generated/SynthConstructors.qll 62360813f1419e111732e42e209535a40644997009890d09e4cc70f3918fbf86 62360813f1419e111732e42e209535a40644997009890d09e4cc70f3918fbf86
381+
ql/lib/codeql/swift/generated/Raw.qll e1ac822bd39d4a698802c9d42a043333d821545071bf1e81aa617507d3d93702 197f09336b11c84a1f0b46385cbb2fa73f79a06f822e5ef6147005d624e2810b
382+
ql/lib/codeql/swift/generated/Synth.qll 51621505f034f24980e7a940062970b82a74dbf1cd1df507dd50fb00876f6b7c 2ab724386c2eff89cf3894b7dbe91fad27f828eabc01455b9ac2f4b6b44c881e
383+
ql/lib/codeql/swift/generated/SynthConstructors.qll 79e4ffbc85a80b1d2c74c45449cd077fbf33d4498ccf93a51351ad0c7cc461ea 79e4ffbc85a80b1d2c74c45449cd077fbf33d4498ccf93a51351ad0c7cc461ea
383384
ql/lib/codeql/swift/generated/UnknownFile.qll 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6
384385
ql/lib/codeql/swift/generated/UnknownLocation.qll e50efefa02a0ec1ff635a00951b5924602fc8cab57e5756e4a039382c69d3882 e50efefa02a0ec1ff635a00951b5924602fc8cab57e5756e4a039382c69d3882
385386
ql/lib/codeql/swift/generated/UnspecifiedElement.qll dbc6ca4018012977b26ca184a88044c55b0661e3998cd14d46295b62a8d69625 184c9a0ce18c2ac881943b0fb400613d1401ed1d5564f90716b6c310ba5afe71
@@ -388,6 +389,7 @@ ql/lib/codeql/swift/generated/decl/AbstractStorageDecl.qll 882e95e6887741c0cdac4
388389
ql/lib/codeql/swift/generated/decl/AbstractTypeParamDecl.qll 1e268b00d0f2dbbd85aa70ac206c5e4a4612f06ba0091e5253483635f486ccf9 5479e13e99f68f1f347283535f8098964f7fd4a34326ff36ad5711b2de1ab0d0
389390
ql/lib/codeql/swift/generated/decl/AccessorDecl.qll 443cb9888dbdbaee680bf24469ce097a8292806dc53f0b109d492db621fa00aa 0dbe38cbbd3f3cd880c1569d9d42165e7cf0358da0cc7cb63e89890310ad40a0
390391
ql/lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll 4169d083104f9c089223ed3c5968f757b8cd6c726887bbb6fbaf21f5ed7ee144 4169d083104f9c089223ed3c5968f757b8cd6c726887bbb6fbaf21f5ed7ee144
392+
ql/lib/codeql/swift/generated/decl/CapturedDecl.qll 18ce5a5d548abb86787096e26ffd4d2432eda3076356d50707a3490e9d3d8459 42708248ba4bcd00a628e836ea192a4b438c0ffe91e31d4e98e497ef896fabac
391393
ql/lib/codeql/swift/generated/decl/ClassDecl.qll a60e8af2fdbcd20cfa2049660c8bcbbc00508fbd3dde72b4778317dfc23c5ae4 a60e8af2fdbcd20cfa2049660c8bcbbc00508fbd3dde72b4778317dfc23c5ae4
392394
ql/lib/codeql/swift/generated/decl/ConcreteFuncDecl.qll c7192e79ce67f77df36575cceb942f11b182c26c93899469654316de2d543cf9 c7192e79ce67f77df36575cceb942f11b182c26c93899469654316de2d543cf9
393395
ql/lib/codeql/swift/generated/decl/ConcreteVarDecl.qll 4801ccc477480c4bc4fc117976fbab152e081064e064c97fbb0f37199cb1d0a8 4d7cfbf5b39b307dd673781adc220fdef04213f2e3d080004fa658ba6d3acb8d
@@ -425,7 +427,7 @@ ql/lib/codeql/swift/generated/decl/TypeDecl.qll 74bb5f0fe2648d95c84fdce804740f2b
425427
ql/lib/codeql/swift/generated/decl/ValueDecl.qll 7b4e4c9334be676f242857c77099306d8a0a4357b253f8bc68f71328cedf1f58 f18938c47f670f2e0c27ffd7e31e55f291f88fb50d8e576fcea116d5f9e5c66d
426428
ql/lib/codeql/swift/generated/decl/VarDecl.qll bdea76fe6c8f721bae52bbc26a2fc1cbd665a19a6920b36097822839158d9d3b 9c91d8159fd7a53cba479d8c8f31f49ad2b1e2617b8cd9e7d1a2cb4796dfa2da
427429
ql/lib/codeql/swift/generated/expr/AbiSafeConversionExpr.qll f4c913df3f1c139a0533f9a3a2f2e07aee96ab723c957fc7153d68564e4fdd6d f4c913df3f1c139a0533f9a3a2f2e07aee96ab723c957fc7153d68564e4fdd6d
428-
ql/lib/codeql/swift/generated/expr/AbstractClosureExpr.qll f0060c2972d2e1f9818d8deea3ceebbbe0b19d2ce11adc9b670beb672c4564d3 5f2500c5f3728f81599bd4e1fb9c97ac5a44a6dce8c1ab84a850c62aae3741ff
430+
ql/lib/codeql/swift/generated/expr/AbstractClosureExpr.qll 27bc6fd8e091e4bf37f0092d31364fd6664f240a978a29f449c9bde262952edc 60c15957f6bb79b59c642bc4bf6437ddee5f64c4868e8ebb503a53dd23694ca2
429431
ql/lib/codeql/swift/generated/expr/AnyHashableErasureExpr.qll f450ac8e316def1cd64dcb61411bae191144079df7f313a5973e59dc89fe367f f450ac8e316def1cd64dcb61411bae191144079df7f313a5973e59dc89fe367f
430432
ql/lib/codeql/swift/generated/expr/AnyTryExpr.qll f2929f39407e1717b91fc41f593bd52f1ae14c619d61598bd0668a478a04a91e 62693c2c18678af1ff9ce5393f0dd87c5381e567b340f1a8a9ecf91a92e2e666
431433
ql/lib/codeql/swift/generated/expr/AppliedPropertyWrapperExpr.qll 191612ec26b3f0d5a61301789a34d9e349b4c9754618760d1c0614f71712e828 cc212df0068ec318c997a83dc6e95bdda5135bccc12d1076b0aebf245da78a4b
@@ -661,6 +663,8 @@ ql/test/extractor-tests/generated/decl/AccessorDecl/AccessorDecl_getSelfParam.ql
661663
ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.ql 74579a1907817168b5014ebcb69ab9a85687189c73145f1a7c2d4b334af4eb30 5d1f265f0e6c1d2392a9e37a42a8e184a16e473836c1a45b5dbc4daccc4aeabb
662664
ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getBaseType.ql 39d26252c242eec5aaef23951bd76755a4d3cdceff7349b15067fefb2ece14b3 214fdbaa77d32ee6f21bcccf112d46c9d26006552081cc1f90cbb00a527a9d7f
663665
ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getMember.ql e662e651d84bddcf49445d7bf5732d0dad30242d32b90f86e40de0010d48fd9c a6b7028468490a12c0a9f4c535cbd5e6c50a6c3519c9d2552d34f9411f904718
666+
ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.ql 950e94dc10f8a8589a6b6ead39faaecfb5739c1e40f381e09c5e015d14507a25 38ab48ca3e647c60bee985732631c6e43116180c36d90132a25fe4f620087482
667+
ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl_getMember.ql fcb4dd4da4d4b13db46f20458513334fb54bcfcec3ddf8cc86798eefe49f31e3 545096ab96006aa9e9058b9cd0c62d2f102f2fe6813880cf9c4eb42374b7ad9c
664668
ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl.ql a76c9710142c368206ceb26df38e9d182833641d1c5f2df178b03eb196b812f2 6661f2af1e7cddcc44735d2bbc7ecc40af69587024b7d8db74ff205dd8db2e6d
665669
ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getBaseType.ql 5f4fddbb3fb3d003f1485dc4c5a56f7d0d26dfc1d691540085654c4c66e70e69 0b5a5b757ca92e664ef136d26ac682aa5a0e071494d9f09d85f66cd13807e81d
666670
ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getGenericTypeParam.ql ca0b73a4f31eea47def7a1de017de36b5fdaec96ae98edb03ff00611bfcac572 f9badd62887a30113484496532b3ff9b67ff5047eb5a311aa2ec2e4d91321e0e

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import codeql.swift.elements.decl.AbstractStorageDecl
1818
import codeql.swift.elements.decl.AbstractTypeParamDecl
1919
import codeql.swift.elements.decl.AccessorDecl
2020
import codeql.swift.elements.decl.AssociatedTypeDecl
21+
import codeql.swift.elements.decl.CapturedDecl
2122
import codeql.swift.elements.decl.ClassDecl
2223
import codeql.swift.elements.decl.ConcreteFuncDecl
2324
import codeql.swift.elements.decl.ConcreteVarDecl
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.Raw
3+
4+
predicate constructCapturedDecl(Raw::CapturedDecl id) { any() }

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

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,21 @@ private module Impl {
234234
)
235235
}
236236

237+
private Element getImmediateChildOfCapturedDecl(
238+
CapturedDecl e, int index, string partialPredicateCall
239+
) {
240+
exists(int b, int bDecl, int n |
241+
b = 0 and
242+
bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and
243+
n = bDecl and
244+
(
245+
none()
246+
or
247+
result = getImmediateChildOfDecl(e, index - b, partialPredicateCall)
248+
)
249+
)
250+
}
251+
237252
private Element getImmediateChildOfEnumCaseDecl(
238253
EnumCaseDecl e, int index, string partialPredicateCall
239254
) {
@@ -938,18 +953,22 @@ private module Impl {
938953
private Element getImmediateChildOfAbstractClosureExpr(
939954
AbstractClosureExpr e, int index, string partialPredicateCall
940955
) {
941-
exists(int b, int bExpr, int bCallable, int n |
956+
exists(int b, int bExpr, int bCallable, int n, int nCapture |
942957
b = 0 and
943958
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
944959
bCallable =
945960
bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallable(e, i, _)) | i) and
946961
n = bCallable and
962+
nCapture = n + 1 + max(int i | i = -1 or exists(e.getImmediateCapture(i)) | i) and
947963
(
948964
none()
949965
or
950966
result = getImmediateChildOfExpr(e, index - b, partialPredicateCall)
951967
or
952968
result = getImmediateChildOfCallable(e, index - bExpr, partialPredicateCall)
969+
or
970+
result = e.getImmediateCapture(index - n) and
971+
partialPredicateCall = "Capture(" + (index - n).toString() + ")"
953972
)
954973
)
955974
}
@@ -4738,6 +4757,8 @@ private module Impl {
47384757
or
47394758
result = getImmediateChildOfUnspecifiedElement(e, index, partialAccessor)
47404759
or
4760+
result = getImmediateChildOfCapturedDecl(e, index, partialAccessor)
4761+
or
47414762
result = getImmediateChildOfEnumCaseDecl(e, index, partialAccessor)
47424763
or
47434764
result = getImmediateChildOfExtensionDecl(e, index, partialAccessor)

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,16 @@ module Raw {
8585
}
8686
}
8787

88+
class CapturedDecl extends @captured_decl, Decl {
89+
override string toString() { result = "CapturedDecl" }
90+
91+
ValueDecl getDecl() { captured_decls(this, result) }
92+
93+
predicate isDirect() { captured_decl_is_direct(this) }
94+
95+
predicate isEscaping() { captured_decl_is_escaping(this) }
96+
}
97+
8898
class EnumCaseDecl extends @enum_case_decl, Decl {
8999
override string toString() { result = "EnumCaseDecl" }
90100

@@ -350,7 +360,9 @@ module Raw {
350360
Type getType() { expr_types(this, result) }
351361
}
352362

353-
class AbstractClosureExpr extends @abstract_closure_expr, Expr, Callable { }
363+
class AbstractClosureExpr extends @abstract_closure_expr, Expr, Callable {
364+
CapturedDecl getCapture(int index) { abstract_closure_expr_captures(this, index, result) }
365+
}
354366

355367
class AnyTryExpr extends @any_try_expr, Expr {
356368
Expr getSubExpr() { any_try_exprs(this, result) }

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ module Synth {
1414
TUnspecifiedElement(Raw::UnspecifiedElement id) { constructUnspecifiedElement(id) } or
1515
TAccessorDecl(Raw::AccessorDecl id) { constructAccessorDecl(id) } or
1616
TAssociatedTypeDecl(Raw::AssociatedTypeDecl id) { constructAssociatedTypeDecl(id) } or
17+
TCapturedDecl(Raw::CapturedDecl id) { constructCapturedDecl(id) } or
1718
TClassDecl(Raw::ClassDecl id) { constructClassDecl(id) } or
1819
TConcreteFuncDecl(Raw::ConcreteFuncDecl id) { constructConcreteFuncDecl(id) } or
1920
TConcreteVarDecl(Raw::ConcreteVarDecl id) { constructConcreteVarDecl(id) } or
@@ -327,9 +328,9 @@ module Synth {
327328
class TAbstractTypeParamDecl = TAssociatedTypeDecl or TGenericTypeParamDecl;
328329

329330
class TDecl =
330-
TEnumCaseDecl or TExtensionDecl or TIfConfigDecl or TImportDecl or TMissingMemberDecl or
331-
TOperatorDecl or TPatternBindingDecl or TPoundDiagnosticDecl or TPrecedenceGroupDecl or
332-
TTopLevelCodeDecl or TValueDecl;
331+
TCapturedDecl or TEnumCaseDecl or TExtensionDecl or TIfConfigDecl or TImportDecl or
332+
TMissingMemberDecl or TOperatorDecl or TPatternBindingDecl or TPoundDiagnosticDecl or
333+
TPrecedenceGroupDecl or TTopLevelCodeDecl or TValueDecl;
333334

334335
class TFuncDecl = TAccessorDecl or TConcreteFuncDecl;
335336

@@ -494,6 +495,9 @@ module Synth {
494495
result = TAssociatedTypeDecl(e)
495496
}
496497

498+
cached
499+
TCapturedDecl convertCapturedDeclFromRaw(Raw::Element e) { result = TCapturedDecl(e) }
500+
497501
cached
498502
TClassDecl convertClassDeclFromRaw(Raw::Element e) { result = TClassDecl(e) }
499503

@@ -1465,6 +1469,8 @@ module Synth {
14651469

14661470
cached
14671471
TDecl convertDeclFromRaw(Raw::Element e) {
1472+
result = convertCapturedDeclFromRaw(e)
1473+
or
14681474
result = convertEnumCaseDeclFromRaw(e)
14691475
or
14701476
result = convertExtensionDeclFromRaw(e)
@@ -2125,6 +2131,9 @@ module Synth {
21252131
e = TAssociatedTypeDecl(result)
21262132
}
21272133

2134+
cached
2135+
Raw::Element convertCapturedDeclToRaw(TCapturedDecl e) { e = TCapturedDecl(result) }
2136+
21282137
cached
21292138
Raw::Element convertClassDeclToRaw(TClassDecl e) { e = TClassDecl(result) }
21302139

@@ -3094,6 +3103,8 @@ module Synth {
30943103

30953104
cached
30963105
Raw::Element convertDeclToRaw(TDecl e) {
3106+
result = convertCapturedDeclToRaw(e)
3107+
or
30973108
result = convertEnumCaseDeclToRaw(e)
30983109
or
30993110
result = convertExtensionDeclToRaw(e)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import codeql.swift.elements.DiagnosticsConstructor
66
import codeql.swift.elements.UnspecifiedElementConstructor
77
import codeql.swift.elements.decl.AccessorDeclConstructor
88
import codeql.swift.elements.decl.AssociatedTypeDeclConstructor
9+
import codeql.swift.elements.decl.CapturedDeclConstructor
910
import codeql.swift.elements.decl.ClassDeclConstructor
1011
import codeql.swift.elements.decl.ConcreteFuncDeclConstructor
1112
import codeql.swift.elements.decl.ConcreteVarDeclConstructor
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// generated by codegen/codegen.py
2+
private import codeql.swift.generated.Synth
3+
private import codeql.swift.generated.Raw
4+
import codeql.swift.elements.decl.Decl
5+
import codeql.swift.elements.decl.ValueDecl
6+
7+
module Generated {
8+
class CapturedDecl extends Synth::TCapturedDecl, Decl {
9+
override string getAPrimaryQlClass() { result = "CapturedDecl" }
10+
11+
/**
12+
* Gets the the declaration captured by the parent closure.
13+
*
14+
* This includes nodes from the "hidden" AST. It can be overridden in subclasses to change the
15+
* behavior of both the `Immediate` and non-`Immediate` versions.
16+
*/
17+
ValueDecl getImmediateDecl() {
18+
result =
19+
Synth::convertValueDeclFromRaw(Synth::convertCapturedDeclToRaw(this)
20+
.(Raw::CapturedDecl)
21+
.getDecl())
22+
}
23+
24+
/**
25+
* Gets the the declaration captured by the parent closure.
26+
*/
27+
final ValueDecl getDecl() { result = getImmediateDecl().resolve() }
28+
29+
/**
30+
* Holds if this captured declaration is direct.
31+
*/
32+
predicate isDirect() { Synth::convertCapturedDeclToRaw(this).(Raw::CapturedDecl).isDirect() }
33+
34+
/**
35+
* Holds if this captured declaration is escaping.
36+
*/
37+
predicate isEscaping() {
38+
Synth::convertCapturedDeclToRaw(this).(Raw::CapturedDecl).isEscaping()
39+
}
40+
}
41+
}

swift/ql/lib/codeql/swift/generated/expr/AbstractClosureExpr.qll

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,37 @@
22
private import codeql.swift.generated.Synth
33
private import codeql.swift.generated.Raw
44
import codeql.swift.elements.Callable
5+
import codeql.swift.elements.decl.CapturedDecl
56
import codeql.swift.elements.expr.Expr
67

78
module Generated {
8-
class AbstractClosureExpr extends Synth::TAbstractClosureExpr, Expr, Callable { }
9+
class AbstractClosureExpr extends Synth::TAbstractClosureExpr, Expr, Callable {
10+
/**
11+
* Gets the `index`th capture of this abstract closure expression (0-based).
12+
*
13+
* This includes nodes from the "hidden" AST. It can be overridden in subclasses to change the
14+
* behavior of both the `Immediate` and non-`Immediate` versions.
15+
*/
16+
CapturedDecl getImmediateCapture(int index) {
17+
result =
18+
Synth::convertCapturedDeclFromRaw(Synth::convertAbstractClosureExprToRaw(this)
19+
.(Raw::AbstractClosureExpr)
20+
.getCapture(index))
21+
}
22+
23+
/**
24+
* Gets the `index`th capture of this abstract closure expression (0-based).
25+
*/
26+
final CapturedDecl getCapture(int index) { result = getImmediateCapture(index).resolve() }
27+
28+
/**
29+
* Gets any of the captures of this abstract closure expression.
30+
*/
31+
final CapturedDecl getACapture() { result = getCapture(_) }
32+
33+
/**
34+
* Gets the number of captures of this abstract closure expression.
35+
*/
36+
final int getNumberOfCaptures() { result = count(int i | exists(getCapture(i))) }
37+
}
938
}

0 commit comments

Comments
 (0)