rue_compiler/compile/expr/
path.rs

1use log::debug;
2use rue_ast::{AstNode, AstPathExpr};
3use rue_hir::{Declaration, Hir, SymbolPath, Value};
4
5use crate::{Compiler, PathKind, PathResult, compile_path};
6
7pub fn compile_path_expr(ctx: &mut Compiler, path: &AstPathExpr) -> Value {
8    let PathResult::Symbol(symbol, override_type) =
9        compile_path(ctx, path.syntax(), path.segments(), PathKind::Symbol)
10    else {
11        debug!("Unresolved path expr");
12        return ctx.builtins().unresolved.clone();
13    };
14
15    ctx.reference(Declaration::Symbol(symbol));
16
17    let ty = ctx.symbol_type(symbol);
18
19    let mut value =
20        Value::new(ctx.alloc_hir(Hir::Reference(symbol)), ty).with_reference(SymbolPath {
21            symbol,
22            path: vec![],
23        });
24
25    if let Some(override_type) = override_type {
26        value = value.with_type(override_type);
27    }
28
29    value
30}