1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use std::rc::Rc;
pub mod parser;
pub mod ast;
pub mod passes;
use ast::Node;
pub fn run_compiler_frontend<'a>(source: &'a str) -> Vec<crate::backend::Ast<'a>> {
use crate::backend;
let children = parser::parse_source(source);
let children = passes::to_unnormalized_backend_ir(children);
let transfomer = backend::ast::ChildListTransformer {
parameters: Rc::new(std::convert::identity),
block: Rc::new(passes::normalize_ir),
rewrite_rules: Rc::new(std::convert::identity),
marker: std::marker::PhantomData
};
let node = backend::Ast::new_fragment(children);
let node = node.child_list_transformer(Rc::new(transfomer));
node.into_fragment()
}
pub fn run_highlighter<'a>(source: &'a str) -> Vec<ast::Highlight<'a>> {
let children = parser::parse_source(source);
let children = Node::new_fragment(children);
children.into_highlight_ranges(None)
}