From 00cc9f93d50ac249ac8be745049c19d930346d97 Mon Sep 17 00:00:00 2001 From: Kasey White Date: Fri, 26 Aug 2022 03:51:50 -0400 Subject: [PATCH] start making data with builtins --- add_integers.uplc | 2 +- crates/uplc/src/machine/cost_model.rs | 5 ++++- crates/uplc/src/machine/runtime.rs | 13 +++++++++---- crates/uplc/src/pretty.rs | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/add_integers.uplc b/add_integers.uplc index 7ebfc193..d01743f8 100644 --- a/add_integers.uplc +++ b/add_integers.uplc @@ -1,5 +1,5 @@ (program 1.0.0 - (con (pair bool integer) (True, 1)) + [(builtin iData) (con integer 1)] ) diff --git a/crates/uplc/src/machine/cost_model.rs b/crates/uplc/src/machine/cost_model.rs index 56d28764..fafacadb 100644 --- a/crates/uplc/src/machine/cost_model.rs +++ b/crates/uplc/src/machine/cost_model.rs @@ -823,7 +823,10 @@ impl BuiltinCosts { DefaultFunction::ConstrData => todo!(), DefaultFunction::MapData => todo!(), DefaultFunction::ListData => todo!(), - DefaultFunction::IData => todo!(), + DefaultFunction::IData => ExBudget { + mem: self.i_data.mem.cost(args[0].to_ex_mem()), + cpu: self.i_data.cpu.cost(args[0].to_ex_mem()), + }, DefaultFunction::BData => todo!(), DefaultFunction::UnConstrData => ExBudget { mem: self.un_constr_data.mem.cost(args[0].to_ex_mem()), diff --git a/crates/uplc/src/machine/runtime.rs b/crates/uplc/src/machine/runtime.rs index b79b0b4c..f098e371 100644 --- a/crates/uplc/src/machine/runtime.rs +++ b/crates/uplc/src/machine/runtime.rs @@ -118,7 +118,7 @@ impl DefaultFunction { DefaultFunction::ConstrData => todo!(), DefaultFunction::MapData => todo!(), DefaultFunction::ListData => todo!(), - DefaultFunction::IData => todo!(), + DefaultFunction::IData => 1, DefaultFunction::BData => todo!(), DefaultFunction::UnConstrData => 1, DefaultFunction::UnMapData => 1, @@ -177,7 +177,7 @@ impl DefaultFunction { DefaultFunction::ConstrData => todo!(), DefaultFunction::MapData => todo!(), DefaultFunction::ListData => todo!(), - DefaultFunction::IData => todo!(), + DefaultFunction::IData => 0, DefaultFunction::BData => todo!(), DefaultFunction::UnConstrData => 0, DefaultFunction::UnMapData => 0, @@ -280,7 +280,7 @@ impl DefaultFunction { DefaultFunction::ConstrData => todo!(), DefaultFunction::MapData => todo!(), DefaultFunction::ListData => todo!(), - DefaultFunction::IData => todo!(), + DefaultFunction::IData => arg.expect_type(Type::Integer), DefaultFunction::BData => todo!(), DefaultFunction::UnConstrData => arg.expect_type(Type::Data), DefaultFunction::UnMapData => arg.expect_type(Type::Data), @@ -627,7 +627,12 @@ impl DefaultFunction { DefaultFunction::ConstrData => todo!(), DefaultFunction::MapData => todo!(), DefaultFunction::ListData => todo!(), - DefaultFunction::IData => todo!(), + DefaultFunction::IData => match &args[0] { + Value::Con(Constant::Integer(i)) => Ok(Value::Con(Constant::Data( + PlutusData::BigInt(BigInt::Int((*i as i64).try_into().unwrap())), + ))), + _ => unreachable!(), + }, DefaultFunction::BData => todo!(), DefaultFunction::UnConstrData => match &args[0] { Value::Con(Constant::Data(PlutusData::Constr(c))) => { diff --git a/crates/uplc/src/pretty.rs b/crates/uplc/src/pretty.rs index a374dc42..551f6f18 100644 --- a/crates/uplc/src/pretty.rs +++ b/crates/uplc/src/pretty.rs @@ -202,7 +202,7 @@ impl Constant { .append(RcDoc::text(",")) .append(right.to_doc_list()) .append(RcDoc::text(")")), - Constant::Data(_) => todo!(), + d @ Constant::Data(_) => RcDoc::text("data ").append(d.to_doc_list()), } }