Add missing Plutus builtins to Aiken's lang.

This commit is contained in:
KtorZ 2023-02-22 12:53:03 +01:00
parent 0838d48f7c
commit 00e9dabe82
No known key found for this signature in database
GPG Key ID: 33173CB6F77F4277
2 changed files with 60 additions and 16 deletions

View File

@ -579,21 +579,65 @@ pub fn from_default_function(
Some((tipo, 1)) Some((tipo, 1))
} }
DefaultFunction::ChooseData => { DefaultFunction::ChooseData => {
let tipo = function(vec![data(), data(), data(), data(), data(), data()], data()); let a = generic_var(id_gen.next());
let tipo = function(
vec![
data(),
a.clone(),
a.clone(),
a.clone(),
a.clone(),
a.clone(),
],
a,
);
Some((tipo, 6)) Some((tipo, 6))
} }
DefaultFunction::MkPairData => {
// Anything below has a direct syntax equivalent in Aiken, so let tipo = function(vec![data(), data()], tuple(vec![data(), data()]));
// there's no need to support builtin for those. Some((tipo, 2))
DefaultFunction::MkPairData => None, }
DefaultFunction::MkNilData => None, DefaultFunction::MkNilData => {
DefaultFunction::MkNilPairData => None, let tipo = function(vec![], list(data()));
DefaultFunction::ChooseUnit => None, Some((tipo, 0))
DefaultFunction::Trace => None, }
DefaultFunction::FstPair => None, DefaultFunction::MkNilPairData => {
DefaultFunction::SndPair => None, let tipo = function(vec![], list(tuple(vec![data(), data()])));
DefaultFunction::ChooseList => None, Some((tipo, 0))
DefaultFunction::MkCons => None, }
DefaultFunction::ChooseUnit => {
let a = generic_var(id_gen.next());
let tipo = function(vec![data(), a.clone()], a);
Some((tipo, 2))
}
DefaultFunction::Trace => {
let a = generic_var(id_gen.next());
let tipo = function(vec![string(), a.clone()], a);
Some((tipo, 2))
}
DefaultFunction::FstPair => {
let a = generic_var(id_gen.next());
let b = generic_var(id_gen.next());
let tipo = function(vec![tuple(vec![a.clone(), b])], a);
Some((tipo, 1))
}
DefaultFunction::SndPair => {
let a = generic_var(id_gen.next());
let b = generic_var(id_gen.next());
let tipo = function(vec![tuple(vec![a, b.clone()])], b);
Some((tipo, 1))
}
DefaultFunction::ChooseList => {
let a = generic_var(id_gen.next());
let b = generic_var(id_gen.next());
let tipo = function(vec![list(a), b.clone(), b.clone()], b);
Some((tipo, 3))
}
DefaultFunction::MkCons => {
let a = generic_var(id_gen.next());
let tipo = function(vec![a.clone(), list(a.clone())], list(a));
Some((tipo, 2))
}
}; };
info.map(|(tipo, arity)| { info.map(|(tipo, arity)| {

View File

@ -361,12 +361,12 @@ impl DefaultFunction {
EncodeUtf8 => "encode_utf8", EncodeUtf8 => "encode_utf8",
DecodeUtf8 => "decode_utf8", DecodeUtf8 => "decode_utf8",
IfThenElse => "if_then_else", IfThenElse => "if_then_else",
ChooseUnit => "choose_unit", ChooseUnit => "choose_void",
Trace => "trace", Trace => "debug",
FstPair => "fst_pair", FstPair => "fst_pair",
SndPair => "snd_pair", SndPair => "snd_pair",
ChooseList => "choose_list", ChooseList => "choose_list",
MkCons => "mk_cons", MkCons => "cons_list",
HeadList => "head_list", HeadList => "head_list",
TailList => "tail_list", TailList => "tail_list",
NullList => "null_list", NullList => "null_list",