rue_compiler/compile/binding/
named_binding.rs

1use rue_ast::AstNamedBinding;
2use rue_hir::{Declaration, Symbol, SymbolId};
3use rue_parser::SyntaxToken;
4
5use crate::Compiler;
6
7pub fn create_named_binding(ctx: &mut Compiler, symbol: SymbolId, binding: &AstNamedBinding) {
8    let Some(name) = binding.name() else {
9        return;
10    };
11
12    create_binding_for_identifier(ctx, symbol, name);
13}
14
15pub fn create_binding_for_identifier(ctx: &mut Compiler, symbol: SymbolId, name: SyntaxToken) {
16    ctx.last_scope_mut()
17        .insert_symbol(name.text().to_string(), symbol, false);
18
19    ctx.declaration_span(Declaration::Symbol(symbol), name.text_range());
20
21    match ctx.symbol_mut(symbol) {
22        Symbol::Binding(binding) => binding.name = Some(name),
23        Symbol::Parameter(parameter) => parameter.name = Some(name),
24        _ => {}
25    }
26}