rue_compiler/compile/expr/
cast.rs

1use log::debug;
2use rue_ast::{AstCastExpr, AstNode};
3use rue_hir::Value;
4
5use crate::{Compiler, compile_expr, compile_type};
6
7pub fn compile_cast_expr(ctx: &mut Compiler, cast: &AstCastExpr) -> Value {
8    let ty = if let Some(ty) = cast.ty() {
9        compile_type(ctx, &ty)
10    } else {
11        debug!("Unresolved cast type");
12        ctx.builtins().unresolved.ty
13    };
14
15    let expr = if let Some(expr) = cast.expr() {
16        compile_expr(ctx, &expr, Some(ty))
17    } else {
18        debug!("Unresolved cast expr");
19        ctx.builtins().unresolved.clone()
20    };
21
22    ctx.cast_type(cast.syntax(), expr.ty, ty);
23
24    expr.with_type(ty)
25}