
impl From<ParseError> for LoadError {
    fn from(error: ParseError) -> LoadError {
        LoadError::ParseError(error)
    }
}

impl Program {
    pub fn load(source: String) -> Result<Program, LoadError> {
        let mut defines = HashMap::<String, String>::default();
        let source = preprocess(source, &mut defines)?;

        let lexer = LexerContext::lex(&source, &defines);
