Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions nanvm-lib/src/vm/bigint/add.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use core::ops::Add;

use crate::vm::{BigInt, IContainer, IVm};
use crate::vm::{BigInt, IVm};

impl<A: IVm> Add for BigInt<A> {
type Output = Self;
fn add(self, rhs: Self) -> Self::Output {
let rhs_sign = *rhs.0.header();
let rhs_sign = rhs.sign();
self.add_signed(rhs, rhs_sign)
}
}
Expand Down
6 changes: 3 additions & 3 deletions nanvm-lib/src/vm/bigint/cmp.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::vm::{IContainer, IVm, bigint::BigInt};
use crate::vm::{IVm, bigint::BigInt};
use std::cmp::Ordering;

impl<A: IVm> PartialOrd for BigInt<A> {
Expand All @@ -11,8 +11,8 @@ impl<A: IVm> Ord for BigInt<A> {
fn cmp(&self, rhs: &Self) -> Ordering {
use crate::sign::Sign;

let lhs_sign = *self.0.header();
let rhs_sign = *rhs.0.header();
let lhs_sign = self.sign();
let rhs_sign = rhs.sign();

match (lhs_sign, rhs_sign) {
(Sign::Positive, Sign::Negative) => Ordering::Greater,
Expand Down
2 changes: 1 addition & 1 deletion nanvm-lib/src/vm/bigint/debug.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ impl<A: IVm> Debug for BigInt<A> {
if self.is_zero() {
return f.write_str("0n");
}
if *self.0.header() == Sign::Negative {
if self.sign() == Sign::Negative {
f.write_char('-')?;
}
f.write_str("0x")?;
Expand Down
6 changes: 5 additions & 1 deletion nanvm-lib/src/vm/bigint/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ impl<A: IVm> BigInt<A> {
self.0.items().is_empty()
}

fn sign(&self) -> Sign {
*self.0.header()
}

/// The function doesn't normalize the bigint.
fn unchecked_new(sign: Sign, items: impl IntoIterator<Item = u64>) -> Self {
Self(A::InternalBigInt::new_ok(sign, items))
Expand Down Expand Up @@ -75,7 +79,7 @@ impl<A: IVm> BigInt<A> {
/// via `Neg`, because `Neg` rebuilds the container (copying every word) —
/// don't "simplify" `sub` back to `self + (-rhs)`.
fn add_signed(self, rhs: Self, rhs_sign: Sign) -> Self {
let lhs_sign = *self.0.header();
let lhs_sign = self.sign();
let (sign, vec) = if lhs_sign == rhs_sign {
(lhs_sign, self.abs_add_vec(rhs))
} else {
Expand Down
4 changes: 2 additions & 2 deletions nanvm-lib/src/vm/bigint/mul.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::{
common::{sized_index::SizedIndex, vec::with_default},
sign::Sign,
vm::{BigInt, IContainer, IVm},
vm::{BigInt, IVm},
};

use std::ops::Mul;
Expand Down Expand Up @@ -34,7 +34,7 @@ impl<A: IVm> Mul for BigInt<A> {
i += 1;
}

let sign = if self.0.header() == rhs.0.header() {
let sign = if self.sign() == rhs.sign() {
Sign::Positive
} else {
Sign::Negative
Expand Down
4 changes: 2 additions & 2 deletions nanvm-lib/src/vm/bigint/neg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::ops::Neg;

use crate::{
common::sized_index::SizedIndex,
vm::{BigInt, IContainer, IVm},
vm::{BigInt, IVm},
};

impl<A: IVm> Neg for BigInt<A> {
Expand All @@ -11,7 +11,7 @@ impl<A: IVm> Neg for BigInt<A> {
if self.is_zero() {
self
} else {
Self::unchecked_new(self.0.header().flip(), self.index_iter())
Self::unchecked_new(self.sign().flip(), self.index_iter())
}
}
}
4 changes: 2 additions & 2 deletions nanvm-lib/src/vm/bigint/shl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use core::ops::Shl;

use crate::{
common::{div_mod::DivMod, sized_index::SizedIndex},
vm::{Any, BigInt, IContainer, IVm},
vm::{Any, BigInt, IVm},
};

const TOO_LARGE: &str = "shl: shift amount too large";
Expand Down Expand Up @@ -58,7 +58,7 @@ impl<A: IVm> Shl for BigInt<A> {
"shl: result must be normalized and non-empty"
);

Ok(Self::unchecked_new(*self.0.header(), value))
Ok(Self::unchecked_new(self.sign(), value))
}
}

Expand Down
4 changes: 2 additions & 2 deletions nanvm-lib/src/vm/bigint/shr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use core::ops::Shr;

use crate::{
common::{div_mod::DivMod, sized_index::SizedIndex},
vm::{BigInt, IContainer, IVm},
vm::{BigInt, IVm},
};

impl<A: IVm> Shr for BigInt<A> {
Expand Down Expand Up @@ -38,7 +38,7 @@ impl<A: IVm> Shr for BigInt<A> {
}
}

Self::normalize_new(*self.0.header(), value)
Self::normalize_new(self.sign(), value)
}
}

Expand Down
4 changes: 2 additions & 2 deletions nanvm-lib/src/vm/bigint/sub.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use core::ops::Sub;

use crate::vm::{BigInt, IContainer, IVm};
use crate::vm::{BigInt, IVm};

impl<A: IVm> Sub for BigInt<A> {
type Output = Self;
fn sub(self, rhs: Self) -> Self::Output {
let rhs_sign = rhs.0.header().flip();
let rhs_sign = rhs.sign().flip();
self.add_signed(rhs, rhs_sign)
}
}
Expand Down
50 changes: 0 additions & 50 deletions nanvm-lib/todo/bigint-sign-accessor.md

This file was deleted.

Loading