feat: Remove tuple_index and record_access in favor of faster more direct functions for

accessing an item in a tuple or a field in a record
This commit is contained in:
microproofs 2023-09-27 16:24:16 -04:00 committed by Lucas
parent 1bcc9e8524
commit 47596f0324
30 changed files with 191 additions and 421 deletions

View File

@ -10,7 +10,7 @@ use indexmap::{IndexMap, IndexSet};
use itertools::Itertools; use itertools::Itertools;
use uplc::{ use uplc::{
ast::{Constant as UplcConstant, Name, NamedDeBruijn, Program, Term, Type as UplcType}, ast::{Constant as UplcConstant, Name, NamedDeBruijn, Program, Term, Type as UplcType},
builder::{CONSTR_FIELDS_EXPOSER, CONSTR_GET_FIELD, CONSTR_INDEX_EXPOSER, EXPECT_ON_LIST}, builder::{CONSTR_FIELDS_EXPOSER, CONSTR_INDEX_EXPOSER, EXPECT_ON_LIST},
builtins::DefaultFunction, builtins::DefaultFunction,
machine::cost_model::ExBudget, machine::cost_model::ExBudget,
optimize::aiken_optimize_and_intern, optimize::aiken_optimize_and_intern,
@ -22,7 +22,7 @@ use crate::{
AssignmentKind, BinOp, Pattern, Span, TypedArg, TypedClause, TypedDataType, TypedFunction, AssignmentKind, BinOp, Pattern, Span, TypedArg, TypedClause, TypedDataType, TypedFunction,
TypedPattern, TypedValidator, UnOp, TypedPattern, TypedValidator, UnOp,
}, },
builtins::{bool, data, int, void}, builtins::{bool, data, int, list, void},
expr::TypedExpr, expr::TypedExpr,
gen_uplc::builder::{ gen_uplc::builder::{
check_replaceable_opaque_type, convert_opaque_type, erase_opaque_type_operations, check_replaceable_opaque_type, convert_opaque_type, erase_opaque_type_operations,
@ -187,10 +187,7 @@ impl<'a> CodeGenerator<'a> {
fn finalize(&mut self, mut term: Term<Name>) -> Program<Name> { fn finalize(&mut self, mut term: Term<Name>) -> Program<Name> {
if self.needs_field_access { if self.needs_field_access {
term = term term = term.constr_fields_exposer().constr_index_exposer();
.constr_get_field()
.constr_fields_exposer()
.constr_index_exposer();
} }
// TODO: Once SOP is implemented, new version is 1.1.0 // TODO: Once SOP is implemented, new version is 1.1.0
@ -550,7 +547,38 @@ impl<'a> CodeGenerator<'a> {
if check_replaceable_opaque_type(&record.tipo(), &self.data_types) { if check_replaceable_opaque_type(&record.tipo(), &self.data_types) {
self.build(record) self.build(record)
} else { } else {
AirTree::record_access(*index, tipo.clone(), self.build(record)) self.needs_field_access = true;
let function_name = format!("__access_index_{}", *index);
if self.code_gen_functions.get(&function_name).is_none() {
let mut body = AirTree::local_var("__fields", list(data()));
for _ in 0..*index {
body = AirTree::builtin(
DefaultFunction::TailList,
list(data()),
vec![body],
)
}
body = AirTree::builtin(DefaultFunction::HeadList, data(), vec![body]);
self.code_gen_functions.insert(
function_name.clone(),
CodeGenFunction::Function {
body,
params: vec!["__fields".to_string()],
},
);
}
let list_of_fields = AirTree::call(
AirTree::local_var(CONSTR_FIELDS_EXPOSER, void()),
list(data()),
vec![self.build(record)],
);
AirTree::index_access(function_name, tipo.clone(), list_of_fields)
} }
} }
@ -622,8 +650,38 @@ impl<'a> CodeGenerator<'a> {
tipo.clone(), tipo.clone(),
), ),
TypedExpr::TupleIndex { index, tuple, .. } => { TypedExpr::TupleIndex {
AirTree::tuple_index(*index, tuple.tipo(), self.build(tuple)) index, tuple, tipo, ..
} => {
if tuple.tipo().is_2_tuple() {
AirTree::pair_index(*index, tipo.clone(), self.build(tuple))
} else {
let function_name = format!("__access_index_{}", *index);
if self.code_gen_functions.get(&function_name).is_none() {
let mut body = AirTree::local_var("__fields", list(data()));
for _ in 0..*index {
body = AirTree::builtin(
DefaultFunction::TailList,
list(data()),
vec![body],
)
}
body = AirTree::builtin(DefaultFunction::HeadList, data(), vec![body]);
self.code_gen_functions.insert(
function_name.clone(),
CodeGenFunction::Function {
body,
params: vec!["__fields".to_string()],
},
);
}
AirTree::index_access(function_name, tipo.clone(), self.build(tuple))
}
} }
TypedExpr::ErrorTerm { tipo, .. } => AirTree::error(tipo.clone()), TypedExpr::ErrorTerm { tipo, .. } => AirTree::error(tipo.clone()),
@ -3876,10 +3934,7 @@ impl<'a> CodeGenerator<'a> {
) { ) {
let mut term = self.uplc_code_gen(air_vec.clone()); let mut term = self.uplc_code_gen(air_vec.clone());
term = term term = term.constr_fields_exposer().constr_index_exposer();
.constr_get_field()
.constr_fields_exposer()
.constr_index_exposer();
let mut program: Program<Name> = Program { let mut program: Program<Name> = Program {
version: (1, 0, 0), version: (1, 0, 0),
@ -4660,18 +4715,6 @@ impl<'a> CodeGenerator<'a> {
arg_stack.push(term); arg_stack.push(term);
} }
Air::RecordAccess { record_index, tipo } => {
self.needs_field_access = true;
let constr = arg_stack.pop().unwrap();
let mut term = Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(constr))
.apply(Term::integer(record_index.into()));
term = builder::convert_data_to_type(term, &tipo);
arg_stack.push(term);
}
Air::FieldsExpose { Air::FieldsExpose {
indices, indices,
check_last_item, check_last_item,
@ -4931,33 +4974,6 @@ impl<'a> CodeGenerator<'a> {
arg_stack.push(term); arg_stack.push(term);
} }
Air::TupleIndex { tipo, tuple_index } => {
let mut term = arg_stack.pop().unwrap();
if matches!(tipo.get_uplc_type(), UplcType::Pair(_, _)) {
if tuple_index == 0 {
term = builder::convert_data_to_type(
Term::fst_pair().apply(term),
&tipo.get_inner_types()[0],
);
} else {
term = builder::convert_data_to_type(
Term::snd_pair().apply(term),
&tipo.get_inner_types()[1],
);
}
} else {
self.needs_field_access = true;
term = builder::convert_data_to_type(
Term::var(CONSTR_GET_FIELD)
.apply(term)
.apply(Term::integer(tuple_index.into())),
&tipo.get_inner_types()[tuple_index],
);
}
arg_stack.push(term);
}
Air::TupleAccessor { Air::TupleAccessor {
tipo, tipo,
names, names,

View File

@ -147,10 +147,6 @@ pub enum Air {
tipo: Rc<Type>, tipo: Rc<Type>,
}, },
// Field Access // Field Access
RecordAccess {
record_index: u64,
tipo: Rc<Type>,
},
FieldsExpose { FieldsExpose {
indices: Vec<(usize, String, Rc<Type>)>, indices: Vec<(usize, String, Rc<Type>)>,
check_last_item: bool, check_last_item: bool,
@ -173,10 +169,6 @@ pub enum Air {
tipo: Rc<Type>, tipo: Rc<Type>,
check_last_item: bool, check_last_item: bool,
}, },
TupleIndex {
tipo: Rc<Type>,
tuple_index: usize,
},
// Misc. // Misc.
ErrorTerm { ErrorTerm {
tipo: Rc<Type>, tipo: Rc<Type>,

View File

@ -315,18 +315,6 @@ pub enum AirExpression {
record: Box<AirTree>, record: Box<AirTree>,
args: Vec<AirTree>, args: Vec<AirTree>,
}, },
// Field Access
RecordAccess {
field_index: u64,
tipo: Rc<Type>,
record: Box<AirTree>,
},
// Tuple Access
TupleIndex {
tipo: Rc<Type>,
tuple_index: usize,
tuple: Box<AirTree>,
},
// Misc. // Misc.
ErrorTerm { ErrorTerm {
tipo: Rc<Type>, tipo: Rc<Type>,
@ -684,12 +672,33 @@ impl AirTree {
args, args,
}) })
} }
pub fn record_access(field_index: u64, tipo: Rc<Type>, record: AirTree) -> AirTree { pub fn index_access(function_name: String, tipo: Rc<Type>, list_of_fields: AirTree) -> AirTree {
AirTree::Expression(AirExpression::RecordAccess { AirTree::cast_from_data(
field_index, AirTree::call(
tipo, AirTree::var(
record: record.into(), ValueConstructor::public(
}) Type::Fn {
args: vec![list(data())],
ret: data(),
}
.into(),
ValueConstructorVariant::ModuleFn {
name: function_name.clone(),
field_map: None,
module: "".to_string(),
arity: 1,
location: Span::empty(),
builtin: None,
},
),
function_name,
"",
),
data(),
vec![list_of_fields],
),
tipo.clone(),
)
} }
pub fn fields_expose( pub fn fields_expose(
@ -754,12 +763,19 @@ impl AirTree {
hoisted_over: None, hoisted_over: None,
} }
} }
pub fn tuple_index(tuple_index: usize, tipo: Rc<Type>, tuple: AirTree) -> AirTree { pub fn pair_index(index: usize, tipo: Rc<Type>, tuple: AirTree) -> AirTree {
AirTree::Expression(AirExpression::TupleIndex { AirTree::cast_from_data(
tipo, AirTree::builtin(
tuple_index, if index == 0 {
tuple: tuple.into(), DefaultFunction::FstPair
}) } else {
DefaultFunction::SndPair
},
data(),
vec![tuple],
),
tipo.clone(),
)
} }
pub fn error(tipo: Rc<Type>) -> AirTree { pub fn error(tipo: Rc<Type>) -> AirTree {
AirTree::Expression(AirExpression::ErrorTerm { tipo }) AirTree::Expression(AirExpression::ErrorTerm { tipo })
@ -1241,28 +1257,6 @@ impl AirTree {
arg.create_air_vec(air_vec); arg.create_air_vec(air_vec);
} }
} }
AirExpression::RecordAccess {
field_index,
tipo,
record,
} => {
air_vec.push(Air::RecordAccess {
record_index: *field_index,
tipo: tipo.clone(),
});
record.create_air_vec(air_vec);
}
AirExpression::TupleIndex {
tipo,
tuple_index,
tuple,
} => {
air_vec.push(Air::TupleIndex {
tipo: tipo.clone(),
tuple_index: *tuple_index,
});
tuple.create_air_vec(air_vec);
}
AirExpression::ErrorTerm { tipo } => { AirExpression::ErrorTerm { tipo } => {
air_vec.push(Air::ErrorTerm { tipo: tipo.clone() }) air_vec.push(Air::ErrorTerm { tipo: tipo.clone() })
} }
@ -1300,8 +1294,6 @@ impl AirTree {
| AirExpression::If { tipo, .. } | AirExpression::If { tipo, .. }
| AirExpression::Constr { tipo, .. } | AirExpression::Constr { tipo, .. }
| AirExpression::RecordUpdate { tipo, .. } | AirExpression::RecordUpdate { tipo, .. }
| AirExpression::RecordAccess { tipo, .. }
| AirExpression::TupleIndex { tipo, .. }
| AirExpression::ErrorTerm { tipo } | AirExpression::ErrorTerm { tipo }
| AirExpression::Trace { tipo, .. } => tipo.clone(), | AirExpression::Trace { tipo, .. } => tipo.clone(),
AirExpression::Void => void(), AirExpression::Void => void(),
@ -1351,9 +1343,7 @@ impl AirTree {
| AirExpression::CastFromData { tipo, .. } | AirExpression::CastFromData { tipo, .. }
| AirExpression::CastToData { tipo, .. } | AirExpression::CastToData { tipo, .. }
| AirExpression::If { tipo, .. } | AirExpression::If { tipo, .. }
| AirExpression::RecordAccess { tipo, .. }
| AirExpression::Constr { tipo, .. } | AirExpression::Constr { tipo, .. }
| AirExpression::TupleIndex { tipo, .. }
| AirExpression::ErrorTerm { tipo } | AirExpression::ErrorTerm { tipo }
| AirExpression::Trace { tipo, .. } => vec![tipo], | AirExpression::Trace { tipo, .. } => vec![tipo],
AirExpression::Var { constructor, .. } => { AirExpression::Var { constructor, .. } => {
@ -1836,24 +1826,6 @@ impl AirTree {
); );
} }
} }
AirExpression::RecordAccess { record, .. } => {
record.do_traverse_tree_with(
tree_path,
current_depth + 1,
index_count.next_number(),
with,
apply_with_func_last,
);
}
AirExpression::TupleIndex { tuple, .. } => {
tuple.do_traverse_tree_with(
tree_path,
current_depth + 1,
index_count.next_number(),
with,
apply_with_func_last,
);
}
AirExpression::Trace { msg, then, .. } => { AirExpression::Trace { msg, then, .. } => {
msg.do_traverse_tree_with( msg.do_traverse_tree_with(
tree_path, tree_path,
@ -2170,21 +2142,6 @@ impl AirTree {
item.do_find_air_tree_node(tree_path_iter) item.do_find_air_tree_node(tree_path_iter)
} }
AirExpression::RecordAccess { record, .. } => {
if *index == 0 {
record.as_mut().do_find_air_tree_node(tree_path_iter)
} else {
panic!("Tree Path index outside tree children nodes")
}
}
AirExpression::TupleIndex { tuple, .. } => {
if *index == 0 {
tuple.as_mut().do_find_air_tree_node(tree_path_iter)
} else {
panic!("Tree Path index outside tree children nodes")
}
}
AirExpression::Trace { msg, then, .. } => { AirExpression::Trace { msg, then, .. } => {
if *index == 0 { if *index == 0 {
msg.as_mut().do_find_air_tree_node(tree_path_iter) msg.as_mut().do_find_air_tree_node(tree_path_iter)

View File

@ -455,8 +455,8 @@ mod tests {
"$ref": "#/definitions/test_module~1Input" "$ref": "#/definitions/test_module~1Input"
} }
}, },
"compiledCode": "59029101000032323232323232323232322223232533300a4a22930b19299980519b874800000454ccc038c020010526153300b4911d4578706563746564206e6f206669656c647320666f7220436f6e73747200161533300a3370e90010008a99980718040020a4c2a6601692011d4578706563746564206e6f206669656c647320666f7220436f6e73747200161533300a3370e90020008a99980718040020a4c2a6601692011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300b4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630080033253330093370e900000089919191919192999809980a8010991924c646600200200a44a66602c00229309919801801980c801191bae00130170013253330103370e900000089919299980b180c0010a4c2a660269201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a602c002601c00c2a660229212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300e00515330104901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c602600260260046eb0c044004c044008c03c004c01c01054cc0292412b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300700333001001480008888cccc01ccdc38008018061199980280299b8000448008c0380040080088c018dd5000918021baa0015734ae7155ceaab9e5573eae855d11", "compiledCode": "59026a010000323232323232323232222323253330084a22930b19299980419b874800000454ccc030c01801052615330094911d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153330083370e90010008a99980618030020a4c2a6601292011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153330083370e90020008a99980618030020a4c2a6601292011d4578706563746564206e6f206669656c647320666f7220436f6e737472001615330094912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630060033253330073370e90000008991919191919299980898098010991924c646600200200a44a66602800229309919801801980b801191bae001301500132533300e3370e900000089919299980a180b0010a4c2a660229201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a6028002601800c2a6601e9212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300c005153300e4901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c602200260220046eb0c03c004c03c008c034004c01401054cc0212412b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e7400163005003230063754002460086ea80055cd2b9c5573aaae7955cfaba15745",
"hash": "401a6c4bac4f3554a9bbe260aa12d2eec8c97bf903d23cd6ad426d1e", "hash": "fabdc2d41f23663983001520513a703bcaf015e33947764c4f65c2c8",
"definitions": { "definitions": {
"ByteArray": { "ByteArray": {
"dataType": "bytes" "dataType": "bytes"
@ -636,8 +636,8 @@ mod tests {
"$ref": "#/definitions/test_module~1Either$ByteArray_test_module~1Interval$Int" "$ref": "#/definitions/test_module~1Either$ByteArray_test_module~1Interval$Int"
} }
}, },
"compiledCode": "59020a0100003232323232323232323232223253330084a22930b19299980419b87480000044c8c94ccc038c040008526153300b4901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c601c002600c0062a66601066e1d200200113232533300e3010002132498c94ccc02ccdc3a400000226464a66602260260042930a99807249334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a602200260120042a66601666e1d20020011533300f3009002149854cc03124011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300c4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e7400163009001153300b4901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300e001300600315330094912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300600233001001480008888cccc01ccdc38008018061199980280299b8000448008c0380040080088c018dd5000918021baa0015734ae7155ceaab9e5573eae855d11", "compiledCode": "5901e3010000323232323232323232223253330064a22930b19299980319b87480000044c8c94ccc030c03800852615330094901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375c601800260080062a66600c66e1d200200113232533300c300e002132498c94ccc024cdc3a400000226464a66601e60220042930a99806249334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a601e002600e0042a66601266e1d20020011533300d3007002149854cc02924011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300a4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300700115330094901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300c001300400315330074912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e7400163004002230063754002460086ea80055cd2b9c5573aaae7955cfaba15745",
"hash": "8439b07179746c195c7631777b49e48c2931887547e3258f5f4a59f0", "hash": "b32c4cd46fa64739cddbd05cc35fef9bfc702b4c8ad8ac332a4e699c",
"definitions": { "definitions": {
"ByteArray": { "ByteArray": {
"dataType": "bytes" "dataType": "bytes"
@ -720,8 +720,8 @@ mod tests {
"$ref": "#/definitions/test_module~1Dict$test_module~1UUID_Int" "$ref": "#/definitions/test_module~1Dict$test_module~1UUID_Int"
} }
}, },
"compiledCode": "590106010000323232323232323232223253330064a22930b19299980319b87480000044c8c94ccc030c0380084c926323300100100222533300e00114984c8cc00c00cc044008c8c8dd698078011bae300d001300f0011533009491334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163756601800260126ea800c54cc01d2412b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300737540046600200290001111199980299b8700100300a2333300500533700008900118060008010012b9a5738aae7555cf2ab9f5742ae89", "compiledCode": "58e001000032323232323232223253330044a22930b19299980219b87480000044c8c94ccc028c0300084c926323300100100222533300c00114984c8cc00c00cc03c008c8c8dd698068011bae300b001300d0011533007491334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001637566014002600e6ea800c54cc0152412b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630053754004ae695ce2ab9d5573caae7d5d0aba201",
"hash": "683885e262c8857f80788a1626c1a327267d85cb49e08382288933b2", "hash": "1caa2519f38c63dfc5e3a457d1a06e57848628f5a2495b04afb64cba",
"definitions": { "definitions": {
"ByteArray": { "ByteArray": {
"dataType": "bytes" "dataType": "bytes"
@ -835,8 +835,8 @@ mod tests {
"$ref": "#/definitions/Int" "$ref": "#/definitions/Int"
} }
}, },
"compiledCode": "58e1010000323232323232323232222323253330084a22930b1bad0033253330073370e900000089919299980698078010a4c2a660149201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300d001300a37540082a660109212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300837540066600200290001111199980299b8700100300a2333300500533700008900118060008010012b9a5738aae7555cf2ab9f5742ae89", "compiledCode": "58bb01000032323232323232222323253330064a22930b1bad0033253330053370e900000089919299980598068010a4c2a660109201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300b001300837540082a6600c9212b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630063754006ae695ce2ab9d5573caae7d5d0aba201",
"hash": "4adc0e010fd62343583ca163c1b82e2085fcb221fafd68955685bb2e", "hash": "05403d61b79f0933dc3608c4ed3385f44c37cd2088b513265a2ce306",
"definitions": { "definitions": {
"Data": { "Data": {
"title": "Data", "title": "Data",
@ -890,8 +890,8 @@ mod tests {
"$ref": "#/definitions/test_module~1Expr" "$ref": "#/definitions/test_module~1Expr"
} }
}, },
"compiledCode": "5901c701000032323232323232323232223253330074a22930b19918008009119299980499b87480000044c8c94ccc03cc044008526153300c4901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a601e00260100042a66601266e1d20020011323232325333011301300213232498cc020020008cc01c01c00c54cc0392401334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001630110013011002300f0013008002153330093370e9002000899191919299980898098010991924c660100100046600e00e0062a6601c9201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001630110013011002300f0013008002153300a4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300a37540020046600200290001111199980319b8700100300b233330050053370000890011806800801001118029baa0015734ae7155ceaab9e5573eae855d101", "compiledCode": "5901a00100003232323232323232223253330054a22930b19918008009119299980399b87480000044c8c94ccc034c03c008526153300a4901334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016375a601a002600c0042a66600e66e1d2002001132323232533300f301100213232498cc020020008cc01c01c00c54cc0312401334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300f001300f002300d0013006002153330073370e9002000899191919299980798088010991924c660100100046600e00e0062a660189201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016300f001300f002300d001300600215330084912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300837540020044600a6ea80055cd2b9c5573aaae7955cfaba157441",
"hash": "e3d30c1599b2c29686f1053f6596f85116ee65556d1c2bcd4e354fcc", "hash": "1a61e3a68ae6223fc9a78ce530942f29bfe6421a160edaa59ded5589",
"definitions": { "definitions": {
"Int": { "Int": {
"dataType": "integer" "dataType": "integer"
@ -981,8 +981,8 @@ mod tests {
"$ref": "#/definitions/test_module~1LinkedList$Int" "$ref": "#/definitions/test_module~1LinkedList$Int"
} }
}, },
"compiledCode": "590358010000323232323232323232323222232323232533300c4a22930b180100299919119299980719b87480000044c8c94ccc050c0580084c92630050011533011491334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163014001300c0021533300e3370e9001000899191919299980b180c00109924c6464646600200200444a66603400229309919801801980e801191807000980d8009bac3016002375c60280022a660269201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163232337606030004603000260300026eb0c058004c058008dd6980a00098060010a99807a4812b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300c00130010012232533300d3370e9000000899191919299980a980b80109924c6600e00e0022a660249201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016301500130150023370e900118081baa3013001300b0021533300d3370e90010008a99980898058010a4c2a6601c9211d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300e4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300b00100530010012232533300b3370e90000008991919192999809980a80109924c6600e00e0022a66020921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001630130013013002375a602200260120042a66601666e1d20020011533300f3009002149854cc03124011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300c4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300900133001001480008888cccc01ccdc38008018061199980280299b8000448008c0380040080088c018dd5000918021baa0015734ae7155ceaab9e5573eae855d11", "compiledCode": "59033101000032323232323232323222232323232533300a4a22930b180100299919119299980619b87480000044c8c94ccc048c0500084c9263005001153300f491334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e20657870656374656400163012001300a0021533300c3370e9001000899191919299980a180b00109924c6464646600200200444a66603000229309919801801980d801191807000980c8009bac3014002375c60240022a660229201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016323233760602c004602c002602c0026eb0c050004c050008dd6980900098050010a99806a4812b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e740016300a00130010012232533300b3370e90000008991919192999809980a80109924c6600e00e0022a660209201334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e2065787065637465640016301300130130023370e900118071baa301100130090021533300b3370e90010008a99980798048010a4c2a660189211d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300c4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e74001630090010053001001223253330093370e90000008991919192999808980980109924c6600e00e0022a6601c921334c6973742f5475706c652f436f6e73747220636f6e7461696e73206d6f7265206974656d73207468616e206578706563746564001630110013011002375a601e002600e0042a66601266e1d20020011533300d3007002149854cc02924011d4578706563746564206e6f206669656c647320666f7220436f6e7374720016153300a4912b436f6e73747220696e64657820646964206e6f74206d6174636820616e7920747970652076617269616e7400163007001230063754002460086ea80055cd2b9c5573aaae7955cfaba15745",
"hash": "2250642962915ebe2fc08ad9cd0377f2a4b8c281d94f8bae6782fd63", "hash": "1c89cc785bcdfb17a78bc9eb211ed79959c7488396525d7a485936ee",
"definitions": { "definitions": {
"Bool": { "Bool": {
"title": "Bool", "title": "Bool",

View File

@ -3,7 +3,7 @@ use pretty_assertions::assert_eq;
use aiken_lang::ast::{Definition, Function, TypedFunction, TypedValidator}; use aiken_lang::ast::{Definition, Function, TypedFunction, TypedValidator};
use uplc::{ use uplc::{
ast::{Constant, Data, DeBruijn, Name, Program, Term, Type}, ast::{Constant, Data, DeBruijn, Name, Program, Term, Type},
builder::{CONSTR_FIELDS_EXPOSER, CONSTR_GET_FIELD, CONSTR_INDEX_EXPOSER}, builder::{CONSTR_FIELDS_EXPOSER, CONSTR_INDEX_EXPOSER},
machine::cost_model::ExBudget, machine::cost_model::ExBudget,
optimize, optimize,
}; };
@ -1037,8 +1037,7 @@ fn acceptance_test_10_map_none() {
) )
.apply(Term::Constant( .apply(Term::Constant(
Constant::Data(Data::constr(1, vec![])).into(), Constant::Data(Data::constr(1, vec![])).into(),
)) )),
.constr_get_field(),
false, false,
); );
} }
@ -1120,8 +1119,7 @@ fn acceptance_test_10_map_some() {
) )
.apply(Term::Constant( .apply(Term::Constant(
Constant::Data(Data::constr(0, vec![Data::integer(2.into())])).into(), Constant::Data(Data::constr(0, vec![Data::integer(2.into())])).into(),
)) )),
.constr_get_field(),
false, false,
); );
} }
@ -1621,38 +1619,6 @@ fn acceptance_test_18_or_else() {
Term::snd_pair() Term::snd_pair()
.apply(Term::unconstr_data().apply(Term::var("x"))) .apply(Term::unconstr_data().apply(Term::var("x")))
.lambda("x"), .lambda("x"),
)
.lambda(CONSTR_GET_FIELD)
.apply(
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(Term::integer(0.into())),
)
.lambda(CONSTR_GET_FIELD)
.apply(
Term::equals_integer()
.apply(Term::var("__wanted_arg".to_string()))
.apply(Term::var("__current_arg_number".to_string()))
.if_else(
Term::head_list(),
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(
Term::add_integer()
.apply(Term::var("__current_arg_number"))
.apply(Term::integer(1.into())),
)
.apply(
Term::tail_list().apply(Term::var("__current_list_of_constr_args")),
)
.apply(Term::var("__wanted_arg"))
.lambda("__current_list_of_constr_args"),
)
.apply(Term::var("__list_of_constr_args"))
.lambda("__wanted_arg")
.lambda("__list_of_constr_args")
.lambda("__current_arg_number")
.lambda(CONSTR_GET_FIELD),
), ),
false, false,
); );
@ -1723,38 +1689,6 @@ fn acceptance_test_19_map_none_wrap_int() {
Term::snd_pair() Term::snd_pair()
.apply(Term::unconstr_data().apply(Term::var("x"))) .apply(Term::unconstr_data().apply(Term::var("x")))
.lambda("x"), .lambda("x"),
)
.lambda(CONSTR_GET_FIELD)
.apply(
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(Term::integer(0.into())),
)
.lambda(CONSTR_GET_FIELD)
.apply(
Term::equals_integer()
.apply(Term::var("__wanted_arg".to_string()))
.apply(Term::var("__current_arg_number".to_string()))
.if_else(
Term::head_list(),
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(
Term::add_integer()
.apply(Term::var("__current_arg_number"))
.apply(Term::integer(1.into())),
)
.apply(
Term::tail_list().apply(Term::var("__current_list_of_constr_args")),
)
.apply(Term::var("__wanted_arg"))
.lambda("__current_list_of_constr_args"),
)
.apply(Term::var("__list_of_constr_args"))
.lambda("__wanted_arg")
.lambda("__list_of_constr_args")
.lambda("__current_arg_number")
.lambda(CONSTR_GET_FIELD),
), ),
false, false,
); );
@ -1826,38 +1760,6 @@ fn acceptance_test_19_map_wrap_void() {
Term::snd_pair() Term::snd_pair()
.apply(Term::unconstr_data().apply(Term::var("x"))) .apply(Term::unconstr_data().apply(Term::var("x")))
.lambda("x"), .lambda("x"),
)
.lambda(CONSTR_GET_FIELD)
.apply(
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(Term::integer(0.into())),
)
.lambda(CONSTR_GET_FIELD)
.apply(
Term::equals_integer()
.apply(Term::var("__wanted_arg".to_string()))
.apply(Term::var("__current_arg_number".to_string()))
.if_else(
Term::head_list(),
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(
Term::add_integer()
.apply(Term::var("__current_arg_number"))
.apply(Term::integer(1.into())),
)
.apply(
Term::tail_list().apply(Term::var("__current_list_of_constr_args")),
)
.apply(Term::var("__wanted_arg"))
.lambda("__current_list_of_constr_args"),
)
.apply(Term::var("__list_of_constr_args"))
.lambda("__wanted_arg")
.lambda("__list_of_constr_args")
.lambda("__current_arg_number")
.lambda(CONSTR_GET_FIELD),
), ),
false, false,
); );
@ -1934,8 +1836,7 @@ fn acceptance_test_20_map_some() {
.apply(Term::Constant( .apply(Term::Constant(
Constant::Data(Data::constr(0, vec![Data::integer(15.into())])).into(), Constant::Data(Data::constr(0, vec![Data::integer(15.into())])).into(),
)) ))
.constr_fields_exposer() .constr_fields_exposer(),
.constr_get_field(),
false, false,
); );
} }
@ -2054,7 +1955,6 @@ fn acceptance_test_22_filter_map() {
), ),
) )
.apply(Term::list_data().apply(Term::empty_list())) .apply(Term::list_data().apply(Term::empty_list()))
.constr_get_field()
.constr_fields_exposer() .constr_fields_exposer()
.constr_index_exposer(), .constr_index_exposer(),
false, false,
@ -2280,7 +2180,6 @@ fn acceptance_test_24_map2() {
)) ))
.into(), .into(),
)) ))
.constr_get_field()
.constr_fields_exposer() .constr_fields_exposer()
.constr_index_exposer(), .constr_index_exposer(),
false, false,
@ -2887,11 +2786,12 @@ fn when_tuple_deconstruction() {
Term::equals_integer() Term::equals_integer()
.apply( .apply(
Term::un_i_data().apply( Term::un_i_data().apply(
Term::var(CONSTR_GET_FIELD) Term::head_list()
.apply(Term::var("__fields"))
.lambda("__fields")
.apply( .apply(
Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("a")), Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("a")),
) ),
.apply(Term::integer(0.into())),
), ),
) )
.apply(Term::var("x")) .apply(Term::var("x"))
@ -3065,38 +2965,6 @@ fn when_tuple_deconstruction() {
.lambda("ctx") .lambda("ctx")
.lambda("red") .lambda("red")
.lambda("dat") .lambda("dat")
.lambda(CONSTR_GET_FIELD)
.apply(
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(Term::integer(0.into())),
)
.lambda(CONSTR_GET_FIELD)
.apply(
Term::equals_integer()
.apply(Term::var("__wanted_arg".to_string()))
.apply(Term::var("__current_arg_number".to_string()))
.if_else(
Term::head_list(),
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(
Term::add_integer()
.apply(Term::var("__current_arg_number"))
.apply(Term::integer(1.into())),
)
.apply(
Term::tail_list().apply(Term::var("__current_list_of_constr_args")),
)
.apply(Term::var("__wanted_arg"))
.lambda("__current_list_of_constr_args"),
)
.apply(Term::var("__list_of_constr_args"))
.lambda("__wanted_arg")
.lambda("__list_of_constr_args")
.lambda("__current_arg_number")
.lambda(CONSTR_GET_FIELD),
)
.lambda(CONSTR_FIELDS_EXPOSER) .lambda(CONSTR_FIELDS_EXPOSER)
.apply( .apply(
Term::snd_pair() Term::snd_pair()
@ -3359,38 +3227,6 @@ fn generic_validator_type_test() {
) )
.lambda("_ctx") .lambda("_ctx")
.lambda("r") .lambda("r")
.lambda(CONSTR_GET_FIELD)
.apply(
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(Term::integer(0.into())),
)
.lambda(CONSTR_GET_FIELD)
.apply(
Term::equals_integer()
.apply(Term::var("__wanted_arg".to_string()))
.apply(Term::var("__current_arg_number".to_string()))
.if_else(
Term::head_list(),
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(
Term::add_integer()
.apply(Term::var("__current_arg_number"))
.apply(Term::integer(1.into())),
)
.apply(
Term::tail_list().apply(Term::var("__current_list_of_constr_args")),
)
.apply(Term::var("__wanted_arg"))
.lambda("__current_list_of_constr_args"),
)
.apply(Term::var("__list_of_constr_args"))
.lambda("__wanted_arg")
.lambda("__list_of_constr_args")
.lambda("__current_arg_number")
.lambda(CONSTR_GET_FIELD),
)
.lambda(CONSTR_FIELDS_EXPOSER) .lambda(CONSTR_FIELDS_EXPOSER)
.apply( .apply(
Term::snd_pair() Term::snd_pair()
@ -3526,12 +3362,18 @@ fn record_update_output_2_vals() {
.apply( .apply(
Term::mk_cons() Term::mk_cons()
.apply( .apply(
Term::var(CONSTR_GET_FIELD) Term::head_list()
.apply(
Term::tail_list().apply(
Term::tail_list()
.apply(Term::var("__fields")),
),
)
.lambda("__fields")
.apply( .apply(
Term::var(CONSTR_FIELDS_EXPOSER) Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("prev_output")), .apply(Term::var("prev_output")),
) ),
.apply(Term::integer(2.into())),
) )
.apply(Term::var("tail_index_3")), .apply(Term::var("tail_index_3")),
), ),
@ -3560,7 +3402,6 @@ fn record_update_output_2_vals() {
Data::constr(1, vec![]), Data::constr(1, vec![]),
], ],
))) )))
.constr_get_field()
.constr_fields_exposer() .constr_fields_exposer()
.constr_index_exposer(), .constr_index_exposer(),
false, false,
@ -3624,12 +3465,18 @@ fn record_update_output_1_val() {
.apply( .apply(
Term::mk_cons() Term::mk_cons()
.apply( .apply(
Term::var(CONSTR_GET_FIELD) Term::head_list()
.apply(
Term::tail_list().apply(
Term::tail_list()
.apply(Term::var("__fields")),
),
)
.lambda("__fields")
.apply( .apply(
Term::var(CONSTR_FIELDS_EXPOSER) Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("prev_output")), .apply(Term::var("prev_output")),
) ),
.apply(Term::integer(2.into())),
) )
.apply(Term::var("tail_index_3")), .apply(Term::var("tail_index_3")),
), ),
@ -3657,7 +3504,6 @@ fn record_update_output_1_val() {
Data::constr(1, vec![]), Data::constr(1, vec![]),
], ],
))) )))
.constr_get_field()
.constr_fields_exposer() .constr_fields_exposer()
.constr_index_exposer(), .constr_index_exposer(),
false, false,
@ -3756,7 +3602,6 @@ fn record_update_output_first_last_val() {
Data::constr(1, vec![]), Data::constr(1, vec![]),
], ],
))) )))
.constr_get_field()
.constr_fields_exposer() .constr_fields_exposer()
.constr_index_exposer(), .constr_index_exposer(),
false, false,
@ -3823,7 +3668,6 @@ fn list_fields_unwrap() {
Term::bool(true), Term::bool(true),
Term::bool(true).if_else(Term::bool(false), Term::bool(true)), Term::bool(true).if_else(Term::bool(false), Term::bool(true)),
) )
.constr_get_field()
.constr_fields_exposer() .constr_fields_exposer()
.constr_index_exposer(), .constr_index_exposer(),
false, false,
@ -3930,12 +3774,13 @@ fn foldl_type_mismatch() {
.delayed_if_else( .delayed_if_else(
Term::equals_data() Term::equals_data()
.apply( .apply(
Term::var(CONSTR_GET_FIELD) Term::head_list()
.apply(Term::var("__fields"))
.lambda("__fields")
.apply( .apply(
Term::var(CONSTR_FIELDS_EXPOSER) Term::var(CONSTR_FIELDS_EXPOSER)
.apply(Term::var("o")), .apply(Term::var("o")),
) ),
.apply(Term::integer(0.into())),
) )
.apply(Term::var("addr1")) .apply(Term::var("addr1"))
.delayed_if_else( .delayed_if_else(
@ -3997,7 +3842,6 @@ fn foldl_type_mismatch() {
Data::constr(1, vec![]), Data::constr(1, vec![]),
], ],
))) )))
.constr_get_field()
.constr_fields_exposer() .constr_fields_exposer()
.constr_index_exposer(), .constr_index_exposer(),
false, false,
@ -5066,7 +4910,6 @@ fn list_clause_with_assign2() {
vec![Data::integer(1.into())], vec![Data::integer(1.into())],
)]))) )])))
.constr_fields_exposer() .constr_fields_exposer()
.constr_get_field()
.constr_index_exposer(), .constr_index_exposer(),
false, false,
); );
@ -5131,9 +4974,10 @@ fn opaque_value_in_datum() {
.lambda("val") .lambda("val")
.apply( .apply(
Term::unmap_data().apply( Term::unmap_data().apply(
Term::var(CONSTR_GET_FIELD) Term::head_list()
.apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat"))) .apply(Term::tail_list().apply(Term::var("__fields")))
.apply(Term::integer(1.into())), .lambda("__fields")
.apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat"))),
), ),
) )
.delayed_if_else(Term::unit(), Term::Error) .delayed_if_else(Term::unit(), Term::Error)
@ -5227,7 +5071,6 @@ fn opaque_value_in_datum() {
.lambda("ctx") .lambda("ctx")
.lambda("red") .lambda("red")
.lambda("dat") .lambda("dat")
.constr_get_field()
.constr_fields_exposer() .constr_fields_exposer()
.constr_index_exposer(), .constr_index_exposer(),
false, false,
@ -5300,9 +5143,10 @@ fn opaque_value_in_test() {
.lambda("val") .lambda("val")
.apply( .apply(
Term::unmap_data().apply( Term::unmap_data().apply(
Term::var(CONSTR_GET_FIELD) Term::head_list()
.apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat"))) .apply(Term::tail_list().apply(Term::var("__fields")))
.apply(Term::integer(1.into())), .lambda("__fields")
.apply(Term::var(CONSTR_FIELDS_EXPOSER).apply(Term::var("dat"))),
), ),
) )
.lambda("dat") .lambda("dat")
@ -5330,7 +5174,6 @@ fn opaque_value_in_test() {
)])) )]))
.into(), .into(),
)])) )]))
.constr_get_field()
.constr_fields_exposer() .constr_fields_exposer()
.constr_index_exposer(), .constr_index_exposer(),
false, false,
@ -5361,7 +5204,6 @@ fn expect_none() {
.apply(Term::Constant( .apply(Term::Constant(
Constant::Data(Data::constr(1, vec![])).into(), Constant::Data(Data::constr(1, vec![])).into(),
)) ))
.constr_get_field()
.constr_index_exposer() .constr_index_exposer()
.constr_fields_exposer(), .constr_fields_exposer(),
false, false,
@ -5584,7 +5426,6 @@ fn tuple_2_match() {
Term::bool(true), Term::bool(true),
Term::bool(true).if_else(Term::bool(false), Term::bool(true)), Term::bool(true).if_else(Term::bool(false), Term::bool(true)),
) )
.constr_get_field()
.constr_fields_exposer() .constr_fields_exposer()
.constr_index_exposer(), .constr_index_exposer(),
false, false,

View File

@ -6,7 +6,6 @@ use pallas_primitives::alonzo::PlutusData;
pub const CONSTR_FIELDS_EXPOSER: &str = "__constr_fields_exposer"; pub const CONSTR_FIELDS_EXPOSER: &str = "__constr_fields_exposer";
pub const CONSTR_INDEX_EXPOSER: &str = "__constr_index_exposer"; pub const CONSTR_INDEX_EXPOSER: &str = "__constr_index_exposer";
pub const CONSTR_GET_FIELD: &str = "__constr_get_field";
pub const EXPECT_ON_LIST: &str = "__expect_on_list"; pub const EXPECT_ON_LIST: &str = "__expect_on_list";
impl<T> Term<T> { impl<T> Term<T> {
@ -343,39 +342,4 @@ impl Term<Name> {
.lambda("__constr_var"), .lambda("__constr_var"),
) )
} }
pub fn constr_get_field(self) -> Self {
self.lambda(CONSTR_GET_FIELD)
.apply(
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(Term::integer(0.into())),
)
.lambda(CONSTR_GET_FIELD)
.apply(
Term::equals_integer()
.apply(Term::var("__wanted_arg"))
.apply(Term::var("__current_arg_number"))
.if_else(
Term::head_list(),
Term::var(CONSTR_GET_FIELD)
.apply(Term::var(CONSTR_GET_FIELD))
.apply(
Term::add_integer()
.apply(Term::var("__current_arg_number"))
.apply(Term::integer(1.into())),
)
.apply(
Term::tail_list().apply(Term::var("__current_list_of_constr_args")),
)
.apply(Term::var("__wanted_arg"))
.lambda("__current_list_of_constr_args"),
)
.apply(Term::var("__list_of_constr_args"))
.lambda("__wanted_arg")
.lambda("__list_of_constr_args")
.lambda("__current_arg_number")
.lambda(CONSTR_GET_FIELD),
)
}
} }

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677318, nanos_since_epoch = 215908000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840496, nanos_since_epoch = 265204000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -21,8 +21,8 @@
} }
} }
], ],
"compiledCode": "58bd010000323232323232323232322225333007323253330093370e9000000899251300800214a060126ea8004cc88c8cc00400400c894ccc038004530103d87a800013232533300d300500213374a90001980880125eb804cc010010004c048008c040004dd6198021803198021803000a40009000119baf330053007001480000105261633001001480008888cccc018cdc38008018059199980280299b8000448008c0340040080088c010dd5000ab9a5573aaae7955cfaba05742ae89", "compiledCode": "589301000032323232323232322225333005323253330073370e9000000899251300600214a0600e6ea8004c8cc88c8cc00400400c894ccc034004530103d87a800013232533300c300500213374a90001980800125eb804cc010010004c044008c03c004dd61800980298009802801119baf300230060010052300b0011498588c010dd5000ab9a5573aaae7955cfaba05742ae89",
"hash": "6fb52a7202693c79ade162f62fdceb489aea252470415159a72393ca" "hash": "c61366901c3ce71f6b34beda5ce1a90f6f7a73e83362821a142cc406"
}, },
{ {
"title": "spend.spend", "title": "spend.spend",
@ -38,8 +38,8 @@
"$ref": "#/definitions/Data" "$ref": "#/definitions/Data"
} }
}, },
"compiledCode": "59010f01000032323232323232323232222533300732323300100100222533300d00114a026464a66601864646466601e00294128a9998088008a5114a06464a66601e66e1d200200114bd6f7b6300991bab3015001300e002300f3754002646600200200444a666024002298103d87a800013232323253330133371e9110500000000000000213374a90001980b9ba60014bd700998030030019bab3014003375c6024004602c00460280026eaccc024c02c009200214a22660080080026022004601e0026eb0cc010c018cc010c0180052000480105261633001001480008888cccc018cdc38008018059199980280299b8000448008c0340040080088c010dd5000ab9a5573aaae7955cfaba05742ae89", "compiledCode": "58ee0100003232323232323232222533300532323300100100222533300b00114a026464a66601464646466601a00294128a9998078008a5114a06464a66601a66e1d200200114bd6f7b6300991bab3013001300c002300d3754002646600200200444a666020002298103d87a800013232323253330113371e9110500000000000000213374a90001980a9ba60014bd700998030030019bab3012003375c6020004602800460240026eacc8c040c044004c024008528899802002000980780118068009bac32300b300c300c001300432300b00130040011498588c010dd5000ab9a5573aaae7955cfaba05742ae881",
"hash": "9664feff1ec29e5337417b0f81643a666e02387f4ef4df628d2319da" "hash": "c0b973c5ab4aca21277e722b046317e59fd1876451cb06f3cf936675"
} }
], ],
"definitions": { "definitions": {

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677315, nanos_since_epoch = 284801000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840494, nanos_since_epoch = 72017000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677319, nanos_since_epoch = 110150000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840497, nanos_since_epoch = 295242000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677332, nanos_since_epoch = 434414000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840508, nanos_since_epoch = 349782000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677319, nanos_since_epoch = 71300000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840497, nanos_since_epoch = 309291000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677334, nanos_since_epoch = 523082000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840511, nanos_since_epoch = 307949000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677333, nanos_since_epoch = 543959000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840510, nanos_since_epoch = 456603000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677312, nanos_since_epoch = 307959000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840490, nanos_since_epoch = 68183000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -19,8 +19,8 @@
"$ref": "#/definitions/spend~1PoolRedeemer" "$ref": "#/definitions/spend~1PoolRedeemer"
} }
}, },
"compiledCode": "5903560100003232323232323232323232222323232533300b3232533300d3370e9000000899251300b00213232323253330113370e9001002899191919299980a99b87480080044c8c8c8c94ccc064cdc3a400060300022646464a66603866e1d2000301b001132324a2604400260340022c66016028008603e002602e0022c66012022002601491101ff00301b001301300214a060260026601e60220189001180b8009807803099191919299980a99b87480080044c8c8c8c94ccc064cdc3a400060300022646464a66603866e1d2000301b001132324a2604400260340022c66016028008603e002602e0022c660120220026014910101ff00301b001301300214a060260026601e60220189001180b800980780311198021bac3300e30103300e301000248001200023375e6601e60226601e602200290012400000444660066eb0cc034c03ccc034c03c0092000480108cdd7998071808000a400000444646600200200644a66602a002298103d87a8000132325333014300500213374a90001980c00125eb804cc010010004c064008c05c0048cdd2a40006602466e95200233012375200297ae0330124c103d87a80004bd701805800998039804802a40002930b19299980599b87480000044c8c94ccc040c04c0084c92632533300e3370e9000000899192999809980b0010a4c2c6eb4c050004c03000854ccc038cdc3a400400226464a666026602c0042649319299980899b87480000044c8c8c8c94ccc060c06c0084c926300d00316375a60320026032004602e002601e0042c601e0022c602800260180042a66601c66e1d20040011323253330133016002132498c94ccc044cdc3a4000002264646464a66603060360042649318068018b1bad301900130190023017001300f00216300f001163014001300c00216300c001163011001300900516300900432533300a3370e900000089919191919192999809980b00109924c601000a2c6eb4c050004c050008dd698090009809001180800098040028b1804002119299980519b87480000044c8c8c8c94ccc044c05000852616375c602400260240046eb8c040004c02000858c020004cc0040052000222233330073370e0020060184666600a00a66e000112002300e001002002230053754002460066ea80055cd2ab9d5573caae7d5d02ba157441", "compiledCode": "5903260100003232323232323232322223232325333009323232533300c3370e9000000899251300a0021323232323253330113370e9001003099191919299980a99b87480080044c8c8c8c94ccc064cdc3a400060300022646464a66603866e1d2000301b001132324a2604400260340022c6601602c008603e002602e0022c66014026002601691101ff00301b001301300214a060260026008602201c602e002601e00e264646464a66602a66e1d200200113232323253330193370e9000180c0008991919299980e19b8748000c06c0044c8c9289811000980d0008b1980580b002180f800980b8008b198050098009805a44101ff00301b001301300214a060260026008602201c602e002601e00e446600a6eb0c024c040c024c0400088cdd798051808980218088008011180a980b00091198019bac32301630173017001300e3007300e00223375e6010601e00200444646600200200644a6660280022980103d87a8000132325333013300500213374a90001980b80125eb804cc010010004c060008c0580048cdd2a40006602266e95200233011375200297ae0330114c103d87a80004bd70180500098009804003118078008a4c2c64a66601266e1d200000113232533300e3011002132498c94ccc030cdc3a400000226464a66602260280042930b1bad3012001300a0021533300c3370e9001000899192999808980a00109924c64a66601e66e1d200000113232323253330163019002132498c03400c58dd6980b800980b801180a80098068010b18068008b180900098050010a99980619b87480100044c8c94ccc044c0500084c92632533300f3370e9000000899191919299980b180c80109924c601a0062c6eb4c05c004c05c008c054004c03400858c03400458c048004c02800858c02800458c03c004c01c01458c01c010c94ccc020cdc3a40000022646464646464a66602260280042649318040028b1bad30120013012002375a60200026020004601c002600c00a2c600c008464a66601066e1d2000001132323232533300f3012002149858dd7180800098080011bae300e0013006002163006001230053754002460066ea80055cd2ab9d5573caae7d5d02ba15745",
"hash": "643ecd1a1abdd7fddc4e2f556a70212ecd053a24d474ea6de173b65c" "hash": "2e10899564da25a5df93da626395b94ce71baa9ca3d6419d23838462"
} }
], ],
"definitions": { "definitions": {

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677326, nanos_since_epoch = 227348000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840504, nanos_since_epoch = 161718000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677324, nanos_since_epoch = 471629000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840501, nanos_since_epoch = 554952000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677311, nanos_since_epoch = 397711000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840489, nanos_since_epoch = 773267000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -27,8 +27,8 @@
} }
} }
], ],
"compiledCode": "5901f4010000323232323232323232323223222232533300b32323232533300f3370e9000180700089919191919191919191919299980e98100010991919299980e99b874800000454ccc074c8cc004004030894ccc08800452809919299981099baf3301d301f00248000068528899802002000981300118120008a99980e99b87002480084cdc780180b8a501616301b014375a603a0046eb8c06c00458c078004c8c8c94ccc06ccdc3a4004002297adef6c601323756604200260320046032002646600200200444a66603c0022980103d87a8000132323232533301f3371e01e004266e95200033023374c00297ae0133006006003375660400066eb8c078008c088008c080004c8cc004004008894ccc07400452f5bded8c0264646464a66603c66e3d221000021003133022337606ea4008dd3000998030030019bab301f003375c603a0046042004603e0026eacc070004c070004c06c004c068004c064008dd6180b80098078029bae3015001300d001163013001301300230110013009002149858c94ccc02ccdc3a40000022a66601c60120062930b0a99980599b874800800454ccc038c02400c52616163009002375c0026600200290001111199980399b8700100300c233330050053370000890011807000801001118029baa001230033754002ae6955ceaab9e5573eae815d0aba201", "compiledCode": "5901cc01000032323232323232323223222232533300932323232533300d3370e9000180600089919191919191919191919299980d980f0010991919299980d99b874800000454ccc06cc8cc004004030894ccc08000452809919299980f99baf323025001301d00201a14a2266008008002604800460440022a66603666e1c009200213371e00602e29405858c064050dd6980d8011bae301900116301c00132323253330193370e90010008a5eb7bdb1804c8dd5980f800980b801180b800991980080080111299980e0008a6103d87a8000132323232533301d3371e01e004266e95200033021374c00297ae01330060060033756603c0066eb8c070008c080008c078004c8cc004004008894ccc06c00452f5bded8c0264646464a66603866e3d221000021003133020337606ea4008dd3000998030030019bab301d003375c6036004603e004603a0026eacc068004c068004c064004c060004c05c008dd6180a80098068029bae3013001300b0011630110013011002300f0013007002149858c94ccc024cdc3a40000022a666018600e0062930b0a99980499b874800800454ccc030c01c00c52616163007002375c0024600a6ea80048c00cdd5000ab9a5573aaae7955cfaba05742ae881",
"hash": "d9923c678f323fa0aa77a78dedc323df6686c54ba9ceb8a1baef639f" "hash": "34024ee2cd32404d6ae0357a7065662b2fef2b4ac5a3b4978c659886"
} }
], ],
"definitions": { "definitions": {

View File

@ -19,8 +19,8 @@
"$ref": "#/definitions/RedeemerWrapper$Int" "$ref": "#/definitions/RedeemerWrapper$Int"
} }
}, },
"compiledCode": "587c010000323232323232322253330053370e900018031baa00113253330063370e002902a0a4c2c6eb40084c88c8c94ccc024cdc399b800020014815052616375a0066eb4010c020c01cdd500099800800a40004444666600a66e1c00400c0208cccc014014cdc0002240046014002004004ae6955ceaab9e5742ae881", "compiledCode": "5852010000323232322253330033370e900018021baa00113253330043370e002902a0a4c2c6eb40084c88c8c94ccc01ccdc399b800020014815052616375a0066eb4010c018c014dd5000ab9a5573aaae795d09",
"hash": "0c6e650e5630aedbe4ff5a2a9a441611e2766e28d5ca09e10b90ed64" "hash": "62ff3d6f616ed3df935a8bc94c071204a1558a66b1c3f1ff78d58743"
}, },
{ {
"title": "foo.mint", "title": "foo.mint",
@ -30,8 +30,8 @@
"$ref": "#/definitions/Int" "$ref": "#/definitions/Int"
} }
}, },
"compiledCode": "587c010000323232323232322253330053370e900018031baa00113253330063370e002902a0a4c2c6eb40084c88c8c94ccc024cdc399b800020014815052616375a0066eb4010c020c01cdd500099800800a40004444666600a66e1c00400c0208cccc014014cdc0002240046014002004004ae6955ceaab9e5742ae881", "compiledCode": "5852010000323232322253330033370e900018021baa00113253330043370e002902a0a4c2c6eb40084c88c8c94ccc01ccdc399b800020014815052616375a0066eb4010c018c014dd5000ab9a5573aaae795d09",
"hash": "0c6e650e5630aedbe4ff5a2a9a441611e2766e28d5ca09e10b90ed64" "hash": "62ff3d6f616ed3df935a8bc94c071204a1558a66b1c3f1ff78d58743"
} }
], ],
"definitions": { "definitions": {

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677312, nanos_since_epoch = 988170000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840491, nanos_since_epoch = 352045000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677311, nanos_since_epoch = 397762000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840489, nanos_since_epoch = 773332000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677311, nanos_since_epoch = 398456000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840489, nanos_since_epoch = 773293000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677312, nanos_since_epoch = 281240000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840490, nanos_since_epoch = 57347000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677327, nanos_since_epoch = 522535000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840504, nanos_since_epoch = 258871000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -19,8 +19,8 @@
"$ref": "#/definitions/Data" "$ref": "#/definitions/Data"
} }
}, },
"compiledCode": "5901fd01000032323232323232323232222533300832323232533300c3370e9000000899251300a00214a06014002601c002600e008664464a66601666e1d20000011323253330103012002132498c94ccc038cdc3a400000226464a666026602a0042649319299980899b87480000044c8c94ccc058c0600084c9263253330143370e9000000899191919299980d980e8010991924c64a66603466e1d200000113232533301f3021002132498c94ccc074cdc3a400000226464a666044604800426493180b8008b1811000980d8010a99980e99b87480080044c8c8c8c8c8c94ccc098c0a000852616375a604c002604c0046eb4c090004c090008dd69811000980d8010b180d8008b180f800980c0018a99980d19b874800800454ccc074c06000c52616163018002301000316301b001301b00230190013012002163012001163016001300f00216300f001163013001300c0021533300e3370e90010008a99980898060010a4c2c2c60180022c602000260120042c6012002464a66601466e1d200000113232533300f3011002149858dd7180780098040010a99980519b87480080044c8c94ccc03cc04400852616375c601e00260100042c60100020062930b19800800a40004444666600e66e1c00400c02c8cccc014014cdc000224004601a0020040044600a6ea80048c00cdd5000ab9a5573aaae7955cfaba15745", "compiledCode": "5901d70100003232323232323232222533300632323232533300a3370e9000000899251300800214a060100026018002600a008664464a66601266e1d200000113232533300e3010002132498c94ccc030cdc3a400000226464a66602260260042649319299980799b87480000044c8c94ccc050c0580084c9263253330123370e9000000899191919299980c980d8010991924c64a66603066e1d200000113232533301d301f002132498c94ccc06ccdc3a400000226464a666040604400426493180b8008b1810000980c8010a99980d99b87480080044c8c8c8c8c8c94ccc090c09800852616375a604800260480046eb4c088004c088008dd69810000980c8010b180c8008b180e800980b0018a99980c19b874800800454ccc06cc05800c526161630160023010003163019001301900230170013010002163010001163014001300d00216300d001163011001300a0021533300c3370e90010008a99980798050010a4c2c2c60140022c601c002600e0042c600e002464a66601066e1d200000113232533300d300f002149858dd7180680098030010a99980419b87480080044c8c94ccc034c03c00852616375c601a002600c0042c600c0020062930b118029baa001230033754002ae6955ceaab9e5573eae855d101",
"hash": "6a76fed919611638154fbaf78bd7a37f98b77e42eebc615f2d2d0f32" "hash": "7e7ecf9b781a569346cec35b2eca37fe4557bf490db774201a1fd59e"
} }
], ],
"definitions": { "definitions": {

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677324, nanos_since_epoch = 427027000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840500, nanos_since_epoch = 880736000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677327, nanos_since_epoch = 474167000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840504, nanos_since_epoch = 245807000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]

View File

@ -13,4 +13,4 @@ requirements = []
source = "github" source = "github"
[etags] [etags]
"aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695677322, nanos_since_epoch = 534350000 }, "a5918f742d4589d2f5a91daf232eb03a2a0972a367ec0b016e9e8670e28c1b47"] "aiken-lang/stdlib@main" = [{ secs_since_epoch = 1695840500, nanos_since_epoch = 164711000 }, "b51eee18a909dea9f60ea6311a1667c36b89b1d6a33b19f12cde58311f150ad7"]