use oxc_ecmascript::constant_evaluation::ConstantValue;
use oxc_index::IndexVec;
use oxc_syntax::{scope::ScopeId, symbol::SymbolId};
#[derive(Debug)]
pub struct SymbolValue<'a> {
pub initialized_constant: Option<ConstantValue<'a>>,
pub exported: bool,
pub read_references_count: u32,
pub write_references_count: u32,
pub member_write_target_read_count: u32,
pub is_fresh_value: bool,
pub scope_id: ScopeId,
}
#[derive(Debug)]
pub struct SymbolValues<'a> {
values: IndexVec<SymbolId, Option<SymbolValue<'a>>>,
}
impl<'a> SymbolValues<'a> {
pub(crate) fn new(len: usize) -> Self {
let mut values = IndexVec::with_capacity(len);
values.resize_with(len, || None);
Self { values }
}
pub fn reset(&mut self) {
for slot in &mut self.values {
*slot = None;
}
}
#[inline]
pub fn init_value(&mut self, symbol_id: SymbolId, symbol_value: SymbolValue<'a>) {
self.values[symbol_id] = Some(symbol_value);
}
#[inline]
pub fn get_symbol_value(&self, symbol_id: SymbolId) -> Option<&SymbolValue<'a>> {
self.values.get(symbol_id)?.as_ref()
}
}