lovm2_core/gen/hir/
conv.rs1use super::*;
4
5use crate::value::ValueType;
6
7#[derive(Clone, Debug)]
9pub struct Conv {
10 ty: ValueType,
11 expr: Box<Expr>,
12}
13
14impl Conv {
15 fn new(ty: ValueType, expr: Expr) -> Self {
16 Self {
17 ty,
18 expr: Box::new(expr),
19 }
20 }
21
22 pub fn to_bool<T>(expr: T) -> Self
23 where
24 T: Into<Expr>,
25 {
26 Self::new(ValueType::Bool, expr.into())
27 }
28
29 pub fn to_float<T>(expr: T) -> Self
30 where
31 T: Into<Expr>,
32 {
33 Self::new(ValueType::Float, expr.into())
34 }
35
36 pub fn to_integer<T>(expr: T) -> Self
37 where
38 T: Into<Expr>,
39 {
40 Self::new(ValueType::Int, expr.into())
41 }
42
43 pub fn to_str<T>(expr: T) -> Self
44 where
45 T: Into<Expr>,
46 {
47 Self::new(ValueType::Str, expr.into())
48 }
49}
50
51impl HirLowering for Conv {
52 fn lower<'hir, 'lir>(&'hir self, runtime: &mut HirLoweringRuntime<'lir>)
53 where
54 'hir: 'lir,
55 {
56 self.expr.lower(runtime);
57 runtime.emit(LirElement::conv(self.ty.clone()));
58 }
59}