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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use crate::{ir::Module, ty::Type, value::TimeValue};
mod reader;
mod writer;
pub fn write_module(sink: impl std::io::Write, module: &Module) {
writer::Writer::new(sink).write_module(module).unwrap();
}
pub fn write_module_string(module: &Module) -> String {
let mut asm = vec![];
write_module(&mut asm, &module);
String::from_utf8(asm).expect("writer should emit proper utf8")
}
pub fn parse_type(input: impl AsRef<str>) -> Result<Type, String> {
reader::TypeParser::new()
.parse(input.as_ref())
.map_err(|e| format!("{}", e))
}
pub fn parse_time(input: impl AsRef<str>) -> Result<TimeValue, String> {
reader::TimeValueParser::new()
.parse(input.as_ref())
.map_err(|e| format!("{}", e))
}
pub fn parse_module(input: impl AsRef<str>) -> Result<crate::ir::Module, String> {
reader::ModuleParser::new()
.parse(input.as_ref())
.map_err(|e| format!("{}", e))
}