add a few additional data builtins
This commit is contained in:
parent
c9c8e6e554
commit
c34344ce21
|
@ -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!(),
|
||||
}
|
||||
|
|
|
@ -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!(),
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue