mago_symbol_table/
lib.rs

1use mago_ast::Program;
2use mago_interner::ThreadedInterner;
3use mago_walker::MutWalker;
4
5use crate::context::Context;
6use crate::table::SymbolTable;
7use crate::walker::SymbolWalker;
8
9mod context;
10mod walker;
11
12pub mod symbol;
13pub mod table;
14
15/// Construct a symbol table from a program.
16///
17/// # Parameters
18///
19/// - `interner`: The interner to use for string interning.
20/// - `program`: The program to construct the symbol table from.
21/// - `names`: The resolved names for the program.
22///
23/// # Returns
24///
25/// A symbol table containing all the symbols in the program.
26pub fn get_symbols(interner: &ThreadedInterner, program: &Program) -> SymbolTable {
27    let mut walker = SymbolWalker::new();
28    let mut context = Context::new(interner);
29
30    walker.walk_program(program, &mut context);
31
32    walker.symbols
33}