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
pub(crate) mod compile;
pub mod const_eval;
mod convert;
mod function;
mod lexical_map;
mod purity;
pub mod storage;
mod types;
use crate::{
error::CompileError,
semantic_analysis::{TypedProgram, TypedProgramKind},
};
use sway_ir::Context;
use sway_types::span::Span;
pub(crate) use purity::PurityChecker;
pub fn compile_program(program: TypedProgram) -> Result<Context, CompileError> {
let TypedProgram { kind, root, .. } = program;
let mut ctx = Context::default();
match kind {
TypedProgramKind::Script {
main_function,
declarations,
}
| TypedProgramKind::Predicate {
main_function,
declarations,
} => compile::compile_script(&mut ctx, main_function, &root.namespace, declarations),
TypedProgramKind::Contract {
abi_entries,
declarations,
} => compile::compile_contract(&mut ctx, abi_entries, &root.namespace, declarations),
TypedProgramKind::Library { .. } => unimplemented!("compile library to ir"),
}?;
ctx.verify()
.map_err(|ir_error| CompileError::InternalOwned(ir_error.to_string(), Span::dummy()))
}