Rust: Renamed expr on CallExpr and LetExpr

This commit is contained in:
Simon Friis Vindum
2024-11-26 15:22:14 +01:00
parent 9f09454db9
commit d30f3e2822
30 changed files with 107 additions and 97 deletions

View File

@@ -28,8 +28,10 @@ fn class_name(type_name: &str) -> String {
fn property_name(type_name: &str, field_name: &str) -> String {
let name = match (type_name, field_name) {
("Path", "segment") => "part",
("CallExpr", "expr") => "function",
("LetExpr", "expr") => "scrutinee",
("MatchExpr", "expr") => "scrutinee",
("Path", "segment") => "part",
(_, "then_branch") => "then",
(_, "else_branch") => "else_",
_ => field_name,

View File

@@ -1,2 +1,2 @@
mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7
top.rs abab6a736e75f9eabbe31deef4de782fc05f0c053798a01d410fffc859515278 abab6a736e75f9eabbe31deef4de782fc05f0c053798a01d410fffc859515278
top.rs c7e0a93f979fe21773c7dcea1aab0c16e919f171e417bfe36b41dfd411a280f8 c7e0a93f979fe21773c7dcea1aab0c16e919f171e417bfe36b41dfd411a280f8

View File

@@ -4963,7 +4963,7 @@ impl From<trap::Label<LabelableExpr>> for trap::Label<Locatable> {
pub struct LetExpr {
pub id: trap::TrapId<LetExpr>,
pub attrs: Vec<trap::Label<Attr>>,
pub expr: Option<trap::Label<Expr>>,
pub scrutinee: Option<trap::Label<Expr>>,
pub pat: Option<trap::Label<Pat>>,
}
@@ -4977,8 +4977,8 @@ impl trap::TrapEntry for LetExpr {
for (i, v) in self.attrs.into_iter().enumerate() {
out.add_tuple("let_expr_attrs", vec![id.into(), i.into(), v.into()]);
}
if let Some(v) = self.expr {
out.add_tuple("let_expr_exprs", vec![id.into(), v.into()]);
if let Some(v) = self.scrutinee {
out.add_tuple("let_expr_scrutinees", vec![id.into(), v.into()]);
}
if let Some(v) = self.pat {
out.add_tuple("let_expr_pats", vec![id.into(), v.into()]);
@@ -8066,7 +8066,7 @@ pub struct CallExpr {
pub id: trap::TrapId<CallExpr>,
pub arg_list: Option<trap::Label<ArgList>>,
pub attrs: Vec<trap::Label<Attr>>,
pub expr: Option<trap::Label<Expr>>,
pub function: Option<trap::Label<Expr>>,
}
impl trap::TrapEntry for CallExpr {
@@ -8082,8 +8082,8 @@ impl trap::TrapEntry for CallExpr {
for (i, v) in self.attrs.into_iter().enumerate() {
out.add_tuple("call_expr_base_attrs", vec![id.into(), i.into(), v.into()]);
}
if let Some(v) = self.expr {
out.add_tuple("call_expr_exprs", vec![id.into(), v.into()]);
if let Some(v) = self.function {
out.add_tuple("call_expr_functions", vec![id.into(), v.into()]);
}
}
}

View File

@@ -397,12 +397,12 @@ impl Translator<'_> {
pub(crate) fn emit_call_expr(&mut self, node: ast::CallExpr) -> Label<generated::CallExpr> {
let arg_list = node.arg_list().map(|x| self.emit_arg_list(x));
let attrs = node.attrs().map(|x| self.emit_attr(x)).collect();
let expr = node.expr().map(|x| self.emit_expr(x));
let function = node.expr().map(|x| self.emit_expr(x));
let label = self.trap.emit(generated::CallExpr {
id: TrapId::Star,
arg_list,
attrs,
expr,
function,
});
self.emit_location(label, &node);
emit_detached!(CallExpr, self, node, label);
@@ -958,12 +958,12 @@ impl Translator<'_> {
pub(crate) fn emit_let_expr(&mut self, node: ast::LetExpr) -> Label<generated::LetExpr> {
let attrs = node.attrs().map(|x| self.emit_attr(x)).collect();
let expr = node.expr().map(|x| self.emit_expr(x));
let scrutinee = node.expr().map(|x| self.emit_expr(x));
let pat = node.pat().map(|x| self.emit_pat(x));
let label = self.trap.emit(generated::LetExpr {
id: TrapId::Star,
attrs,
expr,
scrutinee,
pat,
});
self.emit_location(label, &node);

View File

@@ -1,4 +1,4 @@
lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 5e6ce2581b312d74ac8ffde44941b77f643025a7ff2c47799b3834596a513fa4 24dc5d28eb4754f968cf850294ac32057a2a97cf5156a3e90e0924c28e50e810
lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll a8e083c7d8c4dea6459c5e128e2123f5cf8fd14c076f2256ebda508c13d553cd 16fcc0d34097b0b37a0041281515ca028d2702eec6d9c1d03c39a1158883bdef
lib/codeql/rust/elements/Abi.qll 4c973d28b6d628f5959d1f1cc793704572fd0acaae9a97dfce82ff9d73f73476 250f68350180af080f904cd34cb2af481c5c688dc93edf7365fd0ae99855e893
lib/codeql/rust/elements/ArgList.qll 661f5100f5d3ef8351452d9058b663a2a5c720eea8cf11bedd628969741486a2 28e424aac01a90fb58cd6f9f83c7e4cf379eea39e636bc0ba07efc818be71c71
lib/codeql/rust/elements/ArrayExpr.qll a3e6e122632f4011644ec31b37f88b32fe3f2b7e388e7e878a6883309937049f 12ccb5873d95c433da5606fd371d182ef2f71b78d0c53c2d6dec10fa45852bdc
@@ -428,7 +428,7 @@ lib/codeql/rust/elements/internal/generated/BinaryExpr.qll 64e9bd9c571edd6e5f3e7
lib/codeql/rust/elements/internal/generated/BlockExpr.qll 5a5ddbe34bc478a7bd9b0d07d3b6f017c2d1f20581d859251a963314e6514d1f 9804c30b8b279038b864c52557535f854bd012bacdfe8e5840f1f777c74e52df
lib/codeql/rust/elements/internal/generated/BoxPat.qll ec946a3e671ab7417e04b0207967adad004df512c570c4f0780ca5816d12d75f b0e64860855c4e85914042b1a51034899ff7cd1b2c6857188de89310a2726ea3
lib/codeql/rust/elements/internal/generated/BreakExpr.qll 0f428a8b2f4209b134c2ffc3e1c93c30bc6b0e9c9172f140cefa88c1f77d8690 957b39f38ff6befe9061f55bc0b403c2f1c366dd0cf63b874bae6f8216576d76
lib/codeql/rust/elements/internal/generated/CallExpr.qll 23ee64e3bf643cd5e6ff705181d2bb31e1aeaffecb5bdce73836172dbf15f12f 34b280139b1f8f70d78e1432392f03c971be392e8cb68d014eb325d0c101bddd
lib/codeql/rust/elements/internal/generated/CallExpr.qll f1b8dae487077cc9d1dccf8c3cd61fd17afe860585f17ce8b860be4859be7ca4 6034fc03778e38802cdf3a6e460364b74e92912622581b31e6179951022bbbd6
lib/codeql/rust/elements/internal/generated/CallExprBase.qll cce796e36847249f416629bacf3ea146313084de3374587412e66c10d2917b83 c219aa2174321c161a4a742ca0605521687ca9a5ca32db453a5c62db6f7784cc
lib/codeql/rust/elements/internal/generated/Callable.qll b0502b5263b7bcd18e740f284f992c0e600e37d68556e3e0ba54a2ac42b94934 bda3e1eea11cacf5a9b932cd72efc2de6105103e8c575880fcd0cd89daadf068
lib/codeql/rust/elements/internal/generated/CastExpr.qll d6fbf02e9e202254666082a9116634d0eb933177866ac4c0a57b5e9c4bb4b383 477f67773492e3b82695461d56327c9db05a7d1a67e8d192406265f2ce369670
@@ -475,7 +475,7 @@ lib/codeql/rust/elements/internal/generated/ItemList.qll 73c8398a96d4caa47a2dc11
lib/codeql/rust/elements/internal/generated/Label.qll 6630fe16e9d2de6c759ff2684f5b9950bc8566a1525c835c131ebb26f3eea63e 671143775e811fd88ec90961837a6c0ee4db96e54f42efd80c5ae2571661f108
lib/codeql/rust/elements/internal/generated/LabelableExpr.qll 896fd165b438b60d7169e8f30fa2a94946490c4d284e1bbadfec4253b909ee6c 5c6b029ea0b22cf096df2b15fe6f9384ad3e65b50b253cae7f19a2e5ffb04a58
lib/codeql/rust/elements/internal/generated/LetElse.qll 7ca556118b5446bfc85abba8f0edd4970e029b30d414ea824a1b5f568310a76c a403540881336f9d0269cbcdb4b87107a17ab234a985247dc52a380f150a1641
lib/codeql/rust/elements/internal/generated/LetExpr.qll 9af0f89b294c8a0a751317e7074fe370339563d36c1df4911d1ea082a4df77fd 68272593d1feb88990bfbd0b8c222776f085e49694894384fc6d96e9464ba734
lib/codeql/rust/elements/internal/generated/LetExpr.qll 6f831be1d0f76258d5f74c847636e070a819dee5aa090be0c52a971f261eaff3 e85a48e7492862f738e184f5f1512c2d18d33a0cfb516e269334acf7448b508a
lib/codeql/rust/elements/internal/generated/LetStmt.qll aa1852db86ec29f857a90677f0c6b4a07f0fd965fc193d4141be95ce15862fca 40f32a37c0cc161b099fe0b4c7d713da928781d3e2c3de90db991df1d9062647
lib/codeql/rust/elements/internal/generated/Lifetime.qll 90d01c76188ce0c053122c62b41e47f27c4c7717ca5a4999a76797360043da0d 7b9feb202da5a06cd17f7770bb66742fd9e7cff0d410fefc7ffaafe710ac16d6
lib/codeql/rust/elements/internal/generated/LifetimeArg.qll 7c1a44e3d480e75142b171eb51382c9492d393043833c0ab4a4036eba19043b8 7d8273b62794268dab6938ba1e3a3560a80a2c49cd9a9717345785dacd311059
@@ -512,7 +512,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b
lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60
lib/codeql/rust/elements/internal/generated/ParenPat.qll ce24b8f8ecbf0f204af200317405724063887257460c80cf250c39b2fdf37185 e7c87d37e1a0ca7ea03840017e1aa9ddb7f927f1f3b6396c0305b46aeee33db6
lib/codeql/rust/elements/internal/generated/ParenType.qll 9cc954d73f8330dcac7b475f97748b63af5c8766dee9d2f2872c0a7e4c903537 c07534c8a9c683c4a9b11d490095647e420de0a0bfc23273eaf6f31b00244273
lib/codeql/rust/elements/internal/generated/ParentChild.qll 78723cac5f2999f91317f39cf53267043fd2a56e98e838f013eae01b6b39929e 26dd29e5fd868f89982269db6b25aa799be942abdbe41ff1a8ffd4dae4385bdc
lib/codeql/rust/elements/internal/generated/ParentChild.qll 081ee90ffd9906609d8ab9e08a3fdc1b10049838efe4c87d711d73f5a19e32e0 9a57d3cab79fa4bcfb85dd2c1e79def0e262b333b402a30dcbc114eb19718819
lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4
lib/codeql/rust/elements/internal/generated/Path.qll 4c1c8e840ed57880e574142b081b11d7a7428a009f10e3aa8f4645e211f6b2e0 989668cf0f1bdee7557e2f97c01e41d2a56848227fed41477833f5fc1e1d35f6
lib/codeql/rust/elements/internal/generated/PathExpr.qll 2096e3c1db22ee488a761690adabfc9cfdea501c99f7c5d96c0019cb113fc506 54245ce0449c4e263173213df01e079d5168a758503a5dbd61b25ad35a311140
@@ -525,7 +525,7 @@ lib/codeql/rust/elements/internal/generated/PtrType.qll 40099c5a4041314b66932dfd
lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590 ea294a3ba33fd1bc632046c4fedbcb84dcb961a8e4599969d65893b19d90e590
lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9
lib/codeql/rust/elements/internal/generated/RangePat.qll efd93730de217cf50dcba5875595263a5eadf9f7e4e1272401342a094d158614 229b251b3d118932e31e78ac4dfb75f48b766f240f20d436062785606d44467b
lib/codeql/rust/elements/internal/generated/Raw.qll 9476dd5a6607f722de107b51713c1f529e95429416c7e0d102b78779cf826fe6 b3a4d58fb560c89344ac734cfda3df7f4dcb627c2db79dbe26babd6a67e69dce
lib/codeql/rust/elements/internal/generated/Raw.qll 30bb4ea5dea28ad11a4c76021ab95a4d564b93761771bdcdf46c46e1c0a1f443 8f1519f1e3a60a859239abf33033da23f6243d32291c230a4d1ecd300b697d89
lib/codeql/rust/elements/internal/generated/RecordExpr.qll eb6cb662e463f9260efae1a6ce874fa781172063b916ef1963f861e9942d308d 1a21cbccc8f3799ff13281e822818ebfb21d81591720a427cac3625512cb9d40
lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1
lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0
@@ -632,10 +632,10 @@ test/extractor-tests/generated/BreakExpr/BreakExpr.ql cdde2855d98f658187c60b9edc
test/extractor-tests/generated/BreakExpr/BreakExpr_getAttr.ql c7690a9aab1923bf3c2fb06f0a1d441d480b3c91ee1df3a868bbbd96c4042053 c592dd077fb6e22b2d6ddcaec37da2c5a26ba92d84f5d1ae4c78a615b9013765
test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.ql 0358f4fe6a66da56177703cf0e991042729c5e34ae8b6dccbb827f95fe936c72 1cb2dd778c50e19fe04c5fdf3a08a502635ea8303e71ff38d03aa7dc53213986
test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.ql ad83cc0db3c0f959fef6bb7ce0938d241a877e8cf84d15fb63879be2fe47238c 240b2fe2156b763d3a82fc64159615872db65b65ffb9ba2f3fd5d1ebd6c60f34
test/extractor-tests/generated/CallExpr/CallExpr.ql 69d88b3c799f6e81fe53fe04724ed6c1cbfbfcc21023dd62aed3a3f852c6a2aa 0caa94802919d30bf2749d8a1c58545163e2b1cad5490f19158b5e5063806443
test/extractor-tests/generated/CallExpr/CallExpr.ql ffb0cf1cb359a6dcbdf792a570c281e2d300779dca2dbc0f324990652adb972f 978a9e6c82758f9e8b334a682a02d6b893a6bf1db3cd85e9535839a9696b09b4
test/extractor-tests/generated/CallExpr/CallExpr_getArgList.ql b022e7b6b6db9932e787e37b7760c6a09c91140a0368940374a2c919688e0488 c20849c96b53c96f6f717efff5e8b4c0e900c0ef5d715cfbaf7101c7056ad8f4
test/extractor-tests/generated/CallExpr/CallExpr_getAttr.ql 1ace458070875b9ff2c671c2ee18392ea7bf6e51b68ee98d412c8606e8eb8d33 4c35da8255d2975cef4adee15623662441bb8f2e1d73582e4c193d1bc11cc1b5
test/extractor-tests/generated/CallExpr/CallExpr_getExpr.ql f680f04423ece282c459d5908e5aa0bc43ca072ff0e605587dfa94210da1d06d f8a709015b8317b8e2dcf3b3ee9370e2c3a655ef7e3c6034b1b90f4d75ebdda2
test/extractor-tests/generated/CallExpr/CallExpr_getFunction.ql 060a6c8b5b85c839b14fe96f9e50291a7a0e5662a945f4f337070f782ec76715 e9a1e44433936146d87be939aa160848b9a7d7333c36da601fb7d1a66d71eb59
test/extractor-tests/generated/CastExpr/CastExpr.ql 2ffb22ebc6e47953a49162488b3605d36b9d89330b1e71187066e7bbc40a22ad 7621a39d49f573b9862b9a4e1021d53205670ee59b49e4d81128637926f76485
test/extractor-tests/generated/CastExpr/CastExpr_getAttr.ql 5d5d98172e495cdb8b5cea9d6588c4c245107b441464e3ffd6c27668af11ab4e 5820bf083aaa4c3275004a2cd9eeecc4b45ab96916cbc0655a1b42611c540715
test/extractor-tests/generated/CastExpr/CastExpr_getExpr.ql c37186b8f3e3dab8ae28c0da7263ff7272c40501beb16736ec0fb8990d285e22 59d50d7349234afcf84986b7570db9dcd342e16812f7c46199d4736cdfa5462d
@@ -777,10 +777,10 @@ test/extractor-tests/generated/Label/Label.ql 6a92a27d615dd9c380cb9d889eecf827fc
test/extractor-tests/generated/Label/Label_getLifetime.ql 3d6ddc3b44182e6432e938d5c1c95e0281575e320d517e431f6bad7748efb93e 56d07e485cb5e4263443eb5a0d62d7d4456bb0c2748331b371e519bfe14d3b81
test/extractor-tests/generated/LetElse/LetElse.ql bdf2b17d5efe6b9cb5bb4fcfe854a5fcd72443d39ae1e7981d2a0459c481e394 a14a611d0783ae38d631600c2bde7409f4e739ba2f284314b90ec9a21c23ab3a
test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.ql 32c21ad843884944738a735f01e272032a347d1860fa6d27d17652c549f941b0 2bfd8a5e3d42eb1c73eb679ada847dd29f2f0657a0ad8ef15da126e54fff5ef5
test/extractor-tests/generated/LetExpr/LetExpr.ql a25072a00cfe1242dc846b38199c000ed7217d33fdd50d2763237fdfda7b9449 8c9367af79d9fbc98ed2fe62450929fa876512f1c999615b5c1ecff082fdc7bc
test/extractor-tests/generated/LetExpr/LetExpr.ql c76a0c4aaa73f4064207dacc8d2c649d3a5f8046c0f6e1aae985d2402a342e73 c5abe3845d4975d05c98ee6496732da384cdaca60ed49235776338e6dbe80b3d
test/extractor-tests/generated/LetExpr/LetExpr_getAttr.ql 911b143afebaa0a487b13d533f089c5b0eaf336a44a4cab42147c284338484ba 625c91fb6d8c2e3a9f13e5679cc0cd29329c6c2b213d2e1191e23db2b65841dd
test/extractor-tests/generated/LetExpr/LetExpr_getExpr.ql ccabfaa15cfc8685e86cb950cb62b7f2fec278f28906ab34deb97b308f160cc4 e0574537d47a77f1be85090970f3e1263858174479002fd4de3f85b777ee4336
test/extractor-tests/generated/LetExpr/LetExpr_getPat.ql bc0363f77bc2ba583619ab7d309293ace0ed6a851bfb9b886f75729f96eb40a8 bc0cd9233b7904d8cc7f9021377120f5f4bcc5c7aa28b1b55f17bc738c434d78
test/extractor-tests/generated/LetExpr/LetExpr_getScrutinee.ql ee33d3bbaf0ee7cdf9bd7b800e9684b5ac7ce8cf1939378cd460cb0c5ea11742 5d69e727b3e9d1ab4ce9eef702a7b1911515469625056bce87fac1d27ba863e6
test/extractor-tests/generated/LetStmt/LetStmt.ql 02db64303bfe87a11a85663e4c79bdabd9ca13693f146c7923b47c4c92850fcc 9ec1326b8bc58b270b178a4c02621b1650d107de7c02a9408d97c59f0d8a6178
test/extractor-tests/generated/LetStmt/LetStmt_getAttr.ql 68f69c4c054514140c0f0833a170e9f3facf950bd7af663ac9019f6c88ba0ea7 ca54d25cc052289458c7e34e40f0304bca2c412cecfb407f31279262bd74c15a
test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.ql 6a5f0eed3ce3e8cbc57be6ec2b4eed732f00e084108d21a61d9ab28b65e494ca a48b426b97a6c347ad04fe2e592cd25b5c66b2a6a299cbf8c0da03e14304fd70

4
rust/ql/.gitattributes generated vendored
View File

@@ -637,7 +637,7 @@
/test/extractor-tests/generated/CallExpr/CallExpr.ql linguist-generated
/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.ql linguist-generated
/test/extractor-tests/generated/CallExpr/CallExpr_getAttr.ql linguist-generated
/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.ql linguist-generated
/test/extractor-tests/generated/CallExpr/CallExpr_getFunction.ql linguist-generated
/test/extractor-tests/generated/CastExpr/CastExpr.ql linguist-generated
/test/extractor-tests/generated/CastExpr/CastExpr_getAttr.ql linguist-generated
/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.ql linguist-generated
@@ -781,8 +781,8 @@
/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.ql linguist-generated
/test/extractor-tests/generated/LetExpr/LetExpr.ql linguist-generated
/test/extractor-tests/generated/LetExpr/LetExpr_getAttr.ql linguist-generated
/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.ql linguist-generated
/test/extractor-tests/generated/LetExpr/LetExpr_getPat.ql linguist-generated
/test/extractor-tests/generated/LetExpr/LetExpr_getScrutinee.ql linguist-generated
/test/extractor-tests/generated/LetStmt/LetStmt.ql linguist-generated
/test/extractor-tests/generated/LetStmt/LetStmt_getAttr.ql linguist-generated
/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.ql linguist-generated

View File

@@ -313,7 +313,7 @@ module ExprTrees {
class CallExprTree extends StandardPostOrderTree instanceof CallExpr {
override AstNode getChildNode(int i) {
i = 0 and result = super.getExpr()
i = 0 and result = super.getFunction()
or
result = super.getArgList().getArg(i - 1)
}
@@ -410,7 +410,7 @@ module ExprTrees {
class LetExprTree extends StandardPreOrderTree, LetExpr {
override AstNode getChildNode(int i) {
i = 0 and
result = this.getExpr()
result = this.getScrutinee()
or
i = 1 and
result = this.getPat()

View File

@@ -570,7 +570,7 @@ module MakeCfgNodes<LocationSig Loc, InputSig<Loc> Input> {
override predicate relevantChild(AstNode child) {
none()
or
child = this.getExpr()
child = this.getFunction()
}
}
@@ -592,16 +592,16 @@ module MakeCfgNodes<LocationSig Loc, InputSig<Loc> Input> {
CallExpr getCallExpr() { result = node }
/**
* Gets the expression of this call expression, if it exists.
* Gets the function of this call expression, if it exists.
*/
ExprCfgNode getExpr() {
any(ChildMapping mapping).hasCfgChild(node, node.getExpr(), this, result)
ExprCfgNode getFunction() {
any(ChildMapping mapping).hasCfgChild(node, node.getFunction(), this, result)
}
/**
* Holds if `getExpr()` exists.
* Holds if `getFunction()` exists.
*/
predicate hasExpr() { exists(this.getExpr()) }
predicate hasFunction() { exists(this.getFunction()) }
}
final private class ParentCallExprBase extends ParentAstNode, CallExprBase {
@@ -1245,7 +1245,7 @@ module MakeCfgNodes<LocationSig Loc, InputSig<Loc> Input> {
override predicate relevantChild(AstNode child) {
none()
or
child = this.getExpr()
child = this.getScrutinee()
or
child = this.getPat()
}
@@ -1283,16 +1283,16 @@ module MakeCfgNodes<LocationSig Loc, InputSig<Loc> Input> {
int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) }
/**
* Gets the expression of this let expression, if it exists.
* Gets the scrutinee of this let expression, if it exists.
*/
ExprCfgNode getExpr() {
any(ChildMapping mapping).hasCfgChild(node, node.getExpr(), this, result)
ExprCfgNode getScrutinee() {
any(ChildMapping mapping).hasCfgChild(node, node.getScrutinee(), this, result)
}
/**
* Holds if `getExpr()` exists.
* Holds if `getScrutinee()` exists.
*/
predicate hasExpr() { exists(this.getExpr()) }
predicate hasScrutinee() { exists(this.getScrutinee()) }
/**
* Gets the pat of this let expression, if it exists.
@@ -3211,14 +3211,14 @@ module MakeCfgNodes<LocationSig Loc, InputSig<Loc> Input> {
cfgNode
)
or
pred = "getExpr" and
pred = "getFunction" and
parent =
any(Nodes::CallExprCfgNode cfgNode, CallExpr astNode |
astNode = cfgNode.getCallExpr() and
child = getDesugared(astNode.getExpr()) and
child = getDesugared(astNode.getFunction()) and
i = -1 and
hasCfgNode(child) and
not child = cfgNode.getExpr().getAstNode()
not child = cfgNode.getFunction().getAstNode()
|
cfgNode
)
@@ -3355,14 +3355,14 @@ module MakeCfgNodes<LocationSig Loc, InputSig<Loc> Input> {
cfgNode
)
or
pred = "getExpr" and
pred = "getScrutinee" and
parent =
any(Nodes::LetExprCfgNode cfgNode, LetExpr astNode |
astNode = cfgNode.getLetExpr() and
child = getDesugared(astNode.getExpr()) and
child = getDesugared(astNode.getScrutinee()) and
i = -1 and
hasCfgNode(child) and
not child = cfgNode.getExpr().getAstNode()
not child = cfgNode.getScrutinee().getAstNode()
|
cfgNode
)

View File

@@ -422,7 +422,7 @@ module RustDataFlow implements InputSig<Location> {
(
r = c.asMethodCallExprCfgNode().getExpr()
or
r = c.asCallExprCfgNode().getExpr().(PathExprCfgNode).getPath()
r = c.asCallExprCfgNode().getFunction().(PathExprCfgNode).getPath()
)
|
crate.asSome() = r.getResolvedCrateOrigin()

View File

@@ -23,6 +23,6 @@ module Impl {
* ```
*/
class CallExpr extends Generated::CallExpr {
override string toString() { result = this.getExpr().toAbbreviatedString() + "(...)" }
override string toString() { result = this.getFunction().toAbbreviatedString() + "(...)" }
}
}

View File

@@ -28,7 +28,7 @@ module Impl {
or
index = 1 and result = this.getPat().toAbbreviatedString()
or
index = 2 and result = "= " + this.getExpr().toAbbreviatedString()
index = 2 and result = "= " + this.getScrutinee().toAbbreviatedString()
}
}
}

View File

@@ -29,16 +29,16 @@ module Generated {
override string getAPrimaryQlClass() { result = "CallExpr" }
/**
* Gets the expression of this call expression, if it exists.
* Gets the function of this call expression, if it exists.
*/
Expr getExpr() {
Expr getFunction() {
result =
Synth::convertExprFromRaw(Synth::convertCallExprToRaw(this).(Raw::CallExpr).getExpr())
Synth::convertExprFromRaw(Synth::convertCallExprToRaw(this).(Raw::CallExpr).getFunction())
}
/**
* Holds if `getExpr()` exists.
* Holds if `getFunction()` exists.
*/
final predicate hasExpr() { exists(this.getExpr()) }
final predicate hasFunction() { exists(this.getFunction()) }
}
}

View File

@@ -48,16 +48,17 @@ module Generated {
final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) }
/**
* Gets the expression of this let expression, if it exists.
* Gets the scrutinee of this let expression, if it exists.
*/
Expr getExpr() {
result = Synth::convertExprFromRaw(Synth::convertLetExprToRaw(this).(Raw::LetExpr).getExpr())
Expr getScrutinee() {
result =
Synth::convertExprFromRaw(Synth::convertLetExprToRaw(this).(Raw::LetExpr).getScrutinee())
}
/**
* Holds if `getExpr()` exists.
* Holds if `getScrutinee()` exists.
*/
final predicate hasExpr() { exists(this.getExpr()) }
final predicate hasScrutinee() { exists(this.getScrutinee()) }
/**
* Gets the pat of this let expression, if it exists.

View File

@@ -1848,13 +1848,13 @@ private module Impl {
}
private Element getImmediateChildOfLetExpr(LetExpr e, int index, string partialPredicateCall) {
exists(int b, int bExpr, int n, int nAttr, int nExpr, int nPat |
exists(int b, int bExpr, int n, int nAttr, int nScrutinee, int nPat |
b = 0 and
bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and
n = bExpr and
nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and
nExpr = nAttr + 1 and
nPat = nExpr + 1 and
nScrutinee = nAttr + 1 and
nPat = nScrutinee + 1 and
(
none()
or
@@ -1863,9 +1863,9 @@ private module Impl {
result = e.getAttr(index - n) and
partialPredicateCall = "Attr(" + (index - n).toString() + ")"
or
index = nAttr and result = e.getExpr() and partialPredicateCall = "Expr()"
index = nAttr and result = e.getScrutinee() and partialPredicateCall = "Scrutinee()"
or
index = nExpr and result = e.getPat() and partialPredicateCall = "Pat()"
index = nScrutinee and result = e.getPat() and partialPredicateCall = "Pat()"
)
)
}
@@ -2786,18 +2786,18 @@ private module Impl {
}
private Element getImmediateChildOfCallExpr(CallExpr e, int index, string partialPredicateCall) {
exists(int b, int bCallExprBase, int n, int nExpr |
exists(int b, int bCallExprBase, int n, int nFunction |
b = 0 and
bCallExprBase =
b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallExprBase(e, i, _)) | i) and
n = bCallExprBase and
nExpr = n + 1 and
nFunction = n + 1 and
(
none()
or
result = getImmediateChildOfCallExprBase(e, index - b, partialPredicateCall)
or
index = n and result = e.getExpr() and partialPredicateCall = "Expr()"
index = n and result = e.getFunction() and partialPredicateCall = "Function()"
)
)
}

View File

@@ -1955,9 +1955,9 @@ module Raw {
Attr getAttr(int index) { let_expr_attrs(this, index, result) }
/**
* Gets the expression of this let expression, if it exists.
* Gets the scrutinee of this let expression, if it exists.
*/
Expr getExpr() { let_expr_exprs(this, result) }
Expr getScrutinee() { let_expr_scrutinees(this, result) }
/**
* Gets the pat of this let expression, if it exists.
@@ -3064,9 +3064,9 @@ module Raw {
override string toString() { result = "CallExpr" }
/**
* Gets the expression of this call expression, if it exists.
* Gets the function of this call expression, if it exists.
*/
Expr getExpr() { call_expr_exprs(this, result) }
Expr getFunction() { call_expr_functions(this, result) }
}
/**

View File

@@ -12,8 +12,9 @@ private class ReqwestGet extends RemoteSource::Range {
ReqwestGet() {
exists(CallExpr ce |
this.asExpr().getExpr() = ce and
ce.getExpr().(PathExpr).getPath().getResolvedCrateOrigin().matches("%reqwest") and
ce.getExpr().(PathExpr).getPath().getResolvedPath() = ["crate::get", "crate::blocking::get"]
ce.getFunction().(PathExpr).getPath().getResolvedCrateOrigin().matches("%reqwest") and
ce.getFunction().(PathExpr).getPath().getResolvedPath() =
["crate::get", "crate::blocking::get"]
)
}
}

View File

@@ -10,7 +10,7 @@ private import codeql.rust.Concepts
*/
private class StdEnvArgs extends CommandLineArgsSource::Range {
StdEnvArgs() {
this.asExpr().getExpr().(CallExpr).getExpr().(PathExpr).getPath().getResolvedPath() =
this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getPath().getResolvedPath() =
["crate::env::args", "crate::env::args_os"]
}
}
@@ -20,7 +20,7 @@ private class StdEnvArgs extends CommandLineArgsSource::Range {
*/
private class StdEnvDir extends CommandLineArgsSource::Range {
StdEnvDir() {
this.asExpr().getExpr().(CallExpr).getExpr().(PathExpr).getPath().getResolvedPath() =
this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getPath().getResolvedPath() =
["crate::env::current_dir", "crate::env::current_exe", "crate::env::home_dir"]
}
}
@@ -30,7 +30,7 @@ private class StdEnvDir extends CommandLineArgsSource::Range {
*/
private class StdEnvVar extends EnvironmentSource::Range {
StdEnvVar() {
this.asExpr().getExpr().(CallExpr).getExpr().(PathExpr).getPath().getResolvedPath() =
this.asExpr().getExpr().(CallExpr).getFunction().(PathExpr).getPath().getResolvedPath() =
["crate::env::var", "crate::env::var_os", "crate::env::vars", "crate::env::vars_os"]
}
}

View File

@@ -95,7 +95,7 @@ module Stages {
or
exists(AstCfgNode n)
or
exists(CallExprCfgNode n | exists(n.getExpr()))
exists(CallExprCfgNode n | exists(n.getFunction()))
}
}
}

View File

@@ -1748,9 +1748,9 @@ let_expr_attrs(
);
#keyset[id]
let_expr_exprs(
let_expr_scrutinees(
int id: @let_expr ref,
int expr: @expr ref
int scrutinee: @expr ref
);
#keyset[id]
@@ -2533,9 +2533,9 @@ call_exprs(
);
#keyset[id]
call_expr_exprs(
call_expr_functions(
int id: @call_expr ref,
int expr: @expr ref
int function: @expr ref
);
consts(

View File

@@ -1,4 +1,4 @@
| gen_call_expr.rs:5:5:5:11 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes |
| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes |
| gen_call_expr.rs:7:5:7:14 | ...(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes |
| gen_call_expr.rs:8:5:8:10 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasExpr: | yes |
| gen_call_expr.rs:5:5:5:11 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasFunction: | yes |
| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasFunction: | yes |
| gen_call_expr.rs:7:5:7:14 | ...(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasFunction: | yes |
| gen_call_expr.rs:8:5:8:10 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasFunction: | yes |

View File

@@ -2,11 +2,12 @@
import codeql.rust.elements
import TestUtils
from CallExpr x, string hasArgList, int getNumberOfAttrs, string hasExpr
from CallExpr x, string hasArgList, int getNumberOfAttrs, string hasFunction
where
toBeTested(x) and
not x.isUnknown() and
(if x.hasArgList() then hasArgList = "yes" else hasArgList = "no") and
getNumberOfAttrs = x.getNumberOfAttrs() and
if x.hasExpr() then hasExpr = "yes" else hasExpr = "no"
select x, "hasArgList:", hasArgList, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr
if x.hasFunction() then hasFunction = "yes" else hasFunction = "no"
select x, "hasArgList:", hasArgList, "getNumberOfAttrs:", getNumberOfAttrs, "hasFunction:",
hasFunction

View File

@@ -0,0 +1,4 @@
| gen_call_expr.rs:5:5:5:11 | foo(...) | gen_call_expr.rs:5:5:5:7 | foo |
| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | gen_call_expr.rs:6:5:6:19 | foo::<...> |
| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:5:7:10 | foo[0] |
| gen_call_expr.rs:8:5:8:10 | foo(...) | gen_call_expr.rs:8:5:8:7 | foo |

View File

@@ -4,4 +4,4 @@ import TestUtils
from CallExpr x
where toBeTested(x) and not x.isUnknown()
select x, x.getExpr()
select x, x.getFunction()

View File

@@ -1 +1 @@
| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | getNumberOfAttrs: | 0 | hasExpr: | yes | hasPat: | yes |
| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | getNumberOfAttrs: | 0 | hasScrutinee: | yes | hasPat: | yes |

View File

@@ -2,11 +2,11 @@
import codeql.rust.elements
import TestUtils
from LetExpr x, int getNumberOfAttrs, string hasExpr, string hasPat
from LetExpr x, int getNumberOfAttrs, string hasScrutinee, string hasPat
where
toBeTested(x) and
not x.isUnknown() and
getNumberOfAttrs = x.getNumberOfAttrs() and
(if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and
(if x.hasScrutinee() then hasScrutinee = "yes" else hasScrutinee = "no") and
if x.hasPat() then hasPat = "yes" else hasPat = "no"
select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasPat:", hasPat
select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasScrutinee:", hasScrutinee, "hasPat:", hasPat

View File

@@ -0,0 +1 @@
| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:22:5:31 | maybe_some |

View File

@@ -4,4 +4,4 @@ import TestUtils
from LetExpr x
where toBeTested(x) and not x.isUnknown()
select x, x.getExpr()
select x, x.getScrutinee()

View File

@@ -10,9 +10,9 @@ module MyFlowConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) { source instanceof ThreatModelSource }
predicate isSink(DataFlow::Node sink) {
any(CallExpr call | call.getExpr().(PathExpr).getPath().getResolvedPath() = "crate::test::sink")
.getArgList()
.getAnArg() = sink.asExpr().getExpr()
any(CallExpr call |
call.getFunction().(PathExpr).getPath().getResolvedPath() = "crate::test::sink"
).getArgList().getAnArg() = sink.asExpr().getExpr()
}
}

View File

@@ -13,7 +13,7 @@ private import internal.InlineExpectationsTestImpl as InlineExpectationsTestImpl
// Holds if the target expression of `call` is a path and the string representation of the path is `name`.
private predicate callTargetName(CallExprCfgNode call, string name) {
call.getExpr().(PathExprCfgNode).toString() = name
call.getFunction().(PathExprCfgNode).toString() = name
}
private module FlowTestImpl implements InputSig<Location, RustDataFlow> {

4
rust/schema/ast.py generated
View File

@@ -103,7 +103,7 @@ class BreakExpr(Expr):
class CallExpr(Expr):
arg_list: optional["ArgList"] | child
attrs: list["Attr"] | child
expr: optional["Expr"] | child
function: optional["Expr"] | child
class CastExpr(Expr):
attrs: list["Attr"] | child
@@ -285,7 +285,7 @@ class LetElse(AstNode):
class LetExpr(Expr):
attrs: list["Attr"] | child
expr: optional["Expr"] | child
scrutinee: optional["Expr"] | child
pat: optional["Pat"] | child
class LetStmt(Stmt):