#[doc(inline)]
pub(super) use branches::Branches;
#[doc(inline)]
pub(super) use expression::ExpressionFolder;
#[doc(inline)]
pub(super) use global::Global;
#[doc(inline)]
pub(super) use statements::Statements;
use crate::ast_lowering::error::Error;
use crate::ast_lowering::name_resolution::Resolver;
use crate::symbol_table::SymbolDeclaration;
use crate::{Ast, Hir};
#[doc(hidden)]
mod branches;
#[doc(hidden)]
mod expression;
#[doc(hidden)]
mod global;
#[doc(hidden)]
mod statements;
pub trait DeclarationHandler {
fn handle_declaration(&mut self, fold: &mut Fold<'_>, declaration: SymbolDeclaration);
}
impl DeclarationHandler for () {
fn handle_declaration(&mut self, _: &mut Fold<'_>, _: SymbolDeclaration) {}
}
pub struct Fold<'lt> {
pub resolver: Resolver<'lt>,
pub errors: Vec<Error>,
pub hir: Hir,
pub ast: &'lt Ast,
}
impl<'lt> Fold<'lt> {
pub fn error(&mut self, error: Error) {
self.errors.push(error)
}
}
bitflags! {
pub struct VerilogContext: u8{
const CONSTANT = 0b0000_0001;
const CONDITIONAL = 0b0000_0010;
const FUNCTION = 0b0000_1000;
}
}