1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#[derive(Clone, Debug, Copy)]
pub enum Value
{
Int(i32),
Long(i64),
Float(f32),
Double(f64),
Object(usize),
Null,
Bool(bool),
}
use crate::{machine::Machine, object::ObjectAddon};
impl ObjectAddon for Value
{
fn to_double(&self, m: &mut Machine) -> f64
{
match self {
Value::Double(d) => d.clone(),
Value::Float(f) => f.clone() as f64,
Value::Bool(b) => {
if *b {
return 1.0;
} else {
return 0.0;
}
}
Value::Int(i) => *i as f64,
Value::Long(i) => *i as f64,
Value::Null => 0.0,
Value::Object(id) => {
let obj = m.pool.get(*id);
obj.to_double(m)
}
}
}
}