spb/air Public MIT
AIR — The Language of Accounting.
Python 100%
1# =============================================================================2# Projet : AIR — Accounting Intermediate Representation3# Auteur : Simon-Pierre Boucher4# Contact : contact@spboucher.ai5# Fichier : pass_manager.py6# Description : Pass manager — ordered passes, invariant verified after every pass.7# =============================================================================8"""AIC pass manager.910Runs the pass pipeline in order. After EVERY pass, the double-entry invariant11(per-entry balance + accounting equation) is verified — the accounting12analogue of `opt -verify-each`. Any ERROR diagnostic aborts compilation with13a CompilationError carrying clang-style diagnostics.14"""15from __future__ import annotations1617from aic.diagnostics import CompilationError, Severity18from aic.passes.base import Pass19from aic.unit import CompilationUnit20from core.invariant import verify_entries, verify_equation212223class PassManager:24 def __init__(self, passes: list[Pass]):25 self.passes = passes2627 def run(self, unit: CompilationUnit) -> CompilationUnit:28 for p in self.passes:29 unit.diagnostics.extend(p.run(unit))30 # the permanent invariant: checked after every pass, no exceptions31 unit.diagnostics.extend(verify_entries(unit.entries, p.name))32 unit.diagnostics.extend(verify_equation(unit.entries, p.name))33 if any(d.severity is Severity.ERROR for d in unit.diagnostics):34 raise CompilationError(unit.diagnostics)35 return unit36