fix: zero arg functions were grabbing extra dependencies they didn't need to
fix: Had the wrong conversion for constant maps to plutus data. Fixed to check for right conversion
This commit is contained in:
parent
cf6d04e95b
commit
bfd2a50a6b
|
@ -962,7 +962,29 @@ pub fn convert_constants_to_data(constants: Vec<Rc<UplcConstant>>) -> Vec<UplcCo
|
||||||
.map_or(Some((*b).into()), |_| None),
|
.map_or(Some((*b).into()), |_| None),
|
||||||
fields: vec![],
|
fields: vec![],
|
||||||
})),
|
})),
|
||||||
UplcConstant::ProtoList(_, constants) => {
|
UplcConstant::ProtoList(list_type, constants) => {
|
||||||
|
if matches!(list_type, UplcType::Pair(_, _)) {
|
||||||
|
let inner_constants = constants
|
||||||
|
.iter()
|
||||||
|
.cloned()
|
||||||
|
.map(|pair| match pair {
|
||||||
|
UplcConstant::ProtoPair(_, _, left, right) => {
|
||||||
|
let inner_constants = vec![left, right];
|
||||||
|
let inner_constants = convert_constants_to_data(inner_constants)
|
||||||
|
.into_iter()
|
||||||
|
.map(|constant| match constant {
|
||||||
|
UplcConstant::Data(d) => d,
|
||||||
|
_ => todo!(),
|
||||||
|
})
|
||||||
|
.collect_vec();
|
||||||
|
(inner_constants[0].clone(), inner_constants[1].clone())
|
||||||
|
}
|
||||||
|
_ => unreachable!(),
|
||||||
|
})
|
||||||
|
.collect_vec();
|
||||||
|
|
||||||
|
UplcConstant::Data(PlutusData::Map(KeyValuePairs::Def(inner_constants)))
|
||||||
|
} else {
|
||||||
let inner_constants =
|
let inner_constants =
|
||||||
convert_constants_to_data(constants.iter().cloned().map(Rc::new).collect())
|
convert_constants_to_data(constants.iter().cloned().map(Rc::new).collect())
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -974,6 +996,7 @@ pub fn convert_constants_to_data(constants: Vec<Rc<UplcConstant>>) -> Vec<UplcCo
|
||||||
|
|
||||||
UplcConstant::Data(PlutusData::Array(inner_constants))
|
UplcConstant::Data(PlutusData::Array(inner_constants))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
UplcConstant::ProtoPair(_, _, left, right) => {
|
UplcConstant::ProtoPair(_, _, left, right) => {
|
||||||
let inner_constants = vec![left.clone(), right.clone()];
|
let inner_constants = vec![left.clone(), right.clone()];
|
||||||
let inner_constants = convert_constants_to_data(inner_constants)
|
let inner_constants = convert_constants_to_data(inner_constants)
|
||||||
|
@ -984,10 +1007,10 @@ pub fn convert_constants_to_data(constants: Vec<Rc<UplcConstant>>) -> Vec<UplcCo
|
||||||
})
|
})
|
||||||
.collect_vec();
|
.collect_vec();
|
||||||
|
|
||||||
UplcConstant::Data(PlutusData::Map(KeyValuePairs::Def(vec![(
|
UplcConstant::Data(PlutusData::Array(vec![
|
||||||
inner_constants[0].clone(),
|
inner_constants[0].clone(),
|
||||||
inner_constants[1].clone(),
|
inner_constants[1].clone(),
|
||||||
)])))
|
]))
|
||||||
}
|
}
|
||||||
d @ UplcConstant::Data(_) => d.clone(),
|
d @ UplcConstant::Data(_) => d.clone(),
|
||||||
UplcConstant::Unit => UplcConstant::Data(PlutusData::Constr(Constr {
|
UplcConstant::Unit => UplcConstant::Data(PlutusData::Constr(Constr {
|
||||||
|
@ -1540,7 +1563,7 @@ pub fn handle_func_dependencies(
|
||||||
.unwrap_or_else(|| unreachable!());
|
.unwrap_or_else(|| unreachable!());
|
||||||
|
|
||||||
if (dep_scope.common_ancestor(func_scope) == *func_scope && !depend_comp.args.is_empty())
|
if (dep_scope.common_ancestor(func_scope) == *func_scope && !depend_comp.args.is_empty())
|
||||||
|| function_component.args.is_empty()
|
|| (function_component.args.is_empty() && !depend_comp.args.is_empty())
|
||||||
{
|
{
|
||||||
let mut recursion_ir = vec![];
|
let mut recursion_ir = vec![];
|
||||||
handle_recursion_ir(&dependency, depend_comp, &mut recursion_ir);
|
handle_recursion_ir(&dependency, depend_comp, &mut recursion_ir);
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
# This file was generated by Aiken
|
||||||
|
# You typically do not need to edit this file
|
||||||
|
|
||||||
|
[[requirements]]
|
||||||
|
name = "aiken-lang/stdlib"
|
||||||
|
version = "main"
|
||||||
|
source = "github"
|
||||||
|
|
||||||
|
[[packages]]
|
||||||
|
name = "aiken-lang/stdlib"
|
||||||
|
version = "main"
|
||||||
|
requirements = []
|
||||||
|
source = "github"
|
|
@ -0,0 +1,8 @@
|
||||||
|
name = "aiken-lang/acceptance_test_082"
|
||||||
|
version = "0.0.0"
|
||||||
|
description = ""
|
||||||
|
|
||||||
|
[[dependencies]]
|
||||||
|
name = 'aiken-lang/stdlib'
|
||||||
|
version = 'main'
|
||||||
|
source = 'github'
|
|
@ -0,0 +1,29 @@
|
||||||
|
use aiken/list
|
||||||
|
use aiken/transaction/value.{Value}
|
||||||
|
|
||||||
|
test foldl_value_test1() {
|
||||||
|
let val1 = value.from_lovelace(1000000)
|
||||||
|
let val2 = value.from_lovelace(2000000)
|
||||||
|
let foo =
|
||||||
|
fn(i: Value, acc: (Value, Int)) {
|
||||||
|
let (v, int) = acc
|
||||||
|
(value.add(i, v), int + 1)
|
||||||
|
}
|
||||||
|
list.foldl([val1, val2], foo, (value.zero(), 0)) == (
|
||||||
|
value.from_lovelace(3000000),
|
||||||
|
2,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
// test foldl_value_test2() {
|
||||||
|
// let val1 = value.from_lovelace(1000000)
|
||||||
|
// let val2 = value.from_lovelace(2000000)
|
||||||
|
// let foo =
|
||||||
|
// fn(i: Value, acc: (Value, Int)) {
|
||||||
|
// let (v, int) = acc
|
||||||
|
// (value.add(i, v), int + 1)
|
||||||
|
// }
|
||||||
|
// list.foldl([val1, val2], foo, (value.from_lovelace(0), 0)) == (
|
||||||
|
// value.from_lovelace(3000000),
|
||||||
|
// 2,
|
||||||
|
// )
|
||||||
|
// }
|
Loading…
Reference in New Issue