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}