Skip to content
Snippets Groups Projects
lib.rs 1.26 KiB
Newer Older
Louis's avatar
Louis committed
mod error;
mod lexer;
mod parser;
Louis's avatar
Louis committed
mod pratt;
Louis's avatar
Louis committed
pub mod runtime;
Louis's avatar
Louis committed
mod utilities;
Louis's avatar
Louis committed

pub use error::{
	format_forge_error, print_forge_error, ForgeError, ForgeErrorKind, ParseError, ParseErrorKind,
	TokenError, TokenErrorKind,
};
Louis's avatar
Louis committed
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
				);
			}
		}
	};
}