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))
}
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))
}
// Anything below has a direct syntax equivalent in Aiken, so
// there's no need to support builtin for those.
DefaultFunction::MkPairData => None,
DefaultFunction::MkNilData => None,
DefaultFunction::MkNilPairData => None,
DefaultFunction::ChooseUnit => None,
DefaultFunction::Trace => None,
DefaultFunction::FstPair => None,
DefaultFunction::SndPair => None,
DefaultFunction::ChooseList => None,
DefaultFunction::MkCons => None,
DefaultFunction::MkPairData => {
let tipo = function(vec![data(), data()], tuple(vec![data(), data()]));
Some((tipo, 2))
}
DefaultFunction::MkNilData => {
let tipo = function(vec![], list(data()));
Some((tipo, 0))
}
DefaultFunction::MkNilPairData => {
let tipo = function(vec![], list(tuple(vec![data(), data()])));
Some((tipo, 0))
}
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)| {

View File

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