nlcc/semantic_analysis/
mod.rs

1mod case_collection;
2mod goto;
3mod loop_labeling;
4mod name_resolution;
5mod semanalysis_error;
6mod typecheck;
7
8use crate::ast::*;
9use case_collection::collect_cases;
10use goto::ensure_goto_correctness;
11use loop_labeling::label_loops;
12use name_resolution::name_resolution;
13use typecheck::check_types;
14
15pub use semanalysis_error::{Result, SemAnalysisError};
16pub use typecheck::{StaticInit, SYM_TABLE};
17
18// Order of stages must be:
19// name_resolution > [goto >] check_types >
20// .. > label_loops > .. > collect_cases > ..
21pub fn validate(ast: Ast) -> Result<Ast> {
22    let mut resolved = name_resolution(ast)?;
23    ensure_goto_correctness(&mut resolved)?;
24
25    check_types(resolved)
26        .and_then(label_loops)
27        .and_then(collect_cases)
28}