Removed value method and use deref to get type
This commit is contained in:
@@ -187,12 +187,6 @@ impl ArenaHeader {
|
|||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct TypedArenaPtr<T: ?Sized>(ptr::NonNull<T>);
|
pub struct TypedArenaPtr<T: ?Sized>(ptr::NonNull<T>);
|
||||||
|
|
||||||
impl TypedArenaPtr<Integer> {
|
|
||||||
pub fn value(&self) -> Integer {
|
|
||||||
unsafe { self.0.as_ref().clone() }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: ?Sized + PartialOrd> PartialOrd for TypedArenaPtr<T> {
|
impl<T: ?Sized + PartialOrd> PartialOrd for TypedArenaPtr<T> {
|
||||||
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
|
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
|
||||||
(**self).partial_cmp(&**other)
|
(**self).partial_cmp(&**other)
|
||||||
|
|||||||
@@ -372,7 +372,7 @@ impl<'a> ArithmeticEvaluator<'a> {
|
|||||||
pub(crate) fn rnd_i<'a>(n: &'a Number, arena: &mut Arena) -> Number {
|
pub(crate) fn rnd_i<'a>(n: &'a Number, arena: &mut Arena) -> Number {
|
||||||
match n {
|
match n {
|
||||||
&Number::Integer(i) => {
|
&Number::Integer(i) => {
|
||||||
let result = i.value().try_into();
|
let result = (&*i).try_into();
|
||||||
if let Ok(value) = result{
|
if let Ok(value) = result{
|
||||||
fixnum!(Number, value, arena)
|
fixnum!(Number, value, arena)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1116,7 +1116,7 @@ pub(crate) fn constant_key_alternatives(
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
Literal::Integer(ref n) => {
|
Literal::Integer(ref n) => {
|
||||||
let result = n.value().try_into();
|
let result = (&**n).try_into();
|
||||||
if let Ok(value) = result {
|
if let Ok(value) = result {
|
||||||
Fixnum::build_with_checked(value).map(|n| {
|
Fixnum::build_with_checked(value).map(|n| {
|
||||||
constants.push(Literal::Fixnum(n));
|
constants.push(Literal::Fixnum(n));
|
||||||
|
|||||||
@@ -614,7 +614,7 @@ pub(crate) fn idiv(n1: Number, n2: Number, arena: &mut Arena) -> Result<Number,
|
|||||||
Err(zero_divisor_eval_error(stub_gen))
|
Err(zero_divisor_eval_error(stub_gen))
|
||||||
} else {
|
} else {
|
||||||
Ok(Number::arena_from(
|
Ok(Number::arena_from(
|
||||||
<(Integer, Integer)>::from(n1.value().div_rem(&*n2)).0,
|
<(Integer, Integer)>::from((&*n1).div_rem(&*n2)).0,
|
||||||
arena,
|
arena,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
@@ -668,7 +668,7 @@ pub(crate) fn shr(n1: Number, n2: Number, arena: &mut Arena) -> Result<Number, M
|
|||||||
(Number::Fixnum(n1), Number::Integer(n2)) => {
|
(Number::Fixnum(n1), Number::Integer(n2)) => {
|
||||||
let n1 = Integer::from(n1.get_num());
|
let n1 = Integer::from(n1.get_num());
|
||||||
|
|
||||||
let result: Result<usize, _> = n2.value().try_into();
|
let result: Result<usize, _> = (&*n2).try_into();
|
||||||
|
|
||||||
match result {
|
match result {
|
||||||
Ok(n2) => {
|
Ok(n2) => {
|
||||||
@@ -686,7 +686,7 @@ pub(crate) fn shr(n1: Number, n2: Number, arena: &mut Arena) -> Result<Number, M
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
(Number::Integer(n1), Number::Integer(n2)) => {
|
(Number::Integer(n1), Number::Integer(n2)) => {
|
||||||
let result: Result<usize, _> = n2.value().try_into();
|
let result: Result<usize, _> = (&*n2).try_into();
|
||||||
|
|
||||||
match result {
|
match result {
|
||||||
Ok(n2) => {
|
Ok(n2) => {
|
||||||
@@ -729,7 +729,7 @@ pub(crate) fn shl(n1: Number, n2: Number, arena: &mut Arena) -> Result<Number, M
|
|||||||
(Number::Fixnum(n1), Number::Integer(n2)) => {
|
(Number::Fixnum(n1), Number::Integer(n2)) => {
|
||||||
let n1 = Integer::from(n1.get_num());
|
let n1 = Integer::from(n1.get_num());
|
||||||
|
|
||||||
match n2.value().try_into() as Result<u32, _> {
|
match (&*n2).try_into() as Result<u32, _> {
|
||||||
Ok(n2) => {
|
Ok(n2) => {
|
||||||
let n1: u64 = n1.try_into().unwrap();
|
let n1: u64 = n1.try_into().unwrap();
|
||||||
Ok(Number::arena_from(n1 << n2, arena))
|
Ok(Number::arena_from(n1 << n2, arena))
|
||||||
@@ -745,9 +745,9 @@ pub(crate) fn shl(n1: Number, n2: Number, arena: &mut Arena) -> Result<Number, M
|
|||||||
Ok(Number::arena_from(Integer::from(&*n1 << usize::max_value()),arena))
|
Ok(Number::arena_from(Integer::from(&*n1 << usize::max_value()),arena))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
(Number::Integer(n1), Number::Integer(n2)) => match n2.value().try_into() as Result<u32, _> {
|
(Number::Integer(n1), Number::Integer(n2)) => match (&*n2).try_into() as Result<u32, _> {
|
||||||
Ok(n2) => {
|
Ok(n2) => {
|
||||||
let n1: u64 = n1.value().try_into().unwrap();
|
let n1: u64 = (&*n1).try_into().unwrap();
|
||||||
Ok(Number::arena_from(Integer::from(n1 << n2), arena))
|
Ok(Number::arena_from(Integer::from(n1 << n2), arena))
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
@@ -881,7 +881,7 @@ pub(crate) fn modulus(x: Number, y: Number, arena: &mut Arena) -> Result<Number,
|
|||||||
} else {
|
} else {
|
||||||
let n2 = Integer::from(n2_i);
|
let n2 = Integer::from(n2_i);
|
||||||
Ok(Number::arena_from(
|
Ok(Number::arena_from(
|
||||||
<(Integer, Integer)>::from(n1.value().div_rem(&n2)).1,
|
<(Integer, Integer)>::from((&*n1).div_rem(&n2)).1,
|
||||||
arena,
|
arena,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
@@ -891,7 +891,7 @@ pub(crate) fn modulus(x: Number, y: Number, arena: &mut Arena) -> Result<Number,
|
|||||||
Err(zero_divisor_eval_error(stub_gen))
|
Err(zero_divisor_eval_error(stub_gen))
|
||||||
} else {
|
} else {
|
||||||
Ok(Number::arena_from(
|
Ok(Number::arena_from(
|
||||||
<(Integer, Integer)>::from(x.value().div_rem(&*y)).1,
|
<(Integer, Integer)>::from((&*x).div_rem(&*y)).1,
|
||||||
arena,
|
arena,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
@@ -980,7 +980,7 @@ pub(crate) fn gcd(n1: Number, n2: Number, arena: &mut Arena) -> Result<Number, M
|
|||||||
}
|
}
|
||||||
(Number::Integer(n1), Number::Integer(n2)) => {
|
(Number::Integer(n1), Number::Integer(n2)) => {
|
||||||
let n1_clone: Integer = (*n1).clone();
|
let n1_clone: Integer = (*n1).clone();
|
||||||
let n2: isize = n2.value().try_into().unwrap();
|
let n2: isize = (&*n2).try_into().unwrap();
|
||||||
Ok(Number::arena_from(Integer::from(n1_clone.gcd(&Integer::from(n2))) as IBig, arena))
|
Ok(Number::arena_from(Integer::from(n1_clone.gcd(&Integer::from(n2))) as IBig, arena))
|
||||||
}
|
}
|
||||||
(Number::Float(f), _) | (_, Number::Float(f)) => {
|
(Number::Float(f), _) | (_, Number::Float(f)) => {
|
||||||
|
|||||||
@@ -259,7 +259,7 @@ pub(crate) fn to_local_code_ptr(heap: &Heap, addr: HeapCellValue) -> Option<usiz
|
|||||||
match Number::try_from(heap[s]) {
|
match Number::try_from(heap[s]) {
|
||||||
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).ok(),
|
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).ok(),
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let value: usize = n.value().try_into().unwrap();
|
let value: usize = (&*n).try_into().unwrap();
|
||||||
Some(value)
|
Some(value)
|
||||||
},
|
},
|
||||||
_ => None,
|
_ => None,
|
||||||
|
|||||||
@@ -1653,7 +1653,7 @@ impl Machine {
|
|||||||
let arity = self.deref_register(3);
|
let arity = self.deref_register(3);
|
||||||
let arity = match Number::try_from(arity) {
|
let arity = match Number::try_from(arity) {
|
||||||
Ok(Number::Integer(n)) if &*n >= &Integer::from(0) && &*n <= &Integer::from(MAX_ARITY) => {
|
Ok(Number::Integer(n)) if &*n >= &Integer::from(0) && &*n <= &Integer::from(MAX_ARITY) => {
|
||||||
let value: usize = n.value().try_into().unwrap();
|
let value: usize = (&*n).try_into().unwrap();
|
||||||
Ok(value)
|
Ok(value)
|
||||||
},
|
},
|
||||||
Ok(Number::Fixnum(n)) if n.get_num() >= 0 && n.get_num() <= MAX_ARITY as i64 => {
|
Ok(Number::Fixnum(n)) if n.get_num() >= 0 && n.get_num() <= MAX_ARITY as i64 => {
|
||||||
@@ -2230,7 +2230,7 @@ impl Machine {
|
|||||||
|
|
||||||
let target_pos = match Number::try_from(target_pos) {
|
let target_pos = match Number::try_from(target_pos) {
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let value: usize = n.value().try_into().unwrap();
|
let value: usize = (&*n).try_into().unwrap();
|
||||||
value
|
value
|
||||||
},
|
},
|
||||||
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).unwrap(),
|
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).unwrap(),
|
||||||
|
|||||||
@@ -872,7 +872,7 @@ impl MachineState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let result = n.value().try_into();
|
let result = (&*n).try_into();
|
||||||
|
|
||||||
if let Ok(value) = result {
|
if let Ok(value) = result {
|
||||||
printer.max_depth = value;
|
printer.max_depth = value;
|
||||||
|
|||||||
@@ -1183,7 +1183,7 @@ impl MachineState {
|
|||||||
let n = match n {
|
let n = match n {
|
||||||
Number::Fixnum(n) => n.get_num() as usize,
|
Number::Fixnum(n) => n.get_num() as usize,
|
||||||
Number::Integer(n) if (*n).num_ge(&0) && (*n).num_le(&std::usize::MAX) => {
|
Number::Integer(n) if (*n).num_ge(&0) && (*n).num_le(&std::usize::MAX) => {
|
||||||
let value: usize = n.value().try_into().unwrap();
|
let value: usize = (&*n).try_into().unwrap();
|
||||||
value
|
value
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
@@ -1408,7 +1408,7 @@ impl MachineState {
|
|||||||
},
|
},
|
||||||
Ok(Number::Fixnum(n)) => n.get_num(),
|
Ok(Number::Fixnum(n)) => n.get_num(),
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let value: i64 = n.value().try_into().unwrap();
|
let value: i64 = (&*n).try_into().unwrap();
|
||||||
value
|
value
|
||||||
},
|
},
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
@@ -1691,7 +1691,7 @@ impl MachineState {
|
|||||||
Err(_) => {}
|
Err(_) => {}
|
||||||
},
|
},
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let b: u8 = n.value().try_into().unwrap();
|
let b: u8 = (&*n).try_into().unwrap();
|
||||||
|
|
||||||
bytes.push(b);
|
bytes.push(b);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ fn setup_predicate_indicator(term: &mut Term) -> Result<PredicateKey, Compilatio
|
|||||||
|
|
||||||
let arity = match arity {
|
let arity = match arity {
|
||||||
Term::Literal(_, Literal::Integer(n)) => {
|
Term::Literal(_, Literal::Integer(n)) => {
|
||||||
let value: usize = n.value().try_into().unwrap();
|
let value: usize = (&*n).try_into().unwrap();
|
||||||
Some(value)
|
Some(value)
|
||||||
},
|
},
|
||||||
Term::Literal(_, Literal::Fixnum(n)) => usize::try_from(n.get_num()).ok(),
|
Term::Literal(_, Literal::Fixnum(n)) => usize::try_from(n.get_num()).ok(),
|
||||||
|
|||||||
@@ -751,7 +751,7 @@ impl MachineState {
|
|||||||
let max_steps_n = match max_steps {
|
let max_steps_n = match max_steps {
|
||||||
Ok(Number::Fixnum(n)) => Some(n.get_num()),
|
Ok(Number::Fixnum(n)) => Some(n.get_num()),
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let value: i64 = n.value().try_into().unwrap();
|
let value: i64 = (&*n).try_into().unwrap();
|
||||||
|
|
||||||
Some(value)
|
Some(value)
|
||||||
},
|
},
|
||||||
@@ -1116,7 +1116,7 @@ impl MachineState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: u32 = n.value().try_into().unwrap();
|
let n: u32 = (&*n).try_into().unwrap();
|
||||||
if let Some(c) = std::char::from_u32(n) {
|
if let Some(c) = std::char::from_u32(n) {
|
||||||
string.push(c);
|
string.push(c);
|
||||||
continue;
|
continue;
|
||||||
@@ -1763,7 +1763,7 @@ impl Machine {
|
|||||||
let n = match Number::try_from(reg) {
|
let n = match Number::try_from(reg) {
|
||||||
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).ok(),
|
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).ok(),
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let value: usize = n.value().try_into().unwrap();
|
let value: usize = (&*n).try_into().unwrap();
|
||||||
Some(value)
|
Some(value)
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
@@ -2478,7 +2478,7 @@ impl Machine {
|
|||||||
addr if addr.is_var() => addr,
|
addr if addr.is_var() => addr,
|
||||||
addr => match Number::try_from(addr) {
|
addr => match Number::try_from(addr) {
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let result: Result<u8, _> = n.value().try_into();
|
let result: Result<u8, _> = (&*n).try_into();
|
||||||
if let Ok(value) = result {
|
if let Ok(value) = result {
|
||||||
fixnum_as_cell!(Fixnum::build_with(value as i64))
|
fixnum_as_cell!(Fixnum::build_with(value as i64))
|
||||||
} else {
|
} else {
|
||||||
@@ -2676,7 +2676,7 @@ impl Machine {
|
|||||||
_ => {
|
_ => {
|
||||||
match Number::try_from(a2) {
|
match Number::try_from(a2) {
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: u32 = n.value().try_into().unwrap();
|
let n: u32 = (&*n).try_into().unwrap();
|
||||||
|
|
||||||
let n = std::char::from_u32(n).and_then(|_| Some(n));
|
let n = std::char::from_u32(n).and_then(|_| Some(n));
|
||||||
|
|
||||||
@@ -2846,7 +2846,7 @@ impl Machine {
|
|||||||
_ => {
|
_ => {
|
||||||
match Number::try_from(a2) {
|
match Number::try_from(a2) {
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: u32 = n.value().try_into().unwrap();
|
let n: u32 = (&*n).try_into().unwrap();
|
||||||
let n = std::char::from_u32(n);
|
let n = std::char::from_u32(n);
|
||||||
let c = match n {
|
let c = match n {
|
||||||
Some(c) => c,
|
Some(c) => c,
|
||||||
@@ -3083,7 +3083,7 @@ impl Machine {
|
|||||||
} else {
|
} else {
|
||||||
match Number::try_from(addr) {
|
match Number::try_from(addr) {
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: u32 = n.value().try_into().unwrap();
|
let n: u32 = (&*n).try_into().unwrap();
|
||||||
let n = char::try_from(n);
|
let n = char::try_from(n);
|
||||||
if let Some(c) = n.ok() {
|
if let Some(c) = n.ok() {
|
||||||
write!(&mut stream, "{}", c).unwrap();
|
write!(&mut stream, "{}", c).unwrap();
|
||||||
@@ -3222,7 +3222,7 @@ impl Machine {
|
|||||||
} else {
|
} else {
|
||||||
match Number::try_from(addr) {
|
match Number::try_from(addr) {
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: u8 = n.value().try_into().unwrap();
|
let n: u8 = (&*n).try_into().unwrap();
|
||||||
|
|
||||||
match n {
|
match n {
|
||||||
nb => {
|
nb => {
|
||||||
@@ -3307,7 +3307,7 @@ impl Machine {
|
|||||||
fixnum_as_cell!(Fixnum::build_with(-1))
|
fixnum_as_cell!(Fixnum::build_with(-1))
|
||||||
}
|
}
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: Result<u8, _> = n.value().try_into();
|
let n: Result<u8, _> = (&*n).try_into();
|
||||||
|
|
||||||
if let Ok(value) = n {
|
if let Ok(value) = n {
|
||||||
fixnum_as_cell!(Fixnum::build_with(value as i64))
|
fixnum_as_cell!(Fixnum::build_with(value as i64))
|
||||||
@@ -3463,7 +3463,7 @@ impl Machine {
|
|||||||
|
|
||||||
let num = match Number::try_from(self.deref_register(2)) {
|
let num = match Number::try_from(self.deref_register(2)) {
|
||||||
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).unwrap(),
|
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).unwrap(),
|
||||||
Ok(Number::Integer(n)) => match n.value().try_into() as Result<usize, _> {
|
Ok(Number::Integer(n)) => match (&*n).try_into() as Result<usize, _> {
|
||||||
Ok(u) => {
|
Ok(u) => {
|
||||||
u
|
u
|
||||||
}
|
}
|
||||||
@@ -3563,7 +3563,7 @@ impl Machine {
|
|||||||
} else {
|
} else {
|
||||||
match Number::try_from(addr) {
|
match Number::try_from(addr) {
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: u32 = n.value().try_into().unwrap();
|
let n: u32 = (&*n).try_into().unwrap();
|
||||||
let n = std::char::from_u32(n);
|
let n = std::char::from_u32(n);
|
||||||
|
|
||||||
if let Some(n) = n {
|
if let Some(n) = n {
|
||||||
@@ -3914,7 +3914,7 @@ impl Machine {
|
|||||||
let arity = match Number::try_from(arity) {
|
let arity = match Number::try_from(arity) {
|
||||||
Ok(Number::Fixnum(n)) => Some(n.get_num() as usize),
|
Ok(Number::Fixnum(n)) => Some(n.get_num() as usize),
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let value: usize = n.value().try_into().unwrap();
|
let value: usize = (&*n).try_into().unwrap();
|
||||||
Some(value)
|
Some(value)
|
||||||
},
|
},
|
||||||
_ => None,
|
_ => None,
|
||||||
@@ -4240,7 +4240,7 @@ impl Machine {
|
|||||||
|
|
||||||
let n = match Number::try_from(len) {
|
let n = match Number::try_from(len) {
|
||||||
Ok(Number::Fixnum(n)) => n.get_num() as usize,
|
Ok(Number::Fixnum(n)) => n.get_num() as usize,
|
||||||
Ok(Number::Integer(n)) => match n.value().try_into() as Result<usize, _> {
|
Ok(Number::Integer(n)) => match (&*n).try_into() as Result<usize, _> {
|
||||||
Ok(n) => n,
|
Ok(n) => n,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
let err = self.machine_st.resource_error(len);
|
let err = self.machine_st.resource_error(len);
|
||||||
@@ -4525,7 +4525,7 @@ impl Machine {
|
|||||||
let status_code: u16 = match Number::try_from(status_code) {
|
let status_code: u16 = match Number::try_from(status_code) {
|
||||||
Ok(Number::Fixnum(n)) => n.get_num() as u16,
|
Ok(Number::Fixnum(n)) => n.get_num() as u16,
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: Result<u16, _> = n.value().try_into();
|
let n: Result<u16, _> = (&*n).try_into();
|
||||||
|
|
||||||
if let Ok(value) = n {
|
if let Ok(value) = n {
|
||||||
value
|
value
|
||||||
@@ -4806,7 +4806,7 @@ impl Machine {
|
|||||||
|
|
||||||
let priority = match Number::try_from(priority) {
|
let priority = match Number::try_from(priority) {
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: u16 = n.value().try_into().unwrap();
|
let n: u16 = (&*n).try_into().unwrap();
|
||||||
n
|
n
|
||||||
},
|
},
|
||||||
Ok(Number::Fixnum(n)) => u16::try_from(n.get_num()).unwrap(),
|
Ok(Number::Fixnum(n)) => u16::try_from(n.get_num()).unwrap(),
|
||||||
@@ -4959,7 +4959,7 @@ impl Machine {
|
|||||||
|
|
||||||
let b = match Number::try_from(addr) {
|
let b = match Number::try_from(addr) {
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let value: usize = n.value().try_into().unwrap();
|
let value: usize = (&*n).try_into().unwrap();
|
||||||
Some(value)
|
Some(value)
|
||||||
},
|
},
|
||||||
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).ok(),
|
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).ok(),
|
||||||
@@ -5331,7 +5331,7 @@ impl Machine {
|
|||||||
let code = match Number::try_from(code) {
|
let code = match Number::try_from(code) {
|
||||||
Ok(Number::Fixnum(n)) => u8::try_from(n.get_num()).unwrap(),
|
Ok(Number::Fixnum(n)) => u8::try_from(n.get_num()).unwrap(),
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: u8 = n.value().try_into().unwrap();
|
let n: u8 = (&*n).try_into().unwrap();
|
||||||
n
|
n
|
||||||
},
|
},
|
||||||
Ok(Number::Rational(r)) => {
|
Ok(Number::Rational(r)) => {
|
||||||
@@ -5370,7 +5370,7 @@ impl Machine {
|
|||||||
let n = match Number::try_from(a2) {
|
let n = match Number::try_from(a2) {
|
||||||
Ok(Number::Fixnum(bp)) => bp.get_num() as usize,
|
Ok(Number::Fixnum(bp)) => bp.get_num() as usize,
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let value: usize = n.value().try_into().unwrap();
|
let value: usize = (&*n).try_into().unwrap();
|
||||||
value
|
value
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
@@ -5417,7 +5417,7 @@ impl Machine {
|
|||||||
let arity = match Number::try_from(a3) {
|
let arity = match Number::try_from(a3) {
|
||||||
Ok(Number::Fixnum(n)) => n.get_num() as usize,
|
Ok(Number::Fixnum(n)) => n.get_num() as usize,
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let result = n.value().try_into();
|
let result = (&*n).try_into();
|
||||||
|
|
||||||
if let Ok(value) = result {
|
if let Ok(value) = result {
|
||||||
value
|
value
|
||||||
@@ -6065,7 +6065,7 @@ impl Machine {
|
|||||||
let _: StdRng = SeedableRng::seed_from_u64(n);
|
let _: StdRng = SeedableRng::seed_from_u64(n);
|
||||||
},
|
},
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: u64 = n.value().try_into().unwrap();
|
let n: u64 = (&*n).try_into().unwrap();
|
||||||
let _: StdRng = SeedableRng::seed_from_u64(n);
|
let _: StdRng = SeedableRng::seed_from_u64(n);
|
||||||
},
|
},
|
||||||
Ok(Number::Rational(n)) => {
|
Ok(Number::Rational(n)) => {
|
||||||
@@ -6476,7 +6476,7 @@ impl Machine {
|
|||||||
let position = match Number::try_from(position) {
|
let position = match Number::try_from(position) {
|
||||||
Ok(Number::Fixnum(n)) => n.get_num() as u64,
|
Ok(Number::Fixnum(n)) => n.get_num() as u64,
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: Result<u64, _> = n.value().try_into();
|
let n: Result<u64, _> = (&*n).try_into();
|
||||||
if let Ok(n) = n {
|
if let Ok(n) = n {
|
||||||
n
|
n
|
||||||
} else {
|
} else {
|
||||||
@@ -6754,7 +6754,7 @@ impl Machine {
|
|||||||
let arity = match Number::try_from(arity) {
|
let arity = match Number::try_from(arity) {
|
||||||
Ok(Number::Fixnum(n)) => n.get_num() as usize,
|
Ok(Number::Fixnum(n)) => n.get_num() as usize,
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let value: usize = n.value().try_into().unwrap();
|
let value: usize = (&*n).try_into().unwrap();
|
||||||
value
|
value
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
@@ -6812,7 +6812,7 @@ impl Machine {
|
|||||||
let index_ptr = match Number::try_from(index_ptr) {
|
let index_ptr = match Number::try_from(index_ptr) {
|
||||||
Ok(Number::Fixnum(n)) => n.get_num() as usize,
|
Ok(Number::Fixnum(n)) => n.get_num() as usize,
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let value: usize = n.value().try_into().unwrap();
|
let value: usize = (&*n).try_into().unwrap();
|
||||||
value
|
value
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
@@ -7116,7 +7116,7 @@ impl Machine {
|
|||||||
|
|
||||||
let length = match Number::try_from(length) {
|
let length = match Number::try_from(length) {
|
||||||
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).unwrap(),
|
Ok(Number::Fixnum(n)) => usize::try_from(n.get_num()).unwrap(),
|
||||||
Ok(Number::Integer(n)) => match n.value().try_into() as Result<usize, _> {
|
Ok(Number::Integer(n)) => match (&*n).try_into() as Result<usize, _> {
|
||||||
Ok(u) => u,
|
Ok(u) => u,
|
||||||
_ => {
|
_ => {
|
||||||
self.machine_st.fail = true;
|
self.machine_st.fail = true;
|
||||||
@@ -7179,7 +7179,7 @@ impl Machine {
|
|||||||
let iterations = match Number::try_from(iterations) {
|
let iterations = match Number::try_from(iterations) {
|
||||||
Ok(Number::Fixnum(n)) => u64::try_from(n.get_num()).unwrap(),
|
Ok(Number::Fixnum(n)) => u64::try_from(n.get_num()).unwrap(),
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let n: Result<u64, _> = n.value().try_into();
|
let n: Result<u64, _> = (&*n).try_into();
|
||||||
match n {
|
match n {
|
||||||
Ok(i) => i,
|
Ok(i) => i,
|
||||||
_ => {
|
_ => {
|
||||||
@@ -7754,7 +7754,7 @@ impl Machine {
|
|||||||
}
|
}
|
||||||
Ok(Number::Integer(n)) => {
|
Ok(Number::Integer(n)) => {
|
||||||
let value: usize = if n.sign() == Sign::Positive {
|
let value: usize = if n.sign() == Sign::Positive {
|
||||||
UBig::from(n.value().into_parts().1).count_ones()
|
UBig::from((&*n).clone().into_parts().1).count_ones()
|
||||||
} else { 0 };
|
} else { 0 };
|
||||||
Number::arena_from(value, &mut self.machine_st.arena)
|
Number::arena_from(value, &mut self.machine_st.arena)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -474,8 +474,8 @@ pub(crate) trait Unifier: DerefMut<Target = MachineState> {
|
|||||||
match Number::try_from(value) {
|
match Number::try_from(value) {
|
||||||
Ok(n2) => match n2 {
|
Ok(n2) => match n2 {
|
||||||
Number::Fixnum(n2) if (*n1).num_eq(&n2.get_num()) => {}
|
Number::Fixnum(n2) if (*n1).num_eq(&n2.get_num()) => {}
|
||||||
Number::Integer(n2) if (*n1).num_eq(&n2.value()) => {}
|
Number::Integer(n2) if (*n1).num_eq(&*n2) => {}
|
||||||
Number::Rational(n2) if (*n2).num_eq(&n1.value()) => {}
|
Number::Rational(n2) if (*n2).num_eq(&*n1) => {}
|
||||||
_ => {
|
_ => {
|
||||||
self.fail = true;
|
self.fail = true;
|
||||||
}
|
}
|
||||||
@@ -495,7 +495,7 @@ pub(crate) trait Unifier: DerefMut<Target = MachineState> {
|
|||||||
match Number::try_from(value) {
|
match Number::try_from(value) {
|
||||||
Ok(n2) => match n2 {
|
Ok(n2) => match n2 {
|
||||||
Number::Fixnum(n2) if (*n1).num_eq(&Integer::from(n2.get_num())) => {}
|
Number::Fixnum(n2) if (*n1).num_eq(&Integer::from(n2.get_num())) => {}
|
||||||
Number::Integer(n2) if (*n1).num_eq(&n2.value()) => {}
|
Number::Integer(n2) if (*n1).num_eq(&*n2) => {}
|
||||||
Number::Rational(n2) if n1 == n2 => {}
|
Number::Rational(n2) if n1 == n2 => {}
|
||||||
_ => {
|
_ => {
|
||||||
self.fail = true;
|
self.fail = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user