misc: remove i128 support

Rather than doing this, we should use a BigNumber library
This commit is contained in:
Roman Godmaire 2024-05-06 22:16:05 -04:00
parent f1083009a4
commit e4484297a9
3 changed files with 5 additions and 47 deletions

View file

@ -1,9 +1,9 @@
use std::borrow::Borrow; use std::borrow::Borrow;
use std::collections::HashMap; use std::collections::HashMap;
use crate::{Error, Node};
use crate::evaluator::{eval, eval_node}; use crate::evaluator::{eval, eval_node};
use crate::macros::arg_count; use crate::macros::arg_count;
use crate::{Error, Node};
pub(super) fn core() -> HashMap<String, Node> { pub(super) fn core() -> HashMap<String, Node> {
[ [
@ -92,23 +92,13 @@ pub(super) fn core() -> HashMap<String, Node> {
let res = args let res = args
.into_iter() .into_iter()
.reduce(|lhs, rhs| match (lhs, rhs) { .reduce(|lhs, rhs| match (lhs, rhs) {
(Node::Int(lhs), Node::Int(rhs)) => match lhs.checked_add(rhs) { (Node::Int(lhs), Node::Int(rhs)) => Node::Int(lhs + rhs),
Some(val) => Node::Int(val),
None => Node::Int128(lhs as i128 + rhs as i128),
},
(Node::Int128(lhs), Node::Int128(rhs)) => Node::Int128(lhs + rhs),
(Node::Int(lhs), Node::Int128(rhs)) => {
Node::Int128(lhs as i128 + rhs as i128)
}
(Node::Int128(lhs), Node::Int(rhs)) => Node::Int128(lhs + rhs as i128),
(Node::Float(lhs), Node::Float(rhs)) => Node::Float(lhs + rhs), (Node::Float(lhs), Node::Float(rhs)) => Node::Float(lhs + rhs),
(Node::Int(lhs), Node::Float(rhs)) => Node::Float(lhs as f64 + rhs), (Node::Int(lhs), Node::Float(rhs)) => Node::Float(lhs as f64 + rhs),
(Node::Float(lhs), Node::Int(rhs)) => Node::Float(lhs + rhs as f64), (Node::Float(lhs), Node::Int(rhs)) => Node::Float(lhs + rhs as f64),
_ => todo!(), _ => todo!(),
}) })
.unwrap_or(Node::Int(0)); .unwrap_or(Node::Int(0));
Ok(res) Ok(res)
}), }),
), ),
@ -118,16 +108,7 @@ pub(super) fn core() -> HashMap<String, Node> {
let res = args let res = args
.into_iter() .into_iter()
.reduce(|lhs, rhs| match (lhs, rhs) { .reduce(|lhs, rhs| match (lhs, rhs) {
(Node::Int(lhs), Node::Int(rhs)) => match lhs.checked_sub(rhs) { (Node::Int(lhs), Node::Int(rhs)) => Node::Int(lhs - rhs),
Some(val) => Node::Int(val),
None => Node::Int128(lhs as i128 - rhs as i128),
},
(Node::Int128(lhs), Node::Int128(rhs)) => Node::Int128(lhs - rhs),
(Node::Int(lhs), Node::Int128(rhs)) => {
Node::Int128(lhs as i128 - rhs as i128)
}
(Node::Int128(lhs), Node::Int(rhs)) => Node::Int128(lhs - rhs as i128),
(Node::Float(lhs), Node::Float(rhs)) => Node::Float(lhs - rhs), (Node::Float(lhs), Node::Float(rhs)) => Node::Float(lhs - rhs),
(Node::Float(lhs), Node::Int(rhs)) => Node::Float(lhs - rhs as f64), (Node::Float(lhs), Node::Int(rhs)) => Node::Float(lhs - rhs as f64),
(Node::Int(lhs), Node::Float(rhs)) => Node::Float(lhs as f64 - rhs), (Node::Int(lhs), Node::Float(rhs)) => Node::Float(lhs as f64 - rhs),
@ -144,16 +125,7 @@ pub(super) fn core() -> HashMap<String, Node> {
let res = args let res = args
.into_iter() .into_iter()
.reduce(|lhs, rhs| match (lhs, rhs) { .reduce(|lhs, rhs| match (lhs, rhs) {
(Node::Int(lhs), Node::Int(rhs)) => match lhs.checked_mul(rhs) { (Node::Int(lhs), Node::Int(rhs)) => Node::Int(lhs * rhs),
Some(val) => Node::Int(val),
None => Node::Int128(lhs as i128 * rhs as i128),
},
(Node::Int128(lhs), Node::Int128(rhs)) => Node::Int128(lhs * rhs),
(Node::Int(lhs), Node::Int128(rhs)) => {
Node::Int128(lhs as i128 * rhs as i128)
}
(Node::Int128(lhs), Node::Int(rhs)) => Node::Int128(lhs * rhs as i128),
(Node::Float(lhs), Node::Float(rhs)) => Node::Float(lhs * rhs), (Node::Float(lhs), Node::Float(rhs)) => Node::Float(lhs * rhs),
(Node::Float(lhs), Node::Int(rhs)) => Node::Float(lhs * rhs as f64), (Node::Float(lhs), Node::Int(rhs)) => Node::Float(lhs * rhs as f64),
(Node::Int(lhs), Node::Float(rhs)) => Node::Float(lhs as f64 * rhs), (Node::Int(lhs), Node::Float(rhs)) => Node::Float(lhs as f64 * rhs),
@ -170,16 +142,7 @@ pub(super) fn core() -> HashMap<String, Node> {
let res = args let res = args
.into_iter() .into_iter()
.reduce(|lhs, rhs| match (lhs, rhs) { .reduce(|lhs, rhs| match (lhs, rhs) {
(Node::Int(lhs), Node::Int(rhs)) => match lhs.checked_div(rhs) { (Node::Int(lhs), Node::Int(rhs)) => Node::Int(lhs / rhs),
Some(val) => Node::Int(val),
None => Node::Int128(lhs as i128 / rhs as i128),
},
(Node::Int128(lhs), Node::Int128(rhs)) => Node::Int128(lhs / rhs),
(Node::Int(lhs), Node::Int128(rhs)) => {
Node::Int128(lhs as i128 / rhs as i128)
}
(Node::Int128(lhs), Node::Int(rhs)) => Node::Int128(lhs / rhs as i128),
(Node::Float(lhs), Node::Float(rhs)) => Node::Float(lhs / rhs), (Node::Float(lhs), Node::Float(rhs)) => Node::Float(lhs / rhs),
(Node::Float(lhs), Node::Int(rhs)) => Node::Float(lhs / rhs as f64), (Node::Float(lhs), Node::Int(rhs)) => Node::Float(lhs / rhs as f64),
(Node::Int(lhs), Node::Float(rhs)) => Node::Float(lhs as f64 / rhs), (Node::Int(lhs), Node::Float(rhs)) => Node::Float(lhs as f64 / rhs),

View file

@ -10,7 +10,6 @@ pub enum Node {
Symbol(String), Symbol(String),
Keyword(String), Keyword(String),
Int(i64), Int(i64),
Int128(i128),
Float(f64), Float(f64),
String(String), String(String),
Boolean(bool), Boolean(bool),
@ -36,7 +35,6 @@ impl From<mute_parser::Node> for Node {
mute_parser::Node::Symbol(symbol) => Node::Symbol(symbol), mute_parser::Node::Symbol(symbol) => Node::Symbol(symbol),
mute_parser::Node::Keyword(keyword) => Node::Keyword(keyword), mute_parser::Node::Keyword(keyword) => Node::Keyword(keyword),
mute_parser::Node::Int(int) => Node::Int(int), mute_parser::Node::Int(int) => Node::Int(int),
mute_parser::Node::Int128(int) => Node::Int128(int),
mute_parser::Node::Float(float) => Node::Float(float), mute_parser::Node::Float(float) => Node::Float(float),
mute_parser::Node::String(string) => Node::String(string), mute_parser::Node::String(string) => Node::String(string),
mute_parser::Node::Boolean(boolean) => Node::Boolean(boolean), mute_parser::Node::Boolean(boolean) => Node::Boolean(boolean),
@ -65,7 +63,6 @@ impl std::fmt::Display for Node {
} }
Node::Int(val) => write!(f, "{}", val), Node::Int(val) => write!(f, "{}", val),
Node::Int128(val) => write!(f, "{}", val),
Node::Float(val) => write!(f, "{}", val), Node::Float(val) => write!(f, "{}", val),
Node::Boolean(true) => write!(f, "true"), Node::Boolean(true) => write!(f, "true"),
Node::Boolean(false) => write!(f, "false"), Node::Boolean(false) => write!(f, "false"),

View file

@ -7,7 +7,6 @@ pub enum Node {
Symbol(String), Symbol(String),
Keyword(String), Keyword(String),
Int(i64), Int(i64),
Int128(i128),
Float(f64), Float(f64),
String(String), String(String),
Boolean(bool), Boolean(bool),
@ -31,7 +30,6 @@ impl std::fmt::Display for Node {
} }
Node::Int(val) => write!(f, "{}", val), Node::Int(val) => write!(f, "{}", val),
Node::Int128(val) => write!(f, "{}", val),
Node::Float(val) => write!(f, "{}", val), Node::Float(val) => write!(f, "{}", val),
Node::Boolean(true) => write!(f, "true"), Node::Boolean(true) => write!(f, "true"),
Node::Boolean(false) => write!(f, "false"), Node::Boolean(false) => write!(f, "false"),