swamp_script/
lib.rs

1/*
2 * Copyright (c) Peter Bjorklund. All rights reserved. https://github.com/swamp/script
3 * Licensed under the MIT License. See LICENSE in the project root for license information.
4 */
5use std::path::Path;
6use swamp_script_analyzer::prelude::ResolveError;
7use swamp_script_analyzer::prelude::ResolvedProgram;
8use swamp_script_dep_loader::{
9    parse_dependant_modules_and_resolve, DepLoaderError, DependencyParser, ParseModule,
10};
11use swamp_script_eval_loader::resolve_program;
12use swamp_script_source_map::SourceMap;
13pub mod prelude;
14
15#[derive(Debug)]
16pub enum ScriptResolveError {
17    ResolveError(ResolveError),
18    DepLoaderError(DepLoaderError),
19}
20
21impl From<ResolveError> for ScriptResolveError {
22    fn from(err: ResolveError) -> Self {
23        Self::ResolveError(err)
24    }
25}
26
27impl From<DepLoaderError> for ScriptResolveError {
28    fn from(err: DepLoaderError) -> Self {
29        Self::DepLoaderError(err)
30    }
31}
32
33pub fn compile_and_resolve(
34    root_path: &Path,
35    module_path: &[String],
36    parse_module: ParseModule,
37    source_map: &mut SourceMap,
38) -> Result<ResolvedProgram, ScriptResolveError> {
39    let mut dependency_parser = DependencyParser::new();
40    dependency_parser.add_ast_module(module_path.to_vec(), parse_module);
41
42    let module_paths_in_order = parse_dependant_modules_and_resolve(
43        root_path.to_owned(),
44        module_path.to_vec(),
45        &mut dependency_parser,
46        source_map,
47    )?;
48
49    let mut resolved_program = ResolvedProgram::new();
50    resolve_program(
51        &mut resolved_program.state,
52        &mut resolved_program.modules,
53        source_map,
54        &module_paths_in_order,
55        &dependency_parser,
56    )?;
57
58    Ok(resolved_program)
59}