diff --git a/crates/uplc/src/machine/value.rs b/crates/uplc/src/machine/value.rs index 7afa756e..09dbb566 100644 --- a/crates/uplc/src/machine/value.rs +++ b/crates/uplc/src/machine/value.rs @@ -398,9 +398,7 @@ pub fn from_pallas_bigint(n: &pallas::BigInt) -> BigInt { match n { pallas::BigInt::Int(i) => i128::from(*i).into(), pallas::BigInt::BigUInt(bytes) => BigInt::from_bytes_be(num_bigint::Sign::Plus, bytes), - pallas::BigInt::BigNInt(bytes) => { - BigInt::from_bytes_be(num_bigint::Sign::Minus, bytes) - 1 - }, + pallas::BigInt::BigNInt(bytes) => BigInt::from_bytes_be(num_bigint::Sign::Minus, bytes) - 1, } } diff --git a/crates/uplc/src/parser.rs b/crates/uplc/src/parser.rs index 23a564b6..2effdcf7 100644 --- a/crates/uplc/src/parser.rs +++ b/crates/uplc/src/parser.rs @@ -4,12 +4,11 @@ use crate::{ ast::{Constant, Name, Program, Term, Type}, builtins::DefaultFunction, machine::runtime::Compressable, + machine::value::to_pallas_bigint, }; use interner::Interner; use num_bigint::BigInt; -use num_bigint::Sign; -use num_traits::ToPrimitive; use pallas_primitives::alonzo::PlutusData; use peg::{error::ParseError, str::LineCol}; @@ -253,16 +252,7 @@ peg::parser! { PlutusData::Map(pallas_codec::utils::KeyValuePairs::Def(kvps)) } / _* "List" _+ ls:plutus_list() { PlutusData::Array(ls) } - / _* "I" _+ n:big_number() { match n.to_i64() { - Some(n) => PlutusData::BigInt(pallas_primitives::alonzo::BigInt::Int(n.into())), - None => match n.sign() { - Sign::Minus => { - let m: BigInt = n+1; - PlutusData::BigInt(pallas_primitives::babbage::BigInt::BigNInt(m.to_bytes_be().1.into())) - }, - _ => PlutusData::BigInt(pallas_primitives::babbage::BigInt::BigUInt(n.to_bytes_be().1.into())) - } - } } + / _* "I" _+ n:big_number() { PlutusData::BigInt(to_pallas_bigint(&n)) } / _* "B" _+ "#" i:ident()* {? Ok(PlutusData::BoundedBytes( hex::decode(String::from_iter(i)).or(Err("bytes"))?.into() diff --git a/crates/uplc/src/pretty.rs b/crates/uplc/src/pretty.rs index 119bb15e..3493d4e1 100644 --- a/crates/uplc/src/pretty.rs +++ b/crates/uplc/src/pretty.rs @@ -2,6 +2,7 @@ use crate::{ ast::{Constant, Program, Term, Type}, flat::Binder, machine::runtime::Compressable, + machine::value::from_pallas_bigint, }; use pallas_primitives::babbage::{Constr, PlutusData}; use pretty::RcDoc; @@ -336,11 +337,9 @@ impl Constant { RcDoc::text(", "), )) .append(RcDoc::text("]")), - PlutusData::BigInt(bi) => RcDoc::text("I").append(RcDoc::space()).append(match bi { - pallas_primitives::babbage::BigInt::Int(v) => RcDoc::text(v.to_string()), - pallas_primitives::babbage::BigInt::BigUInt(v) => RcDoc::text(v.to_string()), - pallas_primitives::babbage::BigInt::BigNInt(v) => RcDoc::text(v.to_string()), - }), + PlutusData::BigInt(bi) => RcDoc::text("I") + .append(RcDoc::space()) + .append(RcDoc::text(from_pallas_bigint(bi).to_string())), PlutusData::BoundedBytes(bs) => RcDoc::text("B") .append(RcDoc::space()) .append(RcDoc::text("#"))