mod error; mod lexer; mod parser; pub mod runtime; pub use error::{ format_forge_error, print_forge_error, ForgeError, ForgeErrorKind, ParseError, ParseErrorKind, TokenError, TokenErrorKind, }; pub mod parse { pub use super::lexer::{script_to_tokens, ScriptToken, ScriptTokenType}; pub use super::parser::ast; pub use super::parser::{parse_expression, parse_program}; } #[cfg(test)] #[macro_export] macro_rules! map_result { ($val: expr, $with: expr) => { match $val { Ok((remainder, token)) => $with(remainder, token), Err(nom::Err::Incomplete(_)) => panic!("Incorrect error type"), Err(nom::Err::Failure(err)) | Err(nom::Err::Error(err)) => { panic!( "At [{}:{}]: {}; Value ||{}||", &err.input.location_line(), &err.input.get_column(), &err.code.description(), &err.input ); } } }; ($val: expr, $with: expr, $printable: expr) => { match $val { Ok((remainder, token)) => $with(remainder, token), Err(nom::Err::Incomplete(_)) => panic!("Incorrect error type"), Err(nom::Err::Failure(err)) | Err(nom::Err::Error(err)) => { panic!( "At [{}:{}]: {}; Value {}", &err.input.location_line(), &err.input.get_column(), &err.code.description(), $printable ); } } }; }