xee_ir/
compile.rs

1use ahash::HashMapExt;
2use xee_interpreter::{context::StaticContext, error::SpannedResult, interpreter::Program};
3
4use crate::{
5    declaration_compiler::{DeclarationCompiler, ModeIds},
6    ir, FunctionBuilder, FunctionCompiler, Scopes,
7};
8
9pub fn compile_xpath(expr: ir::ExprS, static_context: StaticContext) -> SpannedResult<Program> {
10    let mut program = Program::new(static_context, expr.span);
11    let mut scopes = Scopes::new();
12    let builder = FunctionBuilder::new(&mut program);
13    let empty_mode_ids = ModeIds::new();
14    let mut compiler = FunctionCompiler::new(builder, &mut scopes, &empty_mode_ids);
15    compiler.compile_expr(&expr)?;
16    Ok(program)
17}
18
19pub fn compile_xslt(
20    declarations: ir::Declarations,
21    static_context: StaticContext,
22) -> SpannedResult<Program> {
23    let mut program = Program::new(static_context, (0..0).into());
24    let mut compiler = DeclarationCompiler::new(&mut program);
25    compiler.compile_declarations(&declarations)?;
26    Ok(program)
27}