wasm_core/
value.rs

1use executor::{ExecuteResult, ExecuteError};
2use module::ValType;
3use fp_ops;
4
5#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
6pub enum Value {
7    Undef,
8    I32(i32),
9    I64(i64),
10    F32(f32),
11    F64(f64)
12}
13
14impl Default for Value {
15    fn default() -> Value {
16        Value::Undef
17    }
18}
19
20impl Value {
21    pub fn get_i32(&self) -> ExecuteResult<i32> {
22        match *self {
23            Value::Undef => Ok(0),
24            Value::I32(v) => Ok(v),
25            _ => {
26                //panic!();
27                Err(ExecuteError::ValueTypeMismatch)
28            }
29        }
30    }
31
32    pub fn get_i64(&self) -> ExecuteResult<i64> {
33        match *self {
34            Value::Undef => Ok(0),
35            Value::I64(v) => Ok(v),
36            _ => {
37                //panic!();
38                Err(ExecuteError::ValueTypeMismatch)
39            }
40        }
41    }
42
43    pub fn cast_to_i64(&self) -> i64 {
44        match *self {
45            Value::Undef => 0,
46            Value::I32(v) => v as i64,
47            Value::I64(v) => v,
48            Value::F32(v) => v as i64,
49            Value::F64(v) => v as i64
50        }
51    }
52
53    pub fn reinterpret_as_i64(&self) -> i64 {
54        unsafe {
55            match *self {
56                Value::Undef => 0,
57                Value::I32(v) => v as u32 as u64 as i64,
58                Value::I64(v) => v,
59                Value::F32(v) => ::prelude::mem::transmute::<f32, u32>(v) as u64 as i64,
60                Value::F64(v) => ::prelude::mem::transmute(v)
61            }
62        }
63    }
64
65    pub fn reinterpret_from_i64(v: i64, ty: ValType) -> Value {
66        unsafe {
67            match ty {
68                ValType::I32 => Value::I32(v as i32),
69                ValType::I64 => Value::I64(v),
70                ValType::F32 => Value::F32(::std::mem::transmute(v as u64 as u32)),
71                ValType::F64 => Value::F64(::std::mem::transmute(v))
72            }
73        }
74    }
75}