rue_compiler/compile/
expr.rs1mod binary;
2mod cast;
3mod field_access;
4mod function_call;
5mod group;
6mod guard;
7mod if_expr;
8mod lambda;
9mod list;
10mod literal;
11mod pair;
12mod path;
13mod prefix;
14mod struct_initializer;
15
16pub use binary::*;
17pub use cast::*;
18pub use field_access::*;
19pub use function_call::*;
20pub use group::*;
21pub use guard::*;
22pub use if_expr::*;
23pub use lambda::*;
24pub use list::*;
25pub use literal::*;
26pub use pair::*;
27pub use path::*;
28pub use prefix::*;
29pub use struct_initializer::*;
30
31use rue_ast::AstExpr;
32use rue_hir::Value;
33use rue_types::TypeId;
34
35use crate::{Compiler, compile_block};
36
37pub fn compile_expr(ctx: &mut Compiler, expr: &AstExpr, expected_type: Option<TypeId>) -> Value {
38 match expr {
39 AstExpr::PathExpr(expr) => compile_path_expr(ctx, expr),
40 AstExpr::StructInitializerExpr(expr) => compile_struct_initializer_expr(ctx, expr),
41 AstExpr::LiteralExpr(expr) => compile_literal_expr(ctx, expr),
42 AstExpr::GroupExpr(expr) => compile_group_expr(ctx, expr, expected_type),
43 AstExpr::PairExpr(expr) => compile_pair_expr(ctx, expr, expected_type),
44 AstExpr::ListExpr(expr) => compile_list_expr(ctx, expr, expected_type),
45 AstExpr::PrefixExpr(expr) => compile_prefix_expr(ctx, expr),
46 AstExpr::BinaryExpr(expr) => compile_binary_expr(ctx, expr),
47 AstExpr::FunctionCallExpr(expr) => compile_function_call_expr(ctx, expr),
48 AstExpr::IfExpr(expr) => compile_if_expr(ctx, expr, expected_type),
49 AstExpr::GuardExpr(expr) => compile_guard_expr(ctx, expr),
50 AstExpr::CastExpr(expr) => compile_cast_expr(ctx, expr),
51 AstExpr::FieldAccessExpr(expr) => compile_field_access_expr(ctx, expr),
52 AstExpr::LambdaExpr(expr) => compile_lambda_expr(ctx, expr, expected_type),
53 AstExpr::Block(block) => compile_block(ctx, block, true, expected_type),
54 }
55}