slang_frontend/semantic_analysis/analyzer_modules/
symbol_resolver.rs1use slang_shared::{CompilationContext, Symbol, SymbolKind};
2use super::super::traits::SymbolResolver;
3
4pub struct ContextSymbolResolver<'a> {
10 context: &'a CompilationContext,
11}
12
13impl<'a> ContextSymbolResolver<'a> {
14 pub fn new(context: &'a CompilationContext) -> Self {
19 Self { context }
20 }
21}
22
23impl<'a> SymbolResolver for ContextSymbolResolver<'a> {
24 fn resolve_variable(&self, name: &str) -> Option<&Symbol> {
25 self.context.lookup_symbol(name)
26 .filter(|symbol| symbol.kind() == SymbolKind::Variable)
27 }
28
29 fn resolve_function(&self, name: &str) -> Option<&Symbol> {
30 self.context.lookup_symbol(name)
31 .filter(|symbol| symbol.kind() == SymbolKind::Function)
32 }
33
34 fn resolve_value(&self, name: &str) -> Option<&Symbol> {
35 self.context.lookup_symbol(name)
36 .filter(|symbol| matches!(symbol.kind(), SymbolKind::Variable | SymbolKind::Function))
37 }
38}