rue_compiler/compile/expr/
cast.rs1use 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}