Rust: rerun code generation

This commit is contained in:
Paolo Tranquilli
2025-02-25 13:29:17 +01:00
parent 17703ec908
commit cbae16b392
13 changed files with 62 additions and 12 deletions

View File

@@ -1,2 +1,2 @@
mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7
top.rs 18702be33d768cc6f723201fce8c2bf2125df192c0336db9711a99f8fa7b074f 18702be33d768cc6f723201fce8c2bf2125df192c0336db9711a99f8fa7b074f
top.rs da0f43b99d3a173520048275597e2b052a7351f6fcb2ad5fc912257976742bb7 da0f43b99d3a173520048275597e2b052a7351f6fcb2ad5fc912257976742bb7

View File

@@ -2185,6 +2185,7 @@ impl From<trap::Label<RecordExprFieldList>> for trap::Label<Locatable> {
pub struct RecordField {
pub id: trap::TrapId<RecordField>,
pub attrs: Vec<trap::Label<Attr>>,
pub expr: Option<trap::Label<Expr>>,
pub name: Option<trap::Label<Name>>,
pub type_repr: Option<trap::Label<TypeRepr>>,
pub visibility: Option<trap::Label<Visibility>>,
@@ -2200,6 +2201,9 @@ impl trap::TrapEntry for RecordField {
for (i, v) in self.attrs.into_iter().enumerate() {
out.add_tuple("record_field_attrs", vec![id.into(), i.into(), v.into()]);
}
if let Some(v) = self.expr {
out.add_tuple("record_field_exprs", vec![id.into(), v.into()]);
}
if let Some(v) = self.name {
out.add_tuple("record_field_names", vec![id.into(), v.into()]);
}

View File

@@ -1849,12 +1849,14 @@ impl Translator<'_> {
pub(crate) fn emit_record_field(&mut self, node: ast::RecordField) -> Option<Label<generated::RecordField>> {
if self.should_be_excluded(&node) { return None; }
let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect();
let expr = node.expr().and_then(|x| self.emit_expr(x));
let name = node.name().and_then(|x| self.emit_name(x));
let type_repr = node.ty().and_then(|x| self.emit_type(x));
let visibility = node.visibility().and_then(|x| self.emit_visibility(x));
let label = self.trap.emit(generated::RecordField {
id: TrapId::Star,
attrs,
expr,
name,
type_repr,
visibility,

View File

@@ -131,7 +131,7 @@ lib/codeql/rust/elements/RangePat.qll b5c0cfc84b8a767d58593fa7102dcf4be3ff8b02ba
lib/codeql/rust/elements/RecordExpr.qll b8541a33ef408f2070103c1db8b6ec845bc6b1d8c810f5d8d208e5eeb9f86b30 a6d9602a64c9acf48f033f06fe7e1d86382512fd378ee3044f1126726847f696
lib/codeql/rust/elements/RecordExprField.qll edac04146849e2aeca27e7bbb896c21aa2e2b15736b1e8a06ac51ab01433b3ac 7c062bd6d5dd5b1d972450fb0b3272cd9b45f94ccd668c3bd4347e2dce3279ed
lib/codeql/rust/elements/RecordExprFieldList.qll 672c3854cb84090c8a2e9311c43448016dc2614ecbf86dbe404156304674e38f 01ae0ffca0bf640c61120e36fcf2c560555f4aabbd49ddce6f5c1a3561dbfc31
lib/codeql/rust/elements/RecordField.qll 87d68aa912574596ba09ecb3ab437472635cd76eff49cd5bef00eaabbd264f08 01871ee4dd9bd02acd981fbc109abfa4ee1b303deaa148484476317c4c41c924
lib/codeql/rust/elements/RecordField.qll 5d23e25985857e37ab7d699a6298d842751da9fb46da341378e17fd7cef66cc8 59272d720dbbad02094f98bf8cf3372974eb449843522b5f510c1f1b01bd2834
lib/codeql/rust/elements/RecordFieldList.qll cebab3fba41221e61cda801070a7f414b62b4fbcf2206e35462c0da35ad75c3f db092d47eea871d61541b9711d7139a99394e0ed83901a8ae60f03dfa8ed722f
lib/codeql/rust/elements/RecordPat.qll 3e31af707f72e9af42142e54b7251da8cbc88a9d5f448a4e6b3ca578f92f5680 0b459d751c26a062608ef0b6f3859e9ed1342e129b004ec218694d011955cfbd
lib/codeql/rust/elements/RecordPatField.qll 7487461887e82bcf224b02628dfc64457121ab17e731e2dc7aa7e731ab16c02f f2018e55722245eb4273fb067242aaa503c43f91671a55b3a4bb51fe7bc0a03c
@@ -574,7 +574,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 4f168ef5d5bb87a903251cc31b2e44a759b099ec69c90af31783fbb15778c940 0e34f94a45a13396fd57d94c245dc64d1adde2ab0e22b56946f7e94c04e297fc
lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 40ab5c592e7699c621787793743e33988de71ff42ca27599f5ab3ddb70e3f7d8 12c0a6eed2202ee3e892f61da3b3ce77ac3190854cdf3097e8d2be98aa3cb91d
lib/codeql/rust/elements/internal/generated/ParentChild.qll 1df63bfa8268f7db25eab70abedb8d424d892b56e92ceee8c7900cd33b1af07f cfa3d31a89303e60f4ed60ed5ca5fd04973202828aa674205d333f9fa784705f
lib/codeql/rust/elements/internal/generated/ParentChild.qll 2992505ffc3279d58f2d03e89ec0f7d23aedebb3c3baf990bfbda894a6cc10e8 2f6b721e8244b444b47d41c2303fea166debee208544389c4dd9f2be0d62fe43
lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll c5fa328ea60d3a3333d7c7bb3480969c1873166c7ac8ebb9d0afad7a8099d1a8 2dbbb6200d96f7db7dea4a55bdeab8d67b14d39a43e0bd54ada019f7e466f163
lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4
lib/codeql/rust/elements/internal/generated/Path.qll 8e47e91aff3f8c60f1ee8cb3887b8e4936c38e4665d052f2c92a939a969aac29 2c28beb89cabd7c7c91a5bc65c874f414cb96bbefde37b25811b61089a8a0053
@@ -589,11 +589,11 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 51d1e9e683fc79dddbff
lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f
lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9
lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9
lib/codeql/rust/elements/internal/generated/Raw.qll 17037cbf4b911c74b45453d733726218512c5c8f5e890a6f0e3290fab894a237 5fb11b239f210c30823b8862385f8b9f459ef8b62d47b6b50ba560e4ce2cac7c
lib/codeql/rust/elements/internal/generated/Raw.qll cfbf960b83fc7f659214a48ced60001366410322a116de255678dec9d765d8dd c0d1ee182ccb916dedf33a272fb37ac394e0fac95ef4fadb8a93c7db8d11feb5
lib/codeql/rust/elements/internal/generated/RecordExpr.qll 2131b2cb336caa76170082e69776011bf02576bbfdd34ba68ca84af24209250a 39a2e3ec32352b594c43cc1295e0e8b3f9808173322d3d73cb7d48ef969d5565
lib/codeql/rust/elements/internal/generated/RecordExprField.qll 7e9f8663d3b74ebbc9603b10c9912f082febba6bd73d344b100bbd3edf837802 fbe6b578e7fd5d5a6f21bbb8c388957ab7210a6a249ec71510a50fb35b319ea1
lib/codeql/rust/elements/internal/generated/RecordExprFieldList.qll 179a97211fe7aa6265085d4d54115cdbc0e1cd7c9b2135591e8f36d6432f13d3 dd44bbbc1e83a1ed3a587afb729d7debf7aeb7b63245de181726af13090e50c0
lib/codeql/rust/elements/internal/generated/RecordField.qll 6d4b184c85419f9282937ebd1b1d14930a263e8754124f2323953991ca0f0e59 2f8bec227f960ae98fc320a65efdfdc5dc04455cd59697e2621585e5a5f942b8
lib/codeql/rust/elements/internal/generated/RecordField.qll 7a6fd6a8362ea1671560eeb96abcaf9ae412ec9800fcf9c9fbda1849253912af 0e72e067475c20d72aeae2f10589e3f25806b44ac60b6b7289ba860de98a7c92
lib/codeql/rust/elements/internal/generated/RecordFieldList.qll d7bb2677338cf420b0d6371aeec781aacc2272c73413ea96b7418177ad149fb9 5ef52074b9f4ec31e7422b70efdb2e650d673b2625efdfec18a4e48c30e35cf6
lib/codeql/rust/elements/internal/generated/RecordPat.qll f2ce392fb7e481a139ea527ad32d1c7ba65404a05efc56f5c68ce1e8e1e0a928 9710048cd1e6b26b3054ac95778e47f16cff6424bab9ef0c099c1109ef14741f
lib/codeql/rust/elements/internal/generated/RecordPatField.qll 5bf624d22903fb874e6d03541cf453493badd382b6910ce950ad0d34dd580e9a b9ec89b69a58b9c418405efa9b0e6ee7b07616f5696a0858583a339d657b5855
@@ -1029,8 +1029,9 @@ test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList.ql b6cd65
test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getAttr.ql 15b297e79c1ba8c92cb97148d6aab78ed1fd2c94f0d3a430ead8d541024e81ce 4f0a131011cf32e172f7bd027769e39642fb506d37b3d50b175c6ed5947d3d9c
test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getField.ql c55e4775c8880c05944be04bdeb1c9e6bad45b922ba71ac3145acd83ff988e59 14ce98d1e5564e9e27c29110237cf6210d130ea887920b2b1bd34a853b7fcc63
test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getSpread.ql f2dd6b85da1cd8195986aefbe7dc8171db6fbbe5b2612c4cbdd8aba052cb0c6a 2c19cb1510c215ddfa004d40bf30fc0fe0dcbb530c320b297541f1dbcb204143
test/extractor-tests/generated/RecordField/RecordField.ql b1f14a17b6f2e581c2a1e882a7405351ded14c565375b99a0119fafed93a2b09 b7d74549a4f7556e79fcbdb79748905fb13d13cd01de3d551cb5898b1d0af87a
test/extractor-tests/generated/RecordField/RecordField.ql 8ba8ed51144c69266f8a5644604f560d1569de76e1070d8f22247d07ebc521c8 87d485651f9711e49c576dddd543077c49892b71e45fc65ce5122ded303b49f5
test/extractor-tests/generated/RecordField/RecordField_getAttr.ql aa29d317dee23039a807df530a6f04b0678c4d1d34207a4381be535ff04af478 41c5778d6316eec19192334046ed110aea44a4c45937d5c355a9b71c54aa8e04
test/extractor-tests/generated/RecordField/RecordField_getExpr.ql 15ab939ede4ed4395ef8db8f6e0a3ac03079a3ae617ce9335fb93ba565b402de 9d853f305baf56ec08b22342adc4deb096d771fa48fd478932cc5187cd66304f
test/extractor-tests/generated/RecordField/RecordField_getName.ql 1f5c47d41367bd0115df86f22a70d4621d7cbfb41554daa598da29f549479670 64535303b273f1c2027b6ce89b50816ad3cbbca9bf00b2b8402e36b26e675d97
test/extractor-tests/generated/RecordField/RecordField_getTypeRepr.ql f61cfcd0c682604b882a4ed9c746e6f6087e4798d7aaf9d29579e0e2372406e6 01371887fa82748ef196d2e9d27d26c586efb5b4f82d48967b5494723c54af4d
test/extractor-tests/generated/RecordField/RecordField_getVisibility.ql cc45e9bb9418d15cef07a1827358c3f18a8737324c8e6852591a2da70df89360 45557497fc165a212fffda71dedabc8159a4f72323430df732698a18922b366c

1
rust/ql/.gitattributes generated vendored
View File

@@ -1033,6 +1033,7 @@
/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getSpread.ql linguist-generated
/test/extractor-tests/generated/RecordField/RecordField.ql linguist-generated
/test/extractor-tests/generated/RecordField/RecordField_getAttr.ql linguist-generated
/test/extractor-tests/generated/RecordField/RecordField_getExpr.ql linguist-generated
/test/extractor-tests/generated/RecordField/RecordField_getName.ql linguist-generated
/test/extractor-tests/generated/RecordField/RecordField_getTypeRepr.ql linguist-generated
/test/extractor-tests/generated/RecordField/RecordField_getVisibility.ql linguist-generated

View File

@@ -6,6 +6,7 @@
private import internal.RecordFieldImpl
import codeql.rust.elements.AstNode
import codeql.rust.elements.Attr
import codeql.rust.elements.Expr
import codeql.rust.elements.Name
import codeql.rust.elements.TypeRepr
import codeql.rust.elements.Visibility

View File

@@ -903,12 +903,15 @@ private module Impl {
private Element getImmediateChildOfRecordField(
RecordField e, int index, string partialPredicateCall
) {
exists(int b, int bAstNode, int n, int nAttr, int nName, int nTypeRepr, int nVisibility |
exists(
int b, int bAstNode, int n, int nAttr, int nExpr, int nName, int nTypeRepr, int nVisibility
|
b = 0 and
bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and
n = bAstNode and
nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and
nName = nAttr + 1 and
nExpr = nAttr + 1 and
nName = nExpr + 1 and
nTypeRepr = nName + 1 and
nVisibility = nTypeRepr + 1 and
(
@@ -919,7 +922,9 @@ private module Impl {
result = e.getAttr(index - n) and
partialPredicateCall = "Attr(" + (index - n).toString() + ")"
or
index = nAttr and result = e.getName() and partialPredicateCall = "Name()"
index = nAttr and result = e.getExpr() and partialPredicateCall = "Expr()"
or
index = nExpr and result = e.getName() and partialPredicateCall = "Name()"
or
index = nName and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()"
or

View File

@@ -786,6 +786,11 @@ module Raw {
*/
Attr getAttr(int index) { record_field_attrs(this, index, result) }
/**
* Gets the expression of this record field, if it exists.
*/
Expr getExpr() { record_field_exprs(this, result) }
/**
* Gets the name of this record field, if it exists.
*/

View File

@@ -8,6 +8,7 @@ private import codeql.rust.elements.internal.generated.Synth
private import codeql.rust.elements.internal.generated.Raw
import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl
import codeql.rust.elements.Attr
import codeql.rust.elements.Expr
import codeql.rust.elements.Name
import codeql.rust.elements.TypeRepr
import codeql.rust.elements.Visibility
@@ -48,6 +49,19 @@ module Generated {
*/
final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) }
/**
* Gets the expression of this record field, if it exists.
*/
Expr getExpr() {
result =
Synth::convertExprFromRaw(Synth::convertRecordFieldToRaw(this).(Raw::RecordField).getExpr())
}
/**
* Holds if `getExpr()` exists.
*/
final predicate hasExpr() { exists(this.getExpr()) }
/**
* Gets the name of this record field, if it exists.
*/

View File

@@ -836,6 +836,12 @@ record_field_attrs(
int attr: @attr ref
);
#keyset[id]
record_field_exprs(
int id: @record_field ref,
int expr: @expr ref
);
#keyset[id]
record_field_names(
int id: @record_field ref,

View File

@@ -2,13 +2,16 @@
import codeql.rust.elements
import TestUtils
from RecordField x, int getNumberOfAttrs, string hasName, string hasTypeRepr, string hasVisibility
from
RecordField x, int getNumberOfAttrs, string hasExpr, string hasName, string hasTypeRepr,
string hasVisibility
where
toBeTested(x) and
not x.isUnknown() and
getNumberOfAttrs = x.getNumberOfAttrs() and
(if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and
(if x.hasName() then hasName = "yes" else hasName = "no") and
(if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and
if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no"
select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasName:", hasName, "hasTypeRepr:", hasTypeRepr,
"hasVisibility:", hasVisibility
select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasName:", hasName,
"hasTypeRepr:", hasTypeRepr, "hasVisibility:", hasVisibility

View File

@@ -0,0 +1,7 @@
// generated by codegen, do not edit
import codeql.rust.elements
import TestUtils
from RecordField x
where toBeTested(x) and not x.isUnknown()
select x, x.getExpr()

1
rust/schema/ast.py generated
View File

@@ -535,6 +535,7 @@ class RecordExprFieldList(AstNode, ):
class RecordField(AstNode, ):
attrs: list["Attr"] | child
expr: optional["Expr"] | child
name: optional["Name"] | child
type_repr: optional["TypeRepr"] | child
visibility: optional["Visibility"] | child