Add Label class

This commit is contained in:
Arthur Baars
2024-09-06 12:42:43 +02:00
parent e14b626917
commit a33c7703cd
17 changed files with 181 additions and 30 deletions

21
rust/.generated.list generated
View File

@@ -53,6 +53,8 @@ ql/lib/codeql/rust/elements/InlineAsm.qll 3ff6a13840a083ac39672aa694213b3740bc2c
ql/lib/codeql/rust/elements/InlineAsmConstructor.qll 3923d1b0d772e0686ce891e63c39b984fabbc9c2656f9177df1696e85eff12bf 3ce886c37495ee40eb9d12c2b4ee0222b34f3d9df5a23a47ea2e629c54c30a58
ql/lib/codeql/rust/elements/ItemStmt.qll 70fc3f9df9794dc78199dfd81b8136701d4ca0c9b3c6e88ecec42f75fbc41f32 df122241e3868b1c376e2d2501328ad47020a0837826f165c7e54640bc018156
ql/lib/codeql/rust/elements/ItemStmtConstructor.qll cd27051f73ab2897b1f7a725313f97d36507fc9f5e0dd7b2ad8bd1caaf8c42ad 67596c97386fbe6cb9e5e6abc45b674158f411d927297345cb25359587380bcd
ql/lib/codeql/rust/elements/Label.qll f48209b24876d581e95120bc548c44033b6552a7875eea73ce44aa57b675eeb3 d17163f3adc9f94a462269f565153aa2822533d03487e521d9c5d5e72afaa1ac
ql/lib/codeql/rust/elements/LabelConstructor.qll 0625a149cb34b9f603b76efd76e679bb63808d47f9fa529959784347d8e7d447 2115bc7de878af444777f96247bc0a775161f3766e38c3c4d363c2f59b2144da
ql/lib/codeql/rust/elements/Let.qll 2148dd54c4f109f1668b724d547ee4e4fe86820fa554a57f2806da102ec8d5cf 7a44c96aadba848b36d26325499d2011e3a1f2f3ee26f78b9202fc39130a6a57
ql/lib/codeql/rust/elements/LetConstructor.qll c696cefd2d2c8e2a56e5df6e63cd5302833bf5bc1d16ff87666cd8a8b01eb7f0 8065946e2b996abbd58fef9f03ae30c98369367153acd8681a87422d07b36a68
ql/lib/codeql/rust/elements/LitPat.qll 539b414883b0b86ff446fa81254f2c71f467e5ea0bda21dc3bd66cf3abf95b13 d54eeb618cfb8f0c4a48ce5ab1922fca2622f4a0c703760aa344028172f37642
@@ -119,7 +121,7 @@ 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 e1531dc71a60381eb4b708b966a8f9645ef39cb1aebd2cf7a5dfd2e17fff6c5a e1531dc71a60381eb4b708b966a8f9645ef39cb1aebd2cf7a5dfd2e17fff6c5a
ql/lib/codeql/rust/elements.qll 4631074c9b001a91ed3c3bd300d56aa57f518112925a58fbf6333705f500b642 4631074c9b001a91ed3c3bd300d56aa57f518112925a58fbf6333705f500b642
ql/lib/codeql/rust/generated/Array.qll 0858d0b9fa1c5c9fbc21069809d78cef7f39c909eee4f5dc395fd0f8bf4ac622 0858d0b9fa1c5c9fbc21069809d78cef7f39c909eee4f5dc395fd0f8bf4ac622
ql/lib/codeql/rust/generated/AstNode.qll 0598fac7859906f4103124270dfb2fbdb838387b1c45000bf50a4b62c797ec41 f47c84878c7c9676109e358073bddab92a1dbeb4d977d236ecc1eae44d81c894
ql/lib/codeql/rust/generated/AsyncBlock.qll 8ba28deb0ad9d6a887df2033eca4e4a4789a24c09e5ca720d38474226c6dbb0c 8ba28deb0ad9d6a887df2033eca4e4a4789a24c09e5ca720d38474226c6dbb0c
@@ -127,17 +129,17 @@ ql/lib/codeql/rust/generated/Await.qll f5d65ee72d03205b95b9f507a4da5706f5c66d0da
ql/lib/codeql/rust/generated/Become.qll 7cfe61271eb91293014ebf16cd1029454705f4b569bba8afeec7d683f378efaf 9a31140d67ae8e77762aa2bd09ab018c88fe464a1b2205035e957d889abfe42a
ql/lib/codeql/rust/generated/BinaryOp.qll ec80f6cb6a0a03496814a629ecc8736f77c46e22a6c26b4e11fe1e650eb91441 67cd9c875556034a7afe78857c2d50d9ae1af084bee87e0d0c691c8baaaae72f
ql/lib/codeql/rust/generated/BindPat.qll 15d3a33c5f56f7659a331f72735f00930fddd6066659e54c5c19d5e7eb8ef078 bc0a916622b2c426b71760caf15b8e005eed276e06e04d04cc5f19f4c31c34f6
ql/lib/codeql/rust/generated/Block.qll 7a50beadbbe3e7f778797b4a69ba20c56c389803335cec54a701761e74d94cf8 93c5148dc0540fca7233a231ecd5d4e744a1e73398306a652db521ce560bba47
ql/lib/codeql/rust/generated/Block.qll 25ce7676fb0a0925f039cb35ba94283d7c4a2fb806652374a198b56796497111 8efecec53c2964e546ce7ed6328f89923c57d58d572d42b63423b99709b50077
ql/lib/codeql/rust/generated/BlockBase.qll f1984b819cb8d2257c7e6323041c32bc106153c1a3fba75f052a545b84e9f09f 7e2767cee8967b5b8a53c1ad1de578a11f46629422ff1b2cebe051fe53293a91
ql/lib/codeql/rust/generated/Box.qll c64ff6a3e495d5729e091d275f04573ca820df2df1f42773dd04b0da0bf1d3d1 6d0778ae8347530f9ed5be9b24206f02d9437dd5265fdb308dfefce70f5d8829
ql/lib/codeql/rust/generated/BoxPat.qll b69ba2bc341a1bf4c613279e45fb97a530619d4148d5ccc4f05436a316db29eb bf52730243bd1836d5890c745232aba50544c2046d00e80e7d22eebcd104f821
ql/lib/codeql/rust/generated/Break.qll a1131a39a8b57398937b7e35108c83a92aabb284289acf5e8da1bbb9e603ae8d 4a2059cc94e028f080e984e485f1760c92ad2def6993ba68e023a2c9720ba00a
ql/lib/codeql/rust/generated/Break.qll 36f28582b12840a529514fcf0aac84ceaa452eca4442b347dd7b199659833ec7 ff03dc895c3c2baca41b17d358863cf9bd9209dc306d95c22f03db0716f664c7
ql/lib/codeql/rust/generated/Call.qll b2dc0c89cc8ca855cf38b82b5bcbbf0fb5cce2b5dafbb3eb253accea89818908 13441bcc3f0f68595cea49c4af14165335e67ceb83d2546ab4c45a5d054c2923
ql/lib/codeql/rust/generated/Cast.qll bfd3e61c0a7458adbed7d63bd5351ebdfcb11d42769fc2d34bafa6523f6e94ba e46d9a648e23a5e15e5c02d5d9666d827ef4732b7ac6b2edfc00d56cc239c845
ql/lib/codeql/rust/generated/Closure.qll e6f93c79fe2a9a5f842b30d443d4abb64a72bf400102d2e2287e0a1885bfd0df 4659dfc3b325c44c82013c5e198144ad93dba9c1ee43a0efaa4b83262b7db7f4
ql/lib/codeql/rust/generated/Const.qll a1c6725f1b7b2482dfd996d44ec695c63230c1c28ee00d9bf694dd3f01831323 a1c6725f1b7b2482dfd996d44ec695c63230c1c28ee00d9bf694dd3f01831323
ql/lib/codeql/rust/generated/ConstBlockPat.qll d0818fe4cee066f1e6d3439c82122942ae62941e69da686b7d5c399e820c395c 2fae5a2f0457bb7106d52ac7457afb597d7ac9658b8dcff8e76294f5fe34019a
ql/lib/codeql/rust/generated/Continue.qll 73a86f272288f0383b8cb3a8f72e954447a343715d8d82b2b58729077295905f e5d6cc9c7b0c47f01b8a5f076cc5790e837ade852b485ac8c323c540b7e7cd23
ql/lib/codeql/rust/generated/Continue.qll 2aa6a5c99a66a852ee15322f931eeaeb2020732267a33e44adbc5218a77aa994 faf0c36fb1773233dd3c8f43bfb84037a36ef96d0f5b97b01865faf4ff79891e
ql/lib/codeql/rust/generated/DbFile.qll 4dbf1931124291e0d6a958ae882f8aeef006642f72adc7ff86cffd3a4e9a970a 4dbf1931124291e0d6a958ae882f8aeef006642f72adc7ff86cffd3a4e9a970a
ql/lib/codeql/rust/generated/DbLocation.qll 735d9351b5eb46a3231b528600dddec3a4122c18c210d4d632a8d4ceaf7f02e9 735d9351b5eb46a3231b528600dddec3a4122c18c210d4d632a8d4ceaf7f02e9
ql/lib/codeql/rust/generated/Declaration.qll bbf5ba3792797a829b0032c41fa99d22c26e4277d655099912cdbafb80f0c8cd c4666a71099b21ad5cd83ef6f991ba18f9bef03b3ffbcedfa10aec081d6501d5
@@ -152,12 +154,13 @@ ql/lib/codeql/rust/generated/IfLet.qll 0f51d1f708282a622d075e635698b2020b7d21e77
ql/lib/codeql/rust/generated/Index.qll f1b78db475006a0779a079f9600987932e638bcfaf35ce4e9b2b872798e35d50 7fa2b22497c3bd80161f7e3ef5477c82a0d4f961dce557ed3fd1a62d9f9328f7
ql/lib/codeql/rust/generated/InlineAsm.qll f21e507aca81649070c44141e6af121f1a8337850966011158accf8f2b26e6a2 f21e507aca81649070c44141e6af121f1a8337850966011158accf8f2b26e6a2
ql/lib/codeql/rust/generated/ItemStmt.qll b4d2a06fdd00ea90eed2742bacf0a5781b8ad69e24df794ec075d7305220afaa b4d2a06fdd00ea90eed2742bacf0a5781b8ad69e24df794ec075d7305220afaa
ql/lib/codeql/rust/generated/Label.qll 7de504ea71f2847e305ab5ea3b30403cb0aafbaa0eb4cff3956a2931da6c024b 61e3c6a74b573aadcccefe0d4abe5d8e2542b1e5116c95f4e595b36efa3a86dc
ql/lib/codeql/rust/generated/Let.qll 2cdec11bcb64d8c5c9db9ff3c8fff41fc4e5e705c0ff4327ae053ff10579fb6d c7e1742274635ded0088acdfe8cbc9e9d967f27e833ac8a1a37e3a06d207f004
ql/lib/codeql/rust/generated/LitPat.qll 92c3c0f32ab9d5b08e246231e5465fe18536dee99351f73e158048bb007baf8a 6736a7824e5bdb0cc16de1231bdb5169d2f48251d5917bf2c31a36422b0bf2fd
ql/lib/codeql/rust/generated/Literal.qll eba217bbd4917c3674406c9538a0114d77d04f23467c4a362898a3020cb7d999 eba217bbd4917c3674406c9538a0114d77d04f23467c4a362898a3020cb7d999
ql/lib/codeql/rust/generated/Locatable.qll 9e9685bba50ad2220701f3465e63af9331f7f9dc548ad906ff954fc2ce0a4400 78c89b2cc78a357d682ab65310dd474603071f07c1eaaab07711714ce17549f2
ql/lib/codeql/rust/generated/Location.qll bce4c72988ec6fedd1439c60a37c45aa6147c962904709ef9f12206937174be4 d57000571771a2d997c50d9a43ef1c2f075960f847effa0e80ea91fd4c6b4d6c
ql/lib/codeql/rust/generated/Loop.qll e310e7e885374a653a2c3e6b86783b4a5dd71db72cf5f208785c17ea3f90737e 99c52a112d56f8e44a987159122091f46ba9a22b71456e8ba109369ff58db931
ql/lib/codeql/rust/generated/Loop.qll 25e4ed09d3f47980cd9d0974cf3f0c0f73ea6177d5c81380a4346fc5ccfcc3d3 3565a431522b753736c8e880a40524870a92a9b6b2101a25c40232c2b0f20493
ql/lib/codeql/rust/generated/Match.qll e0dd9a39cfcb5cd56efd89c3c009a62ff39c887511ba2962dfeed978830b5000 7378a8a30d7bde2a06a23e7037bddbd64d656ec047ba18142d22086cc7d7da32
ql/lib/codeql/rust/generated/MatchArm.qll 5ad0dc254b6d58ccd856e4235b68ca0226a898c33f1f6b6fe7b48266a01ca627 f519af39f45e820eb3a70cefb0e4dfb541c3cf17952c00c6dd7e59f854a629bd
ql/lib/codeql/rust/generated/MethodCall.qll 1d7afd5e8795b89f3cd20569fe7e0b7fd339aa178ed6ecb2a3a9cadd1a49eede 7a6396ce629a46db16de523fd39e2bb2c56837df80990ff1dd3bdfe242c20761
@@ -166,14 +169,14 @@ ql/lib/codeql/rust/generated/MissingPat.qll 0d8034cee20bacf07ebb9337c797f53a2568
ql/lib/codeql/rust/generated/Module.qll 2a931a4f2cdb2fee00ed83af045ea63d36b7dbd708e58c30445b5610feaae333 cd62add5c31a509f965aa294f44a1607ec7c62e3a9e3fe9ee063b3c814f4eb62
ql/lib/codeql/rust/generated/OffsetOf.qll 8b3778c32d2e7c85491e7a85c9c6337de822e946655b9af69a4281838787f291 8b3778c32d2e7c85491e7a85c9c6337de822e946655b9af69a4281838787f291
ql/lib/codeql/rust/generated/OrPat.qll f8fe5c7b83a08dabcc530484a696274930040ea13501ae20f1426faeec67bcf0 f3adb3148890531b698570a48740335983a5e81977ba4ac651778f940f184398
ql/lib/codeql/rust/generated/ParentChild.qll 9365b29f55a6ca6353a0fc61ec9ac01a53ca5c12c997b804ec143ca6de5600ac 5d39a2063541af98d60fc6b989c2f3aacaa803422b718414f095d3af02a88e79
ql/lib/codeql/rust/generated/ParentChild.qll 017401ffacb07315aba6c365fa5750f641d48bef13f3b14c64d29a32f53157e6 b9395225775cb390d959f617e61a42b39a1a2a201656bdc26315e27f743e8736
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 8285e7937d3a375b5a882ecccbe2ac8db3cbff59bdb2ed4f7a32059362826255 beaceb79727f4a1244238599c39cdd696e6be13a8c1c9c49c3bac8845b881558
ql/lib/codeql/rust/generated/Raw.qll 907592ecfe4cce2814f3e24b81de9885fd01e8147d9857fb23614677bcf32808 08271096b8af2d9e55265a2a66acc0fafff4e013c9661ef27b3ac322c75a01e9
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
@@ -181,8 +184,8 @@ ql/lib/codeql/rust/generated/RefPat.qll 3525331e8ba25a8612324e860423a39ddb29e8eb
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 9c71ab766b07e4d1c2b89e6ae0631a4f4e2b5dfda12f1e55dd5544327217a463 e56058f18c9b9e9d540bd5f12f9600f4e3522e18f67919119e60975f35a46e79
ql/lib/codeql/rust/generated/SynthConstructors.qll bd3b69d1a153260761399fdc10b589c87f1295e894946b8e33d672c14b08df5f bd3b69d1a153260761399fdc10b589c87f1295e894946b8e33d672c14b08df5f
ql/lib/codeql/rust/generated/Synth.qll b1bacde93009d59195d61882f1faceee5e39a628328fa9d6cdd43f3df8898d22 dc6e278bf9ee8a4ab275f6f8f0de62529547a2a646510637e9dedf71b97343b0
ql/lib/codeql/rust/generated/SynthConstructors.qll 1fc8279b904e4388af746ca1355381509ac242530856a01d7e8fbdba482cc273 1fc8279b904e4388af746ca1355381509ac242530856a01d7e8fbdba482cc273
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

3
rust/.gitattributes generated vendored
View File

@@ -55,6 +55,8 @@
/ql/lib/codeql/rust/elements/InlineAsmConstructor.qll linguist-generated
/ql/lib/codeql/rust/elements/ItemStmt.qll linguist-generated
/ql/lib/codeql/rust/elements/ItemStmtConstructor.qll linguist-generated
/ql/lib/codeql/rust/elements/Label.qll linguist-generated
/ql/lib/codeql/rust/elements/LabelConstructor.qll linguist-generated
/ql/lib/codeql/rust/elements/Let.qll linguist-generated
/ql/lib/codeql/rust/elements/LetConstructor.qll linguist-generated
/ql/lib/codeql/rust/elements/LitPat.qll linguist-generated
@@ -154,6 +156,7 @@
/ql/lib/codeql/rust/generated/Index.qll linguist-generated
/ql/lib/codeql/rust/generated/InlineAsm.qll linguist-generated
/ql/lib/codeql/rust/generated/ItemStmt.qll linguist-generated
/ql/lib/codeql/rust/generated/Label.qll linguist-generated
/ql/lib/codeql/rust/generated/Let.qll linguist-generated
/ql/lib/codeql/rust/generated/LitPat.qll linguist-generated
/ql/lib/codeql/rust/generated/Literal.qll linguist-generated

View File

@@ -41,6 +41,26 @@ impl TrapEntry for DbLocation {
}
}
#[derive(Debug)]
pub struct Label {
pub id: TrapId,
pub location: Option<trap::Label>,
pub name: String,
}
impl TrapEntry for Label {
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("labels", vec![trap::Arg::Label(id), self.name.into()]);
if let Some(v) = self.location {
out.add_tuple("locatable_locations", vec![trap::Arg::Label(id), v.into()]);
}
}
}
#[derive(Debug)]
pub struct MatchArm {
pub id: TrapId,
@@ -238,7 +258,7 @@ pub struct Break {
pub id: TrapId,
pub location: Option<trap::Label>,
pub expr: Option<trap::Label>,
pub label: Option<String>,
pub label: Option<trap::Label>,
}
impl TrapEntry for Break {
@@ -388,7 +408,7 @@ impl TrapEntry for ConstBlockPat {
pub struct Continue {
pub id: TrapId,
pub location: Option<trap::Label>,
pub label: Option<String>,
pub label: Option<trap::Label>,
}
impl TrapEntry for Continue {
@@ -658,7 +678,7 @@ pub struct Loop {
pub id: TrapId,
pub location: Option<trap::Label>,
pub body: trap::Label,
pub label: Option<String>,
pub label: Option<trap::Label>,
}
impl TrapEntry for Loop {
@@ -1272,7 +1292,7 @@ pub struct Block {
pub location: Option<trap::Label>,
pub statements: Vec<trap::Label>,
pub tail: Option<trap::Label>,
pub label: Option<String>,
pub label: Option<trap::Label>,
}
impl TrapEntry for Block {

View File

@@ -35,6 +35,7 @@ import codeql.rust.elements.IfLet
import codeql.rust.elements.Index
import codeql.rust.elements.InlineAsm
import codeql.rust.elements.ItemStmt
import codeql.rust.elements.Label
import codeql.rust.elements.Let
import codeql.rust.elements.LitPat
import codeql.rust.elements.Literal

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 `Label`.
*/
private import codeql.rust.generated.Label
class Label extends Generated::Label { }

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
* `Label` synthesized instances.
* INTERNAL: Do not use.
*/
private import codeql.rust.generated.Raw
/**
* The characteristic predicate of `Label` synthesized instances.
* INTERNAL: Do not use.
*/
predicate constructLabel(Raw::Label id) { any() }

View File

@@ -7,6 +7,7 @@
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.BlockBase
import codeql.rust.elements.Label
/**
* INTERNAL: This module contains the fully generated definition of `Block` and should not
@@ -23,7 +24,9 @@ module Generated {
/**
* Gets the label of this block, if it exists.
*/
string getLabel() { result = Synth::convertBlockToRaw(this).(Raw::Block).getLabel() }
Label getLabel() {
result = Synth::convertLabelFromRaw(Synth::convertBlockToRaw(this).(Raw::Block).getLabel())
}
/**
* Holds if `getLabel()` exists.

View File

@@ -7,6 +7,7 @@
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.Expr
import codeql.rust.elements.Label
/**
* INTERNAL: This module contains the fully generated definition of `Break` and should not
@@ -35,7 +36,9 @@ module Generated {
/**
* Gets the label of this break, if it exists.
*/
string getLabel() { result = Synth::convertBreakToRaw(this).(Raw::Break).getLabel() }
Label getLabel() {
result = Synth::convertLabelFromRaw(Synth::convertBreakToRaw(this).(Raw::Break).getLabel())
}
/**
* Holds if `getLabel()` exists.

View File

@@ -7,6 +7,7 @@
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.Expr
import codeql.rust.elements.Label
/**
* INTERNAL: This module contains the fully generated definition of `Continue` and should not
@@ -23,7 +24,10 @@ module Generated {
/**
* Gets the label of this continue, if it exists.
*/
string getLabel() { result = Synth::convertContinueToRaw(this).(Raw::Continue).getLabel() }
Label getLabel() {
result =
Synth::convertLabelFromRaw(Synth::convertContinueToRaw(this).(Raw::Continue).getLabel())
}
/**
* Holds if `getLabel()` exists.

View File

@@ -0,0 +1,28 @@
// generated by codegen
/**
* This module provides the generated definition of `Label`.
* INTERNAL: Do not import directly.
*/
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.AstNode
/**
* INTERNAL: This module contains the fully generated definition of `Label` and should not
* be referenced directly.
*/
module Generated {
/**
* INTERNAL: Do not reference the `Generated::Label` class directly.
* Use the subclass `Label`, where the following predicates are available.
*/
class Label extends Synth::TLabel, AstNode {
override string getAPrimaryQlClass() { result = "Label" }
/**
* Gets the name of this label.
*/
string getName() { result = Synth::convertLabelToRaw(this).(Raw::Label).getName() }
}
}

View File

@@ -7,6 +7,7 @@
private import codeql.rust.generated.Synth
private import codeql.rust.generated.Raw
import codeql.rust.elements.Expr
import codeql.rust.elements.Label
/**
* INTERNAL: This module contains the fully generated definition of `Loop` and should not
@@ -30,7 +31,9 @@ module Generated {
/**
* Gets the label of this loop, if it exists.
*/
string getLabel() { result = Synth::convertLoopToRaw(this).(Raw::Loop).getLabel() }
Label getLabel() {
result = Synth::convertLabelFromRaw(Synth::convertLoopToRaw(this).(Raw::Loop).getLabel())
}
/**
* Holds if `getLabel()` exists.

View File

@@ -146,6 +146,19 @@ private module Impl {
)
}
private Element getImmediateChildOfLabel(Label e, int index, string partialPredicateCall) {
exists(int b, int bAstNode, int n |
b = 0 and
bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and
n = bAstNode and
(
none()
or
result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall)
)
)
}
private Element getImmediateChildOfMatchArm(MatchArm e, int index, string partialPredicateCall) {
exists(int b, int bAstNode, int n |
b = 0 and
@@ -941,6 +954,8 @@ private module Impl {
or
result = getImmediateChildOfUnknownLocation(e, index, partialAccessor)
or
result = getImmediateChildOfLabel(e, index, partialAccessor)
or
result = getImmediateChildOfMatchArm(e, index, partialAccessor)
or
result = getImmediateChildOfTypeRef(e, index, partialAccessor)

View File

@@ -89,6 +89,18 @@ module Raw {
*/
class Expr extends @expr, AstNode { }
/**
* INTERNAL: Do not use.
*/
class Label extends @label, AstNode {
override string toString() { result = "Label" }
/**
* Gets the name of this label.
*/
string getName() { labels(this, result) }
}
/**
* INTERNAL: Do not use.
*/
@@ -251,7 +263,7 @@ module Raw {
/**
* Gets the label of this break, if it exists.
*/
string getLabel() { break_labels(this, result) }
Label getLabel() { break_labels(this, result) }
}
/**
@@ -353,7 +365,7 @@ module Raw {
/**
* Gets the label of this continue, if it exists.
*/
string getLabel() { continue_labels(this, result) }
Label getLabel() { continue_labels(this, result) }
}
/**
@@ -542,7 +554,7 @@ module Raw {
/**
* Gets the label of this loop, if it exists.
*/
string getLabel() { loop_labels(this, result) }
Label getLabel() { loop_labels(this, result) }
}
/**
@@ -871,7 +883,7 @@ module Raw {
/**
* Gets the label of this block, if it exists.
*/
string getLabel() { block_labels(this, result) }
Label getLabel() { block_labels(this, result) }
}
/**

View File

@@ -119,6 +119,10 @@ module Synth {
* INTERNAL: Do not use.
*/
TItemStmt(Raw::ItemStmt id) { constructItemStmt(id) } or
/**
* INTERNAL: Do not use.
*/
TLabel(Raw::Label id) { constructLabel(id) } or
/**
* INTERNAL: Do not use.
*/
@@ -259,7 +263,7 @@ module Synth {
/**
* INTERNAL: Do not use.
*/
class TAstNode = TDeclaration or TExpr or TMatchArm or TPat or TStmt or TTypeRef;
class TAstNode = TDeclaration or TExpr or TLabel or TMatchArm or TPat or TStmt or TTypeRef;
/**
* INTERNAL: Do not use.
@@ -490,6 +494,13 @@ module Synth {
cached
TItemStmt convertItemStmtFromRaw(Raw::Element e) { result = TItemStmt(e) }
/**
* INTERNAL: Do not use.
* Converts a raw element to a synthesized `TLabel`, if possible.
*/
cached
TLabel convertLabelFromRaw(Raw::Element e) { result = TLabel(e) }
/**
* INTERNAL: Do not use.
* Converts a raw element to a synthesized `TLet`, if possible.
@@ -738,6 +749,8 @@ module Synth {
or
result = convertExprFromRaw(e)
or
result = convertLabelFromRaw(e)
or
result = convertMatchArmFromRaw(e)
or
result = convertPatFromRaw(e)
@@ -1116,6 +1129,13 @@ module Synth {
cached
Raw::Element convertItemStmtToRaw(TItemStmt e) { e = TItemStmt(result) }
/**
* INTERNAL: Do not use.
* Converts a synthesized `TLabel` to a raw DB element, if possible.
*/
cached
Raw::Element convertLabelToRaw(TLabel e) { e = TLabel(result) }
/**
* INTERNAL: Do not use.
* Converts a synthesized `TLet` to a raw DB element, if possible.
@@ -1364,6 +1384,8 @@ module Synth {
or
result = convertExprToRaw(e)
or
result = convertLabelToRaw(e)
or
result = convertMatchArmToRaw(e)
or
result = convertPatToRaw(e)

View File

@@ -29,6 +29,7 @@ import codeql.rust.elements.IfLetConstructor
import codeql.rust.elements.IndexConstructor
import codeql.rust.elements.InlineAsmConstructor
import codeql.rust.elements.ItemStmtConstructor
import codeql.rust.elements.LabelConstructor
import codeql.rust.elements.LetConstructor
import codeql.rust.elements.LitPatConstructor
import codeql.rust.elements.LiteralConstructor

View File

@@ -54,6 +54,7 @@ locations(
@ast_node =
@declaration
| @expr
| @label
| @match_arm
| @pat
| @stmt
@@ -109,6 +110,11 @@ db_locations(
| @yield
;
labels(
unique int id: @label,
string name: string ref
);
match_arms(
unique int id: @match_arm,
int pat: @pat ref,
@@ -227,7 +233,7 @@ break_exprs(
#keyset[id]
break_labels(
int id: @break ref,
string label: string ref
int label: @label ref
);
calls(
@@ -299,7 +305,7 @@ continues(
#keyset[id]
continue_labels(
int id: @continue ref,
string label: string ref
int label: @label ref
);
expr_stmts(
@@ -401,7 +407,7 @@ loops(
#keyset[id]
loop_labels(
int id: @loop ref,
string label: string ref
int label: @label ref
);
matches(
@@ -644,7 +650,7 @@ blocks(
#keyset[id]
block_labels(
int id: @block ref,
string label: string ref
int label: @label ref
);
unsafe_blocks(

View File

@@ -81,6 +81,11 @@ class Pat(AstNode):
pass
@qltest.skip
class Label(AstNode):
name: string
@qltest.collapse_hierarchy
class Stmt(AstNode):
pass
@@ -144,7 +149,7 @@ class BlockBase(Expr):
class Block(BlockBase):
label: optional[string]
label: optional[Label]
# Async {
# id: Option<BlockId>,
@@ -181,7 +186,7 @@ class UnsafeBlock(BlockBase):
class Loop(Expr):
body: Expr
label: optional[string]
label: optional[Label]
# Call {
# callee: ExprId,
@@ -238,7 +243,7 @@ class Match(Expr):
class Continue(Expr):
label: optional[string]
label: optional[Label]
# Break {
# expr: Option<ExprId>,
@@ -248,7 +253,7 @@ class Continue(Expr):
class Break(Expr):
expr: optional[Expr]
label: optional[string]
label: optional[Label]
# Return {