Skip to main content

nanvm_lib/vm/number/
from.rs

1use super::Number;
2
3/// The one way in: every `NaN` becomes [`Number::NAN`], everything else
4/// keeps its bits.
5impl From<f64> for Number {
6    fn from(v: f64) -> Self {
7        if v.is_nan() { Self::NAN } else { Number(v) }
8    }
9}
10
11impl From<Number> for f64 {
12    fn from(v: Number) -> Self {
13        v.0
14    }
15}
16
17/// `Number(true)` is `1` and `Number(false)` is `0`: `ToNumber` of a
18/// boolean.
19impl From<bool> for Number {
20    fn from(v: bool) -> Self {
21        Number(v as u8 as f64)
22    }
23}
24
25/// Exact: every `i32` is a `Number`. `ToInt32`'s results come back this way.
26impl From<i32> for Number {
27    fn from(v: i32) -> Self {
28        Number(v as f64)
29    }
30}
31
32/// Exact: every `u32` is a `Number`. `ToUint32`'s results come back this way.
33impl From<u32> for Number {
34    fn from(v: u32) -> Self {
35        Number(v as f64)
36    }
37}