add a data builtin and do ex_mem for pairs, list, data

This commit is contained in:
Kasey White
2022-08-26 00:21:18 -04:00
committed by Kasey White
parent 45e22c1ea8
commit 73e367ad53
9 changed files with 133 additions and 37 deletions

View File

@@ -825,7 +825,10 @@ impl BuiltinCosts {
DefaultFunction::ListData => todo!(),
DefaultFunction::IData => todo!(),
DefaultFunction::BData => todo!(),
DefaultFunction::UnConstrData => todo!(),
DefaultFunction::UnConstrData => ExBudget {
mem: self.un_constr_data.mem.cost(args[0].to_ex_mem()),
cpu: self.un_constr_data.cpu.cost(args[0].to_ex_mem()),
},
DefaultFunction::UnMapData => todo!(),
DefaultFunction::UnListData => todo!(),
DefaultFunction::UnIData => todo!(),

View File

@@ -1,3 +1,7 @@
use std::ops::Deref;
use pallas_primitives::babbage::PlutusData;
use crate::{
ast::{Constant, Type},
builtins::DefaultFunction,
@@ -116,7 +120,7 @@ impl DefaultFunction {
DefaultFunction::ListData => todo!(),
DefaultFunction::IData => todo!(),
DefaultFunction::BData => todo!(),
DefaultFunction::UnConstrData => todo!(),
DefaultFunction::UnConstrData => 1,
DefaultFunction::UnMapData => todo!(),
DefaultFunction::UnListData => todo!(),
DefaultFunction::UnIData => todo!(),
@@ -175,7 +179,7 @@ impl DefaultFunction {
DefaultFunction::ListData => todo!(),
DefaultFunction::IData => todo!(),
DefaultFunction::BData => todo!(),
DefaultFunction::UnConstrData => todo!(),
DefaultFunction::UnConstrData => 0,
DefaultFunction::UnMapData => todo!(),
DefaultFunction::UnListData => todo!(),
DefaultFunction::UnIData => todo!(),
@@ -278,7 +282,7 @@ impl DefaultFunction {
DefaultFunction::ListData => todo!(),
DefaultFunction::IData => todo!(),
DefaultFunction::BData => todo!(),
DefaultFunction::UnConstrData => todo!(),
DefaultFunction::UnConstrData => arg.expect_type(Type::Data),
DefaultFunction::UnMapData => todo!(),
DefaultFunction::UnListData => todo!(),
DefaultFunction::UnIData => todo!(),
@@ -625,7 +629,24 @@ impl DefaultFunction {
DefaultFunction::ListData => todo!(),
DefaultFunction::IData => todo!(),
DefaultFunction::BData => todo!(),
DefaultFunction::UnConstrData => todo!(),
DefaultFunction::UnConstrData => match &args[0] {
Value::Con(Constant::Data(PlutusData::Constr(c))) => {
Ok(Value::Con(Constant::ProtoPair(
Type::Integer,
Type::List(Box::new(Type::Data)),
Box::new(Constant::Integer(c.tag as isize)),
Box::new(Constant::ProtoList(
Type::Data,
c.fields
.deref()
.iter()
.map(|d| Constant::Data(d.clone()))
.collect(),
)),
)))
}
_ => unreachable!(),
},
DefaultFunction::UnMapData => todo!(),
DefaultFunction::UnListData => todo!(),
DefaultFunction::UnIData => todo!(),