Fix: issue crash in code gen with incorrect column length in decision trees (#1069)

* Fix: Deeply nested assignments would offset the new columns count calculation. Now we track relevant columns and their path to ensure each row has wildcards if they don't contain the relevant column

* Add test plus clippy fix

* Clippy fix

* New version clippy fix
This commit is contained in:
Kasey
2024-12-05 11:02:19 +07:00
committed by GitHub
parent a9675fedc6
commit 86ec3b2924
13 changed files with 392 additions and 183 deletions

View File

@@ -632,7 +632,7 @@ fn encode_type(typ: &Type, bytes: &mut Vec<u8>) {
}
}
impl<'b> Decode<'b> for Constant {
impl Decode<'_> for Constant {
fn decode(d: &mut Decoder) -> Result<Self, de::Error> {
match &decode_constant(d)?[..] {
[0] => Ok(Constant::Integer(BigInt::decode(d)?)),
@@ -806,7 +806,7 @@ impl Encode for Unique {
}
}
impl<'b> Decode<'b> for Unique {
impl Decode<'_> for Unique {
fn decode(d: &mut Decoder) -> Result<Self, de::Error> {
Ok(isize::decode(d)?.into())
}
@@ -821,7 +821,7 @@ impl Encode for Name {
}
}
impl<'b> Decode<'b> for Name {
impl Decode<'_> for Name {
fn decode(d: &mut Decoder) -> Result<Self, de::Error> {
Ok(Name {
text: String::decode(d)?,
@@ -830,7 +830,7 @@ impl<'b> Decode<'b> for Name {
}
}
impl<'b> Binder<'b> for Name {
impl Binder<'_> for Name {
fn binder_encode(&self, e: &mut Encoder) -> Result<(), en::Error> {
self.encode(e)?;
@@ -855,7 +855,7 @@ impl Encode for NamedDeBruijn {
}
}
impl<'b> Decode<'b> for NamedDeBruijn {
impl Decode<'_> for NamedDeBruijn {
fn decode(d: &mut Decoder) -> Result<Self, de::Error> {
Ok(NamedDeBruijn {
text: String::decode(d)?,
@@ -864,7 +864,7 @@ impl<'b> Decode<'b> for NamedDeBruijn {
}
}
impl<'b> Binder<'b> for NamedDeBruijn {
impl Binder<'_> for NamedDeBruijn {
fn binder_encode(&self, e: &mut Encoder) -> Result<(), en::Error> {
self.text.encode(e)?;
self.index.encode(e)?;
@@ -892,13 +892,13 @@ impl Encode for DeBruijn {
}
}
impl<'b> Decode<'b> for DeBruijn {
impl Decode<'_> for DeBruijn {
fn decode(d: &mut Decoder) -> Result<Self, de::Error> {
Ok(usize::decode(d)?.into())
}
}
impl<'b> Binder<'b> for DeBruijn {
impl Binder<'_> for DeBruijn {
fn binder_encode(&self, _: &mut Encoder) -> Result<(), en::Error> {
Ok(())
}
@@ -922,7 +922,7 @@ impl Encode for FakeNamedDeBruijn {
}
}
impl<'b> Decode<'b> for FakeNamedDeBruijn {
impl Decode<'_> for FakeNamedDeBruijn {
fn decode(d: &mut Decoder) -> Result<Self, de::Error> {
let index = DeBruijn::decode(d)?;
@@ -930,7 +930,7 @@ impl<'b> Decode<'b> for FakeNamedDeBruijn {
}
}
impl<'b> Binder<'b> for FakeNamedDeBruijn {
impl Binder<'_> for FakeNamedDeBruijn {
fn binder_encode(&self, _: &mut Encoder) -> Result<(), en::Error> {
Ok(())
}
@@ -954,7 +954,7 @@ impl Encode for DefaultFunction {
}
}
impl<'b> Decode<'b> for DefaultFunction {
impl Decode<'_> for DefaultFunction {
fn decode(d: &mut Decoder) -> Result<Self, de::Error> {
let builtin_tag = d.bits8(BUILTIN_TAG_WIDTH as usize)?;
builtin_tag.try_into()

View File

@@ -132,7 +132,7 @@ impl ToPlutusData for Address {
}
}
impl<'a> ToPlutusData for WithWrappedTransactionId<'a, TransactionInput> {
impl ToPlutusData for WithWrappedTransactionId<'_, TransactionInput> {
fn to_plutus_data(&self) -> PlutusData {
wrap_multiple_with_constr(
0,
@@ -197,7 +197,7 @@ where
}
}
impl<'a> ToPlutusData for WithWrappedTransactionId<'a, KeyValuePairs<ScriptPurpose, Redeemer>> {
impl ToPlutusData for WithWrappedTransactionId<'_, KeyValuePairs<ScriptPurpose, Redeemer>> {
fn to_plutus_data(&self) -> PlutusData {
let mut data_vec: Vec<(PlutusData, PlutusData)> = vec![];
for (key, value) in self.0.iter() {
@@ -210,7 +210,7 @@ impl<'a> ToPlutusData for WithWrappedTransactionId<'a, KeyValuePairs<ScriptPurpo
}
}
impl<'a> ToPlutusData for WithNeverRegistrationDeposit<'a, Vec<Certificate>> {
impl ToPlutusData for WithNeverRegistrationDeposit<'_, Vec<Certificate>> {
fn to_plutus_data(&self) -> PlutusData {
self.0
.iter()
@@ -220,7 +220,7 @@ impl<'a> ToPlutusData for WithNeverRegistrationDeposit<'a, Vec<Certificate>> {
}
}
impl<'a> ToPlutusData for WithNeverRegistrationDeposit<'a, KeyValuePairs<ScriptPurpose, Redeemer>> {
impl ToPlutusData for WithNeverRegistrationDeposit<'_, KeyValuePairs<ScriptPurpose, Redeemer>> {
fn to_plutus_data(&self) -> PlutusData {
let mut data_vec: Vec<(PlutusData, PlutusData)> = vec![];
for (key, value) in self.0.iter() {
@@ -309,7 +309,7 @@ impl ToPlutusData for PositiveCoin {
}
}
impl<'a> ToPlutusData for WithZeroAdaAsset<'a, Value> {
impl ToPlutusData for WithZeroAdaAsset<'_, Value> {
fn to_plutus_data(&self) -> PlutusData {
match self.0 {
Value::Coin(coin) => {
@@ -345,7 +345,7 @@ impl ToPlutusData for Value {
}
}
impl<'a> ToPlutusData for WithZeroAdaAsset<'a, MintValue> {
impl ToPlutusData for WithZeroAdaAsset<'_, MintValue> {
fn to_plutus_data(&self) -> PlutusData {
value_to_plutus_data(
self.0.mint_value.iter(),
@@ -429,7 +429,7 @@ impl<'a> ToPlutusData for WithOptionDatum<'a, WithZeroAdaAsset<'a, Vec<Transacti
}
}
impl<'a> ToPlutusData for WithZeroAdaAsset<'a, Vec<TransactionOutput>> {
impl ToPlutusData for WithZeroAdaAsset<'_, Vec<TransactionOutput>> {
fn to_plutus_data(&self) -> PlutusData {
Data::list(
self.0
@@ -465,7 +465,7 @@ impl<'a> ToPlutusData for WithOptionDatum<'a, WithZeroAdaAsset<'a, TransactionOu
}
}
impl<'a> ToPlutusData for WithZeroAdaAsset<'a, TransactionOutput> {
impl ToPlutusData for WithZeroAdaAsset<'_, TransactionOutput> {
fn to_plutus_data(&self) -> PlutusData {
match self.0 {
TransactionOutput::Legacy(legacy_output) => {
@@ -528,7 +528,7 @@ impl ToPlutusData for StakeCredential {
}
}
impl<'a> ToPlutusData for WithPartialCertificates<'a, Vec<Certificate>> {
impl ToPlutusData for WithPartialCertificates<'_, Vec<Certificate>> {
fn to_plutus_data(&self) -> PlutusData {
self.0
.iter()
@@ -538,7 +538,7 @@ impl<'a> ToPlutusData for WithPartialCertificates<'a, Vec<Certificate>> {
}
}
impl<'a> ToPlutusData for WithPartialCertificates<'a, Certificate> {
impl ToPlutusData for WithPartialCertificates<'_, Certificate> {
fn to_plutus_data(&self) -> PlutusData {
match self.0 {
Certificate::StakeRegistration(stake_credential) => {
@@ -586,7 +586,7 @@ impl<'a> ToPlutusData for WithPartialCertificates<'a, Certificate> {
}
}
impl<'a> ToPlutusData for WithNeverRegistrationDeposit<'a, Certificate> {
impl ToPlutusData for WithNeverRegistrationDeposit<'_, Certificate> {
fn to_plutus_data(&self) -> PlutusData {
match self.0 {
Certificate::StakeRegistration(stake_credential) => wrap_multiple_with_constr(
@@ -870,7 +870,7 @@ impl ToPlutusData for TxInInfo {
// NOTE: This is a _small_ abuse of the 'WithWrappedTransactionId'. We know the wrapped
// is needed for V1 and V2, and it also appears that for V1 and V2, the certifying
// purpose mustn't include the certificate index. So, we also short-circuit it here.
impl<'a> ToPlutusData for WithWrappedTransactionId<'a, ScriptPurpose> {
impl ToPlutusData for WithWrappedTransactionId<'_, ScriptPurpose> {
fn to_plutus_data(&self) -> PlutusData {
match self.0 {
ScriptPurpose::Minting(policy_id) => wrap_with_constr(0, policy_id.to_plutus_data()),
@@ -891,7 +891,7 @@ impl<'a> ToPlutusData for WithWrappedTransactionId<'a, ScriptPurpose> {
}
}
impl<'a> ToPlutusData for WithNeverRegistrationDeposit<'a, ScriptPurpose> {
impl ToPlutusData for WithNeverRegistrationDeposit<'_, ScriptPurpose> {
fn to_plutus_data(&self) -> PlutusData {
match self.0 {
ScriptPurpose::Minting(policy_id) => wrap_with_constr(0, policy_id.to_plutus_data()),
@@ -1210,14 +1210,14 @@ impl ToPlutusData for RationalNumber {
}
}
impl<'a> ToPlutusData for WithArrayRational<'a, RationalNumber> {
impl ToPlutusData for WithArrayRational<'_, RationalNumber> {
fn to_plutus_data(&self) -> PlutusData {
let gcd = self.0.numerator.gcd(&self.0.denominator);
vec![self.0.numerator / gcd, self.0.denominator / gcd].to_plutus_data()
}
}
impl<'a> ToPlutusData for WithWrappedStakeCredential<'a, Vec<(Address, Coin)>> {
impl ToPlutusData for WithWrappedStakeCredential<'_, Vec<(Address, Coin)>> {
fn to_plutus_data(&self) -> PlutusData {
self.0
.iter()
@@ -1232,7 +1232,7 @@ impl<'a> ToPlutusData for WithWrappedStakeCredential<'a, Vec<(Address, Coin)>> {
}
}
impl<'a> ToPlutusData for WithWrappedStakeCredential<'a, KeyValuePairs<Address, Coin>> {
impl ToPlutusData for WithWrappedStakeCredential<'_, KeyValuePairs<Address, Coin>> {
fn to_plutus_data(&self) -> PlutusData {
KeyValuePairs::from(
self.0
@@ -1249,7 +1249,7 @@ impl<'a> ToPlutusData for WithWrappedStakeCredential<'a, KeyValuePairs<Address,
}
}
impl<'a> ToPlutusData for WithWrappedStakeCredential<'a, StakeCredential> {
impl ToPlutusData for WithWrappedStakeCredential<'_, StakeCredential> {
fn to_plutus_data(&self) -> PlutusData {
wrap_with_constr(0, self.0.to_plutus_data())
}
@@ -1291,7 +1291,7 @@ impl ToPlutusData for Vote {
}
}
impl<'a, T> ToPlutusData for WithNeverRegistrationDeposit<'a, ScriptInfo<T>>
impl<T> ToPlutusData for WithNeverRegistrationDeposit<'_, ScriptInfo<T>>
where
T: ToPlutusData,
{