Skip to main content

lovm2_core/gen/hir/
return.rs

1//! Return value from a `CodeObject`
2//!
3//! Every `CodeObject` implicitly returns `Nil` if no return value was given.
4
5use super::*;
6
7/// Return value from a `CodeObject`
8#[derive(Clone)]
9pub struct Return {
10    expr: Expr,
11}
12
13impl Return {
14    pub fn nil() -> Self {
15        Self {
16            expr: Value::Nil.into(),
17        }
18    }
19
20    pub fn value<T>(expr: T) -> Self
21    where
22        T: Into<Expr>,
23    {
24        Self { expr: expr.into() }
25    }
26}
27
28impl HirLowering for Return {
29    fn lower<'hir, 'lir>(&'hir self, runtime: &mut HirLoweringRuntime<'lir>)
30    where
31        'hir: 'lir,
32    {
33        self.expr.lower(runtime);
34        runtime.emit(LirElement::Ret);
35    }
36}