add a few additional data builtins

This commit is contained in:
Kasey White 2022-08-26 03:01:24 -04:00 committed by Kasey White
parent c9c8e6e554
commit c34344ce21
2 changed files with 63 additions and 16 deletions

View File

@ -837,14 +837,35 @@ impl BuiltinCosts {
mem: self.un_list_data.mem.cost(args[0].to_ex_mem()),
cpu: self.un_list_data.cpu.cost(args[0].to_ex_mem()),
},
DefaultFunction::UnIData => todo!(),
DefaultFunction::UnIData => ExBudget {
mem: self.un_i_data.mem.cost(args[0].to_ex_mem()),
cpu: self.un_i_data.cpu.cost(args[0].to_ex_mem()),
},
DefaultFunction::UnBData => ExBudget {
mem: self.un_b_data.mem.cost(args[0].to_ex_mem()),
cpu: self.un_b_data.cpu.cost(args[0].to_ex_mem()),
},
DefaultFunction::EqualsData => todo!(),
DefaultFunction::EqualsData => ExBudget {
mem: self
.equals_data
.mem
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
cpu: self
.equals_data
.cpu
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
},
DefaultFunction::SerialiseData => todo!(),
DefaultFunction::MkPairData => todo!(),
DefaultFunction::MkPairData => ExBudget {
mem: self
.mk_pair_data
.mem
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
cpu: self
.mk_pair_data
.cpu
.cost(args[0].to_ex_mem(), args[1].to_ex_mem()),
},
DefaultFunction::MkNilData => todo!(),
DefaultFunction::MkNilPairData => todo!(),
}

View File

@ -1,6 +1,6 @@
use std::ops::Deref;
use pallas_primitives::babbage::PlutusData;
use pallas_primitives::babbage::{BigInt, PlutusData};
use crate::{
ast::{Constant, Type},
@ -123,11 +123,11 @@ impl DefaultFunction {
DefaultFunction::UnConstrData => 1,
DefaultFunction::UnMapData => 1,
DefaultFunction::UnListData => 1,
DefaultFunction::UnIData => todo!(),
DefaultFunction::UnIData => 1,
DefaultFunction::UnBData => 1,
DefaultFunction::EqualsData => todo!(),
DefaultFunction::EqualsData => 2,
DefaultFunction::SerialiseData => todo!(),
DefaultFunction::MkPairData => todo!(),
DefaultFunction::MkPairData => 2,
DefaultFunction::MkNilData => todo!(),
DefaultFunction::MkNilPairData => todo!(),
}
@ -182,11 +182,11 @@ impl DefaultFunction {
DefaultFunction::UnConstrData => 0,
DefaultFunction::UnMapData => 0,
DefaultFunction::UnListData => 0,
DefaultFunction::UnIData => todo!(),
DefaultFunction::UnIData => 0,
DefaultFunction::UnBData => 0,
DefaultFunction::EqualsData => todo!(),
DefaultFunction::EqualsData => 0,
DefaultFunction::SerialiseData => todo!(),
DefaultFunction::MkPairData => todo!(),
DefaultFunction::MkPairData => 0,
DefaultFunction::MkNilData => todo!(),
DefaultFunction::MkNilPairData => todo!(),
}
@ -285,11 +285,11 @@ impl DefaultFunction {
DefaultFunction::UnConstrData => arg.expect_type(Type::Data),
DefaultFunction::UnMapData => arg.expect_type(Type::Data),
DefaultFunction::UnListData => arg.expect_type(Type::Data),
DefaultFunction::UnIData => todo!(),
DefaultFunction::UnIData => arg.expect_type(Type::Data),
DefaultFunction::UnBData => arg.expect_type(Type::Data),
DefaultFunction::EqualsData => todo!(),
DefaultFunction::EqualsData => arg.expect_type(Type::Data),
DefaultFunction::SerialiseData => todo!(),
DefaultFunction::MkPairData => todo!(),
DefaultFunction::MkPairData => arg.expect_type(Type::Data),
DefaultFunction::MkNilData => todo!(),
DefaultFunction::MkNilPairData => todo!(),
}
@ -680,16 +680,42 @@ impl DefaultFunction {
}
_ => unreachable!(),
},
DefaultFunction::UnIData => todo!(),
DefaultFunction::UnIData => match &args[0] {
Value::Con(Constant::Data(PlutusData::BigInt(b))) => {
if let BigInt::Int(i) = b {
let x: i64 = (*i).try_into().unwrap();
Ok(Value::Con(Constant::Integer(x as isize)))
} else {
unreachable!()
}
}
_ => unreachable!(),
},
DefaultFunction::UnBData => match &args[0] {
Value::Con(Constant::Data(PlutusData::BoundedBytes(b))) => {
Ok(Value::Con(Constant::ByteString(b.to_vec())))
}
_ => unreachable!(),
},
DefaultFunction::EqualsData => todo!(),
DefaultFunction::EqualsData => match (&args[0], &args[1]) {
(Value::Con(Constant::Data(d1)), Value::Con(Constant::Data(d2))) => {
Ok(Value::Con(Constant::Bool(d1.eq(d2))))
}
_ => unreachable!(),
},
DefaultFunction::SerialiseData => todo!(),
DefaultFunction::MkPairData => todo!(),
DefaultFunction::MkPairData => match (&args[0], &args[1]) {
(Value::Con(Constant::Data(d1)), Value::Con(Constant::Data(d2))) => {
Ok(Value::Con(Constant::ProtoPair(
Type::Data,
Type::Data,
Box::new(Constant::Data(d1.clone())),
Box::new(Constant::Data(d2.clone())),
)))
}
_ => unreachable!(),
},
DefaultFunction::MkNilData => todo!(),
DefaultFunction::MkNilPairData => todo!(),
}