Add subclasses for Array

This commit is contained in:
Arthur Baars
2024-09-06 18:23:01 +02:00
parent 69b05e835c
commit e8277015ab
17 changed files with 364 additions and 60 deletions

19
rust/.generated.list generated
View File

@@ -1,5 +1,4 @@
ql/lib/codeql/rust/elements/Array.qll c33de8fd2c0acbf221441dd67b061d3ab169f0bf548c0c957884455a215fce5c c54c716551746afd895da187e3d03acbe481bdf1ca4461065555641480801c2d
ql/lib/codeql/rust/elements/ArrayConstructor.qll aba72e72a26013fe0c665870bbdc20903ff287d890cbcabc0dc62be32ace8422 6c539b9008c27646c5708f92e8691f41d752676045953516117eb3bb23e3f88c
ql/lib/codeql/rust/elements/AstNode.qll 2069047c779514867c12d845dcdf889db6f27fa6a9e484966a3c28a77973b7d4 e214616c81418b0018c0d36896ac2ec7273634e3213bc8257d8b172f396c00ee
ql/lib/codeql/rust/elements/AsyncBlock.qll ac5899827719dae561540d1c460540bd3242b79ee98f0ea3f9391e98f7a6b680 a0d64b5896fcc2c8292b757645a0041c716ac0e9b85264729898347361061c8b
ql/lib/codeql/rust/elements/AsyncBlockConstructor.qll c094b929e6f3e7053973e80b26b13989e90d603da0cc073679c9e6594c3eceba 95e55c95007e392ebcc43a895bf26ff5983598f7ffb1e3fdee2858ce61b50ea0
@@ -37,6 +36,8 @@ ql/lib/codeql/rust/elements/DbFileConstructor.qll ea93dc49b23b1c6d800ab9d0b9cacf
ql/lib/codeql/rust/elements/DbLocation.qll 1f694594e8e4ab65a8781cd443ad4f864447ca88e2cb65504aee5a779393c84d 003ec72275406eb8f5ddd6ccc2b258fb7c906d4bb2c0ef1ba235f291624321ca
ql/lib/codeql/rust/elements/DbLocationConstructor.qll 8848abace985818a5d3a6eddfc4cb200795970146d282b037b4f22ae6230b894 44dba880e17bb1072fa12451ccaae4830fd04dcc61f7403d35510309fde6906e
ql/lib/codeql/rust/elements/Declaration.qll d4ec5c83728f1837243caf2f27d06fd05ecdd2ca440112accff99bfd37b45e5f c1cd9b297be8b69207e75d24b29949b9f71c78406ee0ffd38d0b0810288d6140
ql/lib/codeql/rust/elements/ElementList.qll e969e89e4375363dc17a779e3b963d63528d72d38ef70810088a2d53c4999cc6 b10f5dda8aa1af683e58c3c86c4d2117f60582a3de2a2f0903b905d333798b47
ql/lib/codeql/rust/elements/ElementListConstructor.qll b21ada740a8a53b3abc63b7b338b55054f03d72e7a3581f9ac11e1c9b99e569e 40cda192387dfe882557b224ee28647330d8471d596b76debc549ebe2d4cf6a2
ql/lib/codeql/rust/elements/Expr.qll a0c2cb3ff9628e5dd1a7900d2413390faa433dcef114bdc85279a3a2bf2fc4d8 a0e8e5693ead91b62da5531e070e11a2105ee49046cb69e63b8747eeafc27651
ql/lib/codeql/rust/elements/ExprStmt.qll afe41d6d05ed9d94b3c8529dad743bdf3e2a0e68bed84a80da4dd6df0257451d c1f0c7c1a3c62baffb7d3bb69cc4bc828e6fbbbabe8f87342ec67d8744fcbe7e
ql/lib/codeql/rust/elements/ExprStmtConstructor.qll 28e37020abdfce5a8666b0c9a3147c339c7a90d9de527f97fc7d36df2bb921ba 5333db932a2edb791ec3c8f2c215f4c74e825a362f45ee901949d81e328bc7fd
@@ -96,6 +97,8 @@ ql/lib/codeql/rust/elements/Ref.qll ce21e04980cd53e453dbe79931418c8527102aab2e2b
ql/lib/codeql/rust/elements/RefConstructor.qll bf669bb7392c120a8125913ee7ef3fe14436a753bff5e8697d4c336cfac0b491 0124097f1831f27b440293dd0fdb70b9d54a61f669b43bdd68e9e2937737dd02
ql/lib/codeql/rust/elements/RefPat.qll 00b2c32e09a02b336d516b7812aa7ffe6202bd1dcdf4ec2060a74ee7a4b1c5c3 90a4b3da60aec10b5d56f6364d0a022c1d7db5fe8cbb65a78f55651d23f9abe7
ql/lib/codeql/rust/elements/RefPatConstructor.qll 98497e0ef76bec0390a23aede2fc6f80050ad2d00bb60f1d473362111a53d4dd e4fde4e3e88c33daee90ab6d90ef2e38b36faedcfe1b6d6304f4eed92980b5b1
ql/lib/codeql/rust/elements/Repeat.qll 9210ab6a659b0e21cefc12903ae4d7f3a3d663d80807c1634a00fbb66803454a a0c0b2187c0b32530d13f047a686a70c09c8efd372fd1afddff1d296e41a2888
ql/lib/codeql/rust/elements/RepeatConstructor.qll 1066aaeb7340979cb35571ec58a80fc79984da5a90541a05e8342715facbdbd6 363c0f4371a1a6c8dd3f29b38e421b4b5062bf53b6ddbc5fc1faa534d25a8359
ql/lib/codeql/rust/elements/Return.qll 60237f2c90a93c0df852eba89a635f0014ce072ec2acb80137a1da07a12e4b16 cc914eecc5d0522e81a41a1901bdf6f4c7535888bc104d9ac30bde243d12210e
ql/lib/codeql/rust/elements/ReturnConstructor.qll cdbbe70dab2be11453f1e98251ee7100d1a043f2d38b141615d3cdd53e3b62cf 8f3227e0eba7b06a9a19195b548807d87ce901a2d09fcaf23c89e53edf9f21a1
ql/lib/codeql/rust/elements/SlicePat.qll 3e88657bd488dcb1ce2fa6f4bf72a9f76c7bfbf64b695070efa0ad89a6af407b ad60e3d0eee368c21c46acb439b599d8867c82193c7279777fea10f3205bd272
@@ -121,8 +124,8 @@ ql/lib/codeql/rust/elements/Yeet.qll 07f967352be486b7e2b787c292c16195a7084699cbd
ql/lib/codeql/rust/elements/YeetConstructor.qll 835afa5ff4b4102335525c41d67380e59f272f95b4b7b0196e0475eae4b9f738 6c51946d661aea16d91010e0639b4ea8f3d161bd56a029e955dc7f7bca025c00
ql/lib/codeql/rust/elements/Yield.qll 9a484b5b5c2c32ef61395213c376ce4b1ef7f699f08330d08faf071ea8919af1 e45fe09b794a2a05a1c125d112dfb36d9c7d538ff1953440d6c580cd8c987f8a
ql/lib/codeql/rust/elements/YieldConstructor.qll 16f393593cf9cf126f048c6f36eba7ca45e78c44577c7bda51c9a66bac95487e f49c9c3d4d17f64f44111bea2bb197cf8b11a0aa88b53b9a527c6aab4733c4b5
ql/lib/codeql/rust/elements.qll 4631074c9b001a91ed3c3bd300d56aa57f518112925a58fbf6333705f500b642 4631074c9b001a91ed3c3bd300d56aa57f518112925a58fbf6333705f500b642
ql/lib/codeql/rust/generated/Array.qll 0858d0b9fa1c5c9fbc21069809d78cef7f39c909eee4f5dc395fd0f8bf4ac622 0858d0b9fa1c5c9fbc21069809d78cef7f39c909eee4f5dc395fd0f8bf4ac622
ql/lib/codeql/rust/elements.qll 031c02392e2e40c7a336c9a09a6b77d29b4ecf2fa81f692b36b6efd8ee576e48 031c02392e2e40c7a336c9a09a6b77d29b4ecf2fa81f692b36b6efd8ee576e48
ql/lib/codeql/rust/generated/Array.qll f9b0821628e9a72487322425ab6b9d232db5f9b24cd76d04e02124da96150667 253ad10a94f3783986ff436d6123d346074f79f0c9046e024abaa626106bc7e3
ql/lib/codeql/rust/generated/AstNode.qll 0598fac7859906f4103124270dfb2fbdb838387b1c45000bf50a4b62c797ec41 f47c84878c7c9676109e358073bddab92a1dbeb4d977d236ecc1eae44d81c894
ql/lib/codeql/rust/generated/AsyncBlock.qll 8ba28deb0ad9d6a887df2033eca4e4a4789a24c09e5ca720d38474226c6dbb0c 8ba28deb0ad9d6a887df2033eca4e4a4789a24c09e5ca720d38474226c6dbb0c
ql/lib/codeql/rust/generated/Await.qll f5d65ee72d03205b95b9f507a4da5706f5c66d0da8b4a8a5d67bfae5643a4766 382ad8a5e1098ec697370cdf5453404128abd9d56a1e578e0255aa29d33fcf74
@@ -144,6 +147,7 @@ ql/lib/codeql/rust/generated/DbFile.qll 4dbf1931124291e0d6a958ae882f8aeef006642f
ql/lib/codeql/rust/generated/DbLocation.qll 735d9351b5eb46a3231b528600dddec3a4122c18c210d4d632a8d4ceaf7f02e9 735d9351b5eb46a3231b528600dddec3a4122c18c210d4d632a8d4ceaf7f02e9
ql/lib/codeql/rust/generated/Declaration.qll bbf5ba3792797a829b0032c41fa99d22c26e4277d655099912cdbafb80f0c8cd c4666a71099b21ad5cd83ef6f991ba18f9bef03b3ffbcedfa10aec081d6501d5
ql/lib/codeql/rust/generated/Element.qll 21567fa7348dccdf69dd34e73cb6de7cc9c7e0f3f7bb419a1abd787f7dc851a1 21567fa7348dccdf69dd34e73cb6de7cc9c7e0f3f7bb419a1abd787f7dc851a1
ql/lib/codeql/rust/generated/ElementList.qll 483c8592ac946216cc2eb5562668d3120629c34dd039c3fab10224d0fd62ddbd df3154df35e89df76a1a77740118d5a41769364bf82b1f00377cd4a3968ff634
ql/lib/codeql/rust/generated/Expr.qll 32cdd43d17e8b2fb7c73ec723eba89704d1e853e29d304db5eea3979fcdd2e0b 0b8382b0659afa1bd1d13d0cd492d7fbdc0fd7a5162fa658ca2973bc15ee6534
ql/lib/codeql/rust/generated/ExprStmt.qll 1aba8c482a307f27612317b4d895ac59389e23ff905b6061931fced12ff7c3d1 c4e42a8863cfe4e83eddcd82236da2dbb1fc7bbdf12cab63d39fd1df4b1cb013
ql/lib/codeql/rust/generated/Field.qll c3249b8dd1aed1978077875fbd6090327d431af8cf8888b432cacfa33b76f976 0977ff2fd039f4d6a82ce209d7a7d60a0747a1a3a29be69cf3f136f76429c917
@@ -169,23 +173,24 @@ ql/lib/codeql/rust/generated/MissingPat.qll 0d8034cee20bacf07ebb9337c797f53a2568
ql/lib/codeql/rust/generated/Module.qll 2a931a4f2cdb2fee00ed83af045ea63d36b7dbd708e58c30445b5610feaae333 cd62add5c31a509f965aa294f44a1607ec7c62e3a9e3fe9ee063b3c814f4eb62
ql/lib/codeql/rust/generated/OffsetOf.qll c5c7218a0dfa6636a4b3e4218969638cc267db94a966b19fbced0ba6f85dbd0e 6c8fac4cd343073ee0ed48498deb7faa65a876776d9ca0a98e51350fead5c8ac
ql/lib/codeql/rust/generated/OrPat.qll f8fe5c7b83a08dabcc530484a696274930040ea13501ae20f1426faeec67bcf0 f3adb3148890531b698570a48740335983a5e81977ba4ac651778f940f184398
ql/lib/codeql/rust/generated/ParentChild.qll 345b5b9fa164fce5886cd06e0739881b28da64870e3b544f8b59556aed85e63d b9395225775cb390d959f617e61a42b39a1a2a201656bdc26315e27f743e8736
ql/lib/codeql/rust/generated/ParentChild.qll 1e2638cdf3cec4dd0a40e1fc61b9e739381f710429252acb80428ca21d270211 5bcc7154e175e4c96b61b47a681b569950612ec168b7ca3ec7368642c3ad3c9d
ql/lib/codeql/rust/generated/Pat.qll fe1c72856442dbab5655eff93f86c2cbce8d69d9fa1f99a0f9203061ea1112a4 d85d86e8b6c48df733589d186f610b1cd9086629180701e017774bddc62402c7
ql/lib/codeql/rust/generated/Path.qll ca8878cd96c31ad9238a1d52487e094863d5abba825d189e0ea6f8d674194b75 ca8878cd96c31ad9238a1d52487e094863d5abba825d189e0ea6f8d674194b75
ql/lib/codeql/rust/generated/PathPat.qll 5869c513e1d0cb689589e2c72f3feda18b0f246d9b03304d8c0f9237f0300524 5869c513e1d0cb689589e2c72f3feda18b0f246d9b03304d8c0f9237f0300524
ql/lib/codeql/rust/generated/PureSynthConstructors.qll 5eb1fc4f6a04172c34ae31e4931e4bf1f8b72fbe414c5f644731a45372d13573 5eb1fc4f6a04172c34ae31e4931e4bf1f8b72fbe414c5f644731a45372d13573
ql/lib/codeql/rust/generated/Range.qll 6278d78c7fba390f51b107892262f9c679c8a31695861a64268e9b74c9575e46 2cb49b0d5d4281c10bdd7ddf187f144cd8490cd792218e977c4108ba98883e06
ql/lib/codeql/rust/generated/RangePat.qll 6ec95f6cb9c4bd93b38990bb1e3b89b526624305ac6ee7b94e6fb0a2f3db28fc 0e193f3816a7587d5103dba421bc2bf22b869522353d4e3f43d49a792eac6cf4
ql/lib/codeql/rust/generated/Raw.qll 2836b68a614049752714f4929eb5e978383c5dc8bbe9d2fa67c7f0fbfca95eda 0237eedfa08d195d411e1e98f4bfa0fd9bebcf7765c49ca50c47a4d3fad1271f
ql/lib/codeql/rust/generated/Raw.qll 0ca064561f7375659dc2b84ca8881d4f39b85880c9efb7802377787fb58e2052 ad925674e73d113b4d33c8b4fd556770bfbcf9d0ab180dbf0253c61c123bfec7
ql/lib/codeql/rust/generated/RecordLit.qll ae3c644237abab89e0443dfcf584906a9714792be755ce3f9fcdae5958024243 ae3c644237abab89e0443dfcf584906a9714792be755ce3f9fcdae5958024243
ql/lib/codeql/rust/generated/RecordPat.qll 8c206be87b5738c6107db72cbe4d97a67e55060e92c0a3148fad84092d70f5e7 8c206be87b5738c6107db72cbe4d97a67e55060e92c0a3148fad84092d70f5e7
ql/lib/codeql/rust/generated/Ref.qll d26cc357f65fb51a5c07863406f732debe3dc02542b415b281ec582efa08a362 9d62dd9a99e158abc7b42c4e011a5dd0db4dfbce25ab6fe5c600354c18a236bd
ql/lib/codeql/rust/generated/RefPat.qll 3525331e8ba25a8612324e860423a39ddb29e8eb50a9f2bf62e49bf182d64b6d 804efbd32869f92e5515d34852fed6416288f99b0aab95b5be5cb5bdd1eea806
ql/lib/codeql/rust/generated/Repeat.qll ba4a6b643a6d16924b138a1a585fe059d8d094592fa49329e4061ee18c31abc5 4be73736804193d127f968fa6cef1a264753d079f325d8724d258f16df1f3286
ql/lib/codeql/rust/generated/Return.qll 9664cd51675a9a6ddfe7795b79f491c3834588e0bbc3b25863c621486f46a5f7 b38067c9bbcb0c4a4d2b59d76e81afcca7bc1b72caea91c1a79a7b7526390511
ql/lib/codeql/rust/generated/SlicePat.qll f013be99f2c287e1d97aac95e72010c1e0a95a5efef90fde10e22a828345cac5 3a9c56d4e13f3b6a8e677586912f5a9b1e090b543911c31be33947479b0e9533
ql/lib/codeql/rust/generated/Stmt.qll 55688c8f42f6e7fd1b871e572d75fac60d0543e38c4be4638abbb00187651d3d f978006a8453137f989249e849a7c935a090da3a9b0116145da80068760e12fd
ql/lib/codeql/rust/generated/Synth.qll b1bacde93009d59195d61882f1faceee5e39a628328fa9d6cdd43f3df8898d22 dc6e278bf9ee8a4ab275f6f8f0de62529547a2a646510637e9dedf71b97343b0
ql/lib/codeql/rust/generated/SynthConstructors.qll 1fc8279b904e4388af746ca1355381509ac242530856a01d7e8fbdba482cc273 1fc8279b904e4388af746ca1355381509ac242530856a01d7e8fbdba482cc273
ql/lib/codeql/rust/generated/Synth.qll cf37698f44ca6786d3067ab9bc2501664988903cdfe5265aa78838727caca966 1d06d446f064da7e11fb7779030be0f00e5e10a3618e4148c50c0932a090632a
ql/lib/codeql/rust/generated/SynthConstructors.qll cf79523cb4d14dfcc92c7531e024a966139c99efc170cb86f2035b595c1d5bfd cf79523cb4d14dfcc92c7531e024a966139c99efc170cb86f2035b595c1d5bfd
ql/lib/codeql/rust/generated/Tuple.qll 3fde94f0c23c6af6bcb58d0245a3cd0a8bbd6ef7999fbeed805baf2615e6226d c1aa7fc201aebb34dc6cd7760e817032b86fd16b8facac450c74deda860bc821
ql/lib/codeql/rust/generated/TuplePat.qll fdb2c66fe6291106fe125de6a91c4d74b2c715d276c2fee9751d0523b618d095 330098460ccac28479a2b522048d6f1191bf01b40b3eceef4adf722c01c8360b
ql/lib/codeql/rust/generated/TupleStructPat.qll 955e720b880bb9699ac402edc6774bb9aff4eb2fdf08d08b72f7db4ef4673b36 955e720b880bb9699ac402edc6774bb9aff4eb2fdf08d08b72f7db4ef4673b36

7
rust/.gitattributes generated vendored
View File

@@ -1,7 +1,6 @@
/.generated.list linguist-generated
/.gitattributes linguist-generated
/ql/lib/codeql/rust/elements/Array.qll linguist-generated
/ql/lib/codeql/rust/elements/ArrayConstructor.qll linguist-generated
/ql/lib/codeql/rust/elements/AstNode.qll linguist-generated
/ql/lib/codeql/rust/elements/AsyncBlock.qll linguist-generated
/ql/lib/codeql/rust/elements/AsyncBlockConstructor.qll linguist-generated
@@ -39,6 +38,8 @@
/ql/lib/codeql/rust/elements/DbLocation.qll linguist-generated
/ql/lib/codeql/rust/elements/DbLocationConstructor.qll linguist-generated
/ql/lib/codeql/rust/elements/Declaration.qll linguist-generated
/ql/lib/codeql/rust/elements/ElementList.qll linguist-generated
/ql/lib/codeql/rust/elements/ElementListConstructor.qll linguist-generated
/ql/lib/codeql/rust/elements/Expr.qll linguist-generated
/ql/lib/codeql/rust/elements/ExprStmt.qll linguist-generated
/ql/lib/codeql/rust/elements/ExprStmtConstructor.qll linguist-generated
@@ -98,6 +99,8 @@
/ql/lib/codeql/rust/elements/RefConstructor.qll linguist-generated
/ql/lib/codeql/rust/elements/RefPat.qll linguist-generated
/ql/lib/codeql/rust/elements/RefPatConstructor.qll linguist-generated
/ql/lib/codeql/rust/elements/Repeat.qll linguist-generated
/ql/lib/codeql/rust/elements/RepeatConstructor.qll linguist-generated
/ql/lib/codeql/rust/elements/Return.qll linguist-generated
/ql/lib/codeql/rust/elements/ReturnConstructor.qll linguist-generated
/ql/lib/codeql/rust/elements/SlicePat.qll linguist-generated
@@ -146,6 +149,7 @@
/ql/lib/codeql/rust/generated/DbLocation.qll linguist-generated
/ql/lib/codeql/rust/generated/Declaration.qll linguist-generated
/ql/lib/codeql/rust/generated/Element.qll linguist-generated
/ql/lib/codeql/rust/generated/ElementList.qll linguist-generated
/ql/lib/codeql/rust/generated/Expr.qll linguist-generated
/ql/lib/codeql/rust/generated/ExprStmt.qll linguist-generated
/ql/lib/codeql/rust/generated/Field.qll linguist-generated
@@ -183,6 +187,7 @@
/ql/lib/codeql/rust/generated/RecordPat.qll linguist-generated
/ql/lib/codeql/rust/generated/Ref.qll linguist-generated
/ql/lib/codeql/rust/generated/RefPat.qll linguist-generated
/ql/lib/codeql/rust/generated/Repeat.qll linguist-generated
/ql/lib/codeql/rust/generated/Return.qll linguist-generated
/ql/lib/codeql/rust/generated/SlicePat.qll linguist-generated
/ql/lib/codeql/rust/generated/Stmt.qll linguist-generated

View File

@@ -105,25 +105,6 @@ impl TrapEntry for TypeRef {
}
}
#[derive(Debug)]
pub struct Array {
pub id: TrapId,
pub location: Option<trap::Label>,
}
impl TrapEntry for Array {
fn extract_id(&mut self) -> TrapId {
std::mem::replace(&mut self.id, TrapId::Star)
}
fn emit(self, id: trap::Label, out: &mut trap::Writer) {
out.add_tuple("arrays", vec![trap::Arg::Label(id)]);
if let Some(v) = self.location {
out.add_tuple("locatable_locations", vec![trap::Arg::Label(id), v.into()]);
}
}
}
#[derive(Debug)]
pub struct Await {
pub id: TrapId,
@@ -1325,6 +1306,54 @@ impl TrapEntry for Block {
}
}
#[derive(Debug)]
pub struct ElementList {
pub id: TrapId,
pub location: Option<trap::Label>,
pub elements: Vec<trap::Label>,
pub is_assignee_expr: bool,
}
impl TrapEntry for ElementList {
fn extract_id(&mut self) -> TrapId {
std::mem::replace(&mut self.id, TrapId::Star)
}
fn emit(self, id: trap::Label, out: &mut trap::Writer) {
out.add_tuple("element_lists", vec![trap::Arg::Label(id)]);
if let Some(v) = self.location {
out.add_tuple("locatable_locations", vec![trap::Arg::Label(id), v.into()]);
}
for (i, &v) in self.elements.iter().enumerate() {
out.add_tuple("element_list_elements", vec![trap::Arg::Label(id), i.into(), v.into()]);
}
if self.is_assignee_expr {
out.add_tuple("element_list_is_assignee_expr", vec![trap::Arg::Label(id)]);
}
}
}
#[derive(Debug)]
pub struct Repeat {
pub id: TrapId,
pub location: Option<trap::Label>,
pub initializer: trap::Label,
pub repeat: trap::Label,
}
impl TrapEntry for Repeat {
fn extract_id(&mut self) -> TrapId {
std::mem::replace(&mut self.id, TrapId::Star)
}
fn emit(self, id: trap::Label, out: &mut trap::Writer) {
out.add_tuple("repeats", vec![trap::Arg::Label(id), self.initializer.into(), self.repeat.into()]);
if let Some(v) = self.location {
out.add_tuple("locatable_locations", vec![trap::Arg::Label(id), v.into()]);
}
}
}
#[derive(Debug)]
pub struct UnsafeBlock {
pub id: TrapId,

View File

@@ -25,6 +25,7 @@ import codeql.rust.elements.DbFile
import codeql.rust.elements.DbLocation
import codeql.rust.elements.Declaration
import codeql.rust.elements.Element
import codeql.rust.elements.ElementList
import codeql.rust.elements.Expr
import codeql.rust.elements.ExprStmt
import codeql.rust.elements.Field
@@ -59,6 +60,7 @@ import codeql.rust.elements.RecordLit
import codeql.rust.elements.RecordPat
import codeql.rust.elements.Ref
import codeql.rust.elements.RefPat
import codeql.rust.elements.Repeat
import codeql.rust.elements.Return
import codeql.rust.elements.SlicePat
import codeql.rust.elements.Stmt

View File

@@ -0,0 +1,8 @@
// generated by codegen, remove this comment if you wish to edit this file
/**
* This module provides a hand-modifiable wrapper around the generated class `ElementList`.
*/
private import codeql.rust.generated.ElementList
class ElementList extends Generated::ElementList { }

View File

@@ -0,0 +1,14 @@
// generated by codegen, remove this comment if you wish to edit this file
/**
* This module defines the hook used internally to tweak the characteristic predicate of
* `ElementList` synthesized instances.
* INTERNAL: Do not use.
*/
private import codeql.rust.generated.Raw
/**
* The characteristic predicate of `ElementList` synthesized instances.
* INTERNAL: Do not use.
*/
predicate constructElementList(Raw::ElementList id) { any() }

View File

@@ -0,0 +1,8 @@
// generated by codegen, remove this comment if you wish to edit this file
/**
* This module provides a hand-modifiable wrapper around the generated class `Repeat`.
*/
private import codeql.rust.generated.Repeat
class Repeat extends Generated::Repeat { }

View File

@@ -1,14 +1,14 @@
// generated by codegen, remove this comment if you wish to edit this file
/**
* This module defines the hook used internally to tweak the characteristic predicate of
* `Array` synthesized instances.
* `Repeat` synthesized instances.
* INTERNAL: Do not use.
*/
private import codeql.rust.generated.Raw
/**
* The characteristic predicate of `Array` synthesized instances.
* The characteristic predicate of `Repeat` synthesized instances.
* INTERNAL: Do not use.
*/
predicate constructArray(Raw::Array id) { any() }
predicate constructRepeat(Raw::Repeat id) { any() }

View File

@@ -17,7 +17,5 @@ module Generated {
* INTERNAL: Do not reference the `Generated::Array` class directly.
* Use the subclass `Array`, where the following predicates are available.
*/
class Array extends Synth::TArray, Expr {
override string getAPrimaryQlClass() { result = "Array" }
}
class Array extends Synth::TArray, Expr { }
}

View File

@@ -0,0 +1,51 @@
// generated by codegen
/**
* This module provides the generated definition of `ElementList`.
* INTERNAL: Do not import directly.
*/
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.Array
import codeql.rust.elements.Expr
/**
* INTERNAL: This module contains the fully generated definition of `ElementList` and should not
* be referenced directly.
*/
module Generated {
/**
* INTERNAL: Do not reference the `Generated::ElementList` class directly.
* Use the subclass `ElementList`, where the following predicates are available.
*/
class ElementList extends Synth::TElementList, Array {
override string getAPrimaryQlClass() { result = "ElementList" }
/**
* Gets the `index`th element of this element list (0-based).
*/
Expr getElement(int index) {
result =
Synth::convertExprFromRaw(Synth::convertElementListToRaw(this)
.(Raw::ElementList)
.getElement(index))
}
/**
* Gets any of the elements of this element list.
*/
final Expr getAnElement() { result = this.getElement(_) }
/**
* Gets the number of elements of this element list.
*/
final int getNumberOfElements() { result = count(int i | exists(this.getElement(i))) }
/**
* Holds if this element list is assignee expression.
*/
predicate isAssigneeExpr() {
Synth::convertElementListToRaw(this).(Raw::ElementList).isAssigneeExpr()
}
}
}

View File

@@ -925,6 +925,34 @@ private module Impl {
)
}
private Element getImmediateChildOfElementList(
ElementList e, int index, string partialPredicateCall
) {
exists(int b, int bArray, int n |
b = 0 and
bArray = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfArray(e, i, _)) | i) and
n = bArray and
(
none()
or
result = getImmediateChildOfArray(e, index - b, partialPredicateCall)
)
)
}
private Element getImmediateChildOfRepeat(Repeat e, int index, string partialPredicateCall) {
exists(int b, int bArray, int n |
b = 0 and
bArray = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfArray(e, i, _)) | i) and
n = bArray and
(
none()
or
result = getImmediateChildOfArray(e, index - b, partialPredicateCall)
)
)
}
private Element getImmediateChildOfUnsafeBlock(
UnsafeBlock e, int index, string partialPredicateCall
) {
@@ -960,8 +988,6 @@ private module Impl {
or
result = getImmediateChildOfTypeRef(e, index, partialAccessor)
or
result = getImmediateChildOfArray(e, index, partialAccessor)
or
result = getImmediateChildOfAwait(e, index, partialAccessor)
or
result = getImmediateChildOfBecome(e, index, partialAccessor)
@@ -1066,6 +1092,10 @@ private module Impl {
or
result = getImmediateChildOfBlock(e, index, partialAccessor)
or
result = getImmediateChildOfElementList(e, index, partialAccessor)
or
result = getImmediateChildOfRepeat(e, index, partialAccessor)
or
result = getImmediateChildOfUnsafeBlock(e, index, partialAccessor)
}
}

View File

@@ -143,9 +143,7 @@ module Raw {
/**
* INTERNAL: Do not use.
*/
class Array extends @array, Expr {
override string toString() { result = "Array" }
}
class Array extends @array, Expr { }
/**
* INTERNAL: Do not use.
@@ -901,6 +899,40 @@ module Raw {
Label getLabel() { block_labels(this, result) }
}
/**
* INTERNAL: Do not use.
*/
class ElementList extends @element_list, Array {
override string toString() { result = "ElementList" }
/**
* Gets the `index`th element of this element list (0-based).
*/
Expr getElement(int index) { element_list_elements(this, index, result) }
/**
* Holds if this element list is assignee expression.
*/
predicate isAssigneeExpr() { element_list_is_assignee_expr(this) }
}
/**
* INTERNAL: Do not use.
*/
class Repeat extends @repeat, Array {
override string toString() { result = "Repeat" }
/**
* Gets the initializer of this repeat.
*/
Expr getInitializer() { repeats(this, result, _) }
/**
* Gets the repeat of this repeat.
*/
Expr getRepeat() { repeats(this, _, result) }
}
/**
* INTERNAL: Do not use.
*/

View File

@@ -0,0 +1,39 @@
// generated by codegen
/**
* This module provides the generated definition of `Repeat`.
* INTERNAL: Do not import directly.
*/
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.Array
import codeql.rust.elements.Expr
/**
* INTERNAL: This module contains the fully generated definition of `Repeat` and should not
* be referenced directly.
*/
module Generated {
/**
* INTERNAL: Do not reference the `Generated::Repeat` class directly.
* Use the subclass `Repeat`, where the following predicates are available.
*/
class Repeat extends Synth::TRepeat, Array {
override string getAPrimaryQlClass() { result = "Repeat" }
/**
* Gets the initializer of this repeat.
*/
Expr getInitializer() {
result =
Synth::convertExprFromRaw(Synth::convertRepeatToRaw(this).(Raw::Repeat).getInitializer())
}
/**
* Gets the repeat of this repeat.
*/
Expr getRepeat() {
result = Synth::convertExprFromRaw(Synth::convertRepeatToRaw(this).(Raw::Repeat).getRepeat())
}
}
}

View File

@@ -15,10 +15,6 @@ module Synth {
*/
cached
newtype TElement =
/**
* INTERNAL: Do not use.
*/
TArray(Raw::Array id) { constructArray(id) } or
/**
* INTERNAL: Do not use.
*/
@@ -87,6 +83,10 @@ module Synth {
* INTERNAL: Do not use.
*/
TDbLocation(Raw::DbLocation id) { constructDbLocation(id) } or
/**
* INTERNAL: Do not use.
*/
TElementList(Raw::ElementList id) { constructElementList(id) } or
/**
* INTERNAL: Do not use.
*/
@@ -203,6 +203,10 @@ module Synth {
* INTERNAL: Do not use.
*/
TRefPat(Raw::RefPat id) { constructRefPat(id) } or
/**
* INTERNAL: Do not use.
*/
TRepeat(Raw::Repeat id) { constructRepeat(id) } or
/**
* INTERNAL: Do not use.
*/
@@ -260,6 +264,11 @@ module Synth {
*/
TYield(Raw::Yield id) { constructYield(id) }
/**
* INTERNAL: Do not use.
*/
class TArray = TElementList or TRepeat;
/**
* INTERNAL: Do not use.
*/
@@ -312,13 +321,6 @@ module Synth {
*/
class TStmt = TExprStmt or TIfLet or TItemStmt;
/**
* INTERNAL: Do not use.
* Converts a raw element to a synthesized `TArray`, if possible.
*/
cached
TArray convertArrayFromRaw(Raw::Element e) { result = TArray(e) }
/**
* INTERNAL: Do not use.
* Converts a raw element to a synthesized `TAsyncBlock`, if possible.
@@ -438,6 +440,13 @@ module Synth {
cached
TDbLocation convertDbLocationFromRaw(Raw::Element e) { result = TDbLocation(e) }
/**
* INTERNAL: Do not use.
* Converts a raw element to a synthesized `TElementList`, if possible.
*/
cached
TElementList convertElementListFromRaw(Raw::Element e) { result = TElementList(e) }
/**
* INTERNAL: Do not use.
* Converts a raw element to a synthesized `TExprStmt`, if possible.
@@ -641,6 +650,13 @@ module Synth {
cached
TRefPat convertRefPatFromRaw(Raw::Element e) { result = TRefPat(e) }
/**
* INTERNAL: Do not use.
* Converts a raw element to a synthesized `TRepeat`, if possible.
*/
cached
TRepeat convertRepeatFromRaw(Raw::Element e) { result = TRepeat(e) }
/**
* INTERNAL: Do not use.
* Converts a raw element to a synthesized `TReturn`, if possible.
@@ -739,6 +755,17 @@ module Synth {
cached
TYield convertYieldFromRaw(Raw::Element e) { result = TYield(e) }
/**
* INTERNAL: Do not use.
* Converts a raw DB element to a synthesized `TArray`, if possible.
*/
cached
TArray convertArrayFromRaw(Raw::Element e) {
result = convertElementListFromRaw(e)
or
result = convertRepeatFromRaw(e)
}
/**
* INTERNAL: Do not use.
* Converts a raw DB element to a synthesized `TAstNode`, if possible.
@@ -947,13 +974,6 @@ module Synth {
result = convertItemStmtFromRaw(e)
}
/**
* INTERNAL: Do not use.
* Converts a synthesized `TArray` to a raw DB element, if possible.
*/
cached
Raw::Element convertArrayToRaw(TArray e) { e = TArray(result) }
/**
* INTERNAL: Do not use.
* Converts a synthesized `TAsyncBlock` to a raw DB element, if possible.
@@ -1073,6 +1093,13 @@ module Synth {
cached
Raw::Element convertDbLocationToRaw(TDbLocation e) { e = TDbLocation(result) }
/**
* INTERNAL: Do not use.
* Converts a synthesized `TElementList` to a raw DB element, if possible.
*/
cached
Raw::Element convertElementListToRaw(TElementList e) { e = TElementList(result) }
/**
* INTERNAL: Do not use.
* Converts a synthesized `TExprStmt` to a raw DB element, if possible.
@@ -1276,6 +1303,13 @@ module Synth {
cached
Raw::Element convertRefPatToRaw(TRefPat e) { e = TRefPat(result) }
/**
* INTERNAL: Do not use.
* Converts a synthesized `TRepeat` to a raw DB element, if possible.
*/
cached
Raw::Element convertRepeatToRaw(TRepeat e) { e = TRepeat(result) }
/**
* INTERNAL: Do not use.
* Converts a synthesized `TReturn` to a raw DB element, if possible.
@@ -1374,6 +1408,17 @@ module Synth {
cached
Raw::Element convertYieldToRaw(TYield e) { e = TYield(result) }
/**
* INTERNAL: Do not use.
* Converts a synthesized `TArray` to a raw DB element, if possible.
*/
cached
Raw::Element convertArrayToRaw(TArray e) {
result = convertElementListToRaw(e)
or
result = convertRepeatToRaw(e)
}
/**
* INTERNAL: Do not use.
* Converts a synthesized `TAstNode` to a raw DB element, if possible.

View File

@@ -3,7 +3,6 @@
* This module exports all modules providing `Element` subclasses.
*/
import codeql.rust.elements.ArrayConstructor
import codeql.rust.elements.AsyncBlockConstructor
import codeql.rust.elements.AwaitConstructor
import codeql.rust.elements.BecomeConstructor
@@ -21,6 +20,7 @@ import codeql.rust.elements.ConstBlockPatConstructor
import codeql.rust.elements.ContinueConstructor
import codeql.rust.elements.DbFileConstructor
import codeql.rust.elements.DbLocationConstructor
import codeql.rust.elements.ElementListConstructor
import codeql.rust.elements.ExprStmtConstructor
import codeql.rust.elements.FieldConstructor
import codeql.rust.elements.FunctionConstructor
@@ -50,6 +50,7 @@ import codeql.rust.elements.RecordLitConstructor
import codeql.rust.elements.RecordPatConstructor
import codeql.rust.elements.RefConstructor
import codeql.rust.elements.RefPatConstructor
import codeql.rust.elements.RepeatConstructor
import codeql.rust.elements.ReturnConstructor
import codeql.rust.elements.SlicePatConstructor
import codeql.rust.elements.TupleConstructor

View File

@@ -154,9 +154,10 @@ type_refs(
unique int id: @type_ref
);
arrays(
unique int id: @array
);
@array =
@element_list
| @repeat
;
awaits(
unique int id: @await,
@@ -662,6 +663,28 @@ block_labels(
int label: @label ref
);
element_lists(
unique int id: @element_list
);
#keyset[id, index]
element_list_elements(
int id: @element_list ref,
int index: int ref,
int element: @expr ref
);
#keyset[id]
element_list_is_assignee_expr(
int id: @element_list ref
);
repeats(
unique int id: @repeat,
int initializer: @expr ref,
int repeat: @expr ref
);
unsafe_blocks(
unique int id: @unsafe_block
);

View File

@@ -425,6 +425,20 @@ class Array(Expr):
pass
# Literal(Literal),
# ElementList { elements: Box<[ExprId]>, is_assignee_expr: bool },
class ElementList(Array):
elements: list[Expr]
is_assignee_expr: predicate
# Repeat { initializer: ExprId, repeat: ExprId },
class Repeat(Array):
initializer: Expr
repeat: Expr
class Literal(Expr):
pass