mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Rust: Renamed expr on CallExpr and LetExpr
This commit is contained in:
@@ -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,
|
||||
|
||||
2
rust/extractor/src/generated/.generated.list
generated
2
rust/extractor/src/generated/.generated.list
generated
@@ -1,2 +1,2 @@
|
||||
mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7
|
||||
top.rs abab6a736e75f9eabbe31deef4de782fc05f0c053798a01d410fffc859515278 abab6a736e75f9eabbe31deef4de782fc05f0c053798a01d410fffc859515278
|
||||
top.rs c7e0a93f979fe21773c7dcea1aab0c16e919f171e417bfe36b41dfd411a280f8 c7e0a93f979fe21773c7dcea1aab0c16e919f171e417bfe36b41dfd411a280f8
|
||||
|
||||
12
rust/extractor/src/generated/top.rs
generated
12
rust/extractor/src/generated/top.rs
generated
@@ -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()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
8
rust/extractor/src/translate/generated.rs
generated
8
rust/extractor/src/translate/generated.rs
generated
@@ -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);
|
||||
|
||||
18
rust/ql/.generated.list
generated
18
rust/ql/.generated.list
generated
@@ -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
4
rust/ql/.gitattributes
generated
vendored
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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() + "(...)" }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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()"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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) }
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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"]
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ module Stages {
|
||||
or
|
||||
exists(AstCfgNode n)
|
||||
or
|
||||
exists(CallExprCfgNode n | exists(n.getExpr()))
|
||||
exists(CallExprCfgNode n | exists(n.getFunction()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 |
|
||||
@@ -4,4 +4,4 @@ import TestUtils
|
||||
|
||||
from CallExpr x
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, x.getExpr()
|
||||
select x, x.getFunction()
|
||||
@@ -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 |
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:22:5:31 | maybe_some |
|
||||
@@ -4,4 +4,4 @@ import TestUtils
|
||||
|
||||
from LetExpr x
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, x.getExpr()
|
||||
select x, x.getScrutinee()
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
4
rust/schema/ast.py
generated
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user