1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use super::super::parser::ast::AST;
use super::super::parser::tokenizer::Tokenizer;
use super::display_program_error::display_program_error;
use super::program::Program;
pub fn create_program<T: ToString>(
source: T,
location: Option<T>,
) -> Result<Program, Box<dyn std::error::Error>> {
let location_val = location.map(|t| t.to_string());
let result_program: Result<Program, Box<dyn std::error::Error>> = try {
Program {
location: location_val.clone(),
source: source.to_string(),
ast: AST::parse(Tokenizer::parse(source.to_string())?)?,
}
};
display_program_error(result_program, source, location_val)
}