use crate::CompilerState;
use leo_ast::{Function, Program, ProgramId, Variant};
use leo_span::Symbol;
use indexmap::{IndexMap, IndexSet};
pub struct CodeGeneratingVisitor<'a> {
pub state: &'a CompilerState,
pub next_register: u64,
pub current_function: Option<&'a Function>,
pub variable_mapping: IndexMap<Symbol, String>,
pub composite_mapping: IndexMap<Symbol, (bool, String)>,
pub global_mapping: IndexMap<Symbol, String>,
pub variant: Option<Variant>,
pub program: &'a Program,
pub program_id: Option<ProgramId>,
pub finalize_caller: Option<Symbol>,
pub next_label: u64,
pub conditional_depth: u64,
pub internal_record_inputs: IndexSet<String>,
}
impl CodeGeneratingVisitor<'_> {
pub fn next_register(&mut self) -> String {
self.next_register += 1;
format!("r{}", self.next_register - 1)
}
}