//! Compilation process, from AST to Sema to Sequences of Insts. use std::path::Path; use crate::error::Errors; use crate::{ast, codegen, sema}; /// Compile the given AST definitions into Rust source code. pub fn compile(defs: &ast::Defs, options: &codegen::CodegenOptions) -> Result { let mut typeenv = sema::TypeEnv::from_ast(defs)?; let termenv = sema::TermEnv::from_ast(&mut typeenv, defs)?; let terms = crate::overlap::check(&typeenv, &termenv)?; Ok(codegen::codegen(&typeenv, &termenv, &terms, options)) } /// Compile the given files into Rust source code. pub fn from_files>( inputs: impl IntoIterator, options: &codegen::CodegenOptions, ) -> Result { let lexer = crate::lexer::Lexer::from_files(inputs)?; let defs = crate::parser::parse(lexer)?; compile(&defs, options) }