Add missing Plutus builtins to Aiken's lang.
This commit is contained in:
parent
0838d48f7c
commit
00e9dabe82
|
@ -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)| {
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Reference in New Issue