compose_eval/expression/
atomic.rs

1use crate::vm::Machine;
2use crate::{Eval, Evaluated};
3use compose_library::Value;
4use compose_library::diag::SourceResult;
5use compose_syntax::ast;
6
7impl Eval for ast::Int<'_> {
8    fn eval(self, _vm: &mut Machine) -> SourceResult<Evaluated> {
9        Ok(Evaluated::mutable(Value::Int(self.get())))
10    }
11}
12
13impl Eval for ast::Str<'_> {
14    fn eval(self, _vm: &mut Machine) -> SourceResult<Evaluated> {
15        Ok(Evaluated::mutable(Value::Str(self.get().into())))
16    }
17}
18
19impl Eval for ast::Bool<'_> {
20    fn eval(self, _vm: &mut Machine) -> SourceResult<Evaluated> {
21        Ok(Evaluated::mutable(Value::Bool(self.get())))
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28    use crate::test::assert_eval;
29
30    #[test]
31    fn test_int() {
32        assert_eq!(assert_eval("124"), Value::Int(124));
33    }
34}