use crate::ast::Expr;
use crate::diagnostics::Spanned;
use std::collections::HashMap;
#[derive(Debug, Clone)]
pub struct ControlFlowGraph {
pub blocks: HashMap<String, BasicBlock>,
pub entry: String,
pub exits: Vec<String>,
pub dominators: HashMap<String, String>,
}
#[derive(Debug, Clone)]
pub struct BasicBlock {
pub id: String,
pub expressions: Vec<Spanned<Expr>>,
pub successors: Vec<String>,
pub predecessors: Vec<String>,
}
impl ControlFlowGraph {
pub fn new() -> Self {
Self {
blocks: HashMap::new(),
entry: String::new(),
exits: Vec::new(),
dominators: HashMap::new(),
}
}
}
impl Default for ControlFlowGraph {
fn default() -> Self {
Self::new()
}
}