Error comments + renaming

trunk
ondra05 2022-07-02 00:27:38 +02:00
parent 18c4791201
commit e61ba2e533
2 changed files with 24 additions and 3 deletions

View File

@ -9,14 +9,32 @@ pub struct Error {
#[derive(Debug)] #[derive(Debug)]
pub enum ErrorKind { pub enum ErrorKind {
/// Parser expected token, but none was available
UnexpectedEoi, UnexpectedEoi,
/// Parser expected certain token, but other one appeared
UnexpectedToken(Token), UnexpectedToken(Token),
/// Attempted to assign to undefined variable
UnknownVariable(String), UnknownVariable(String),
/// Attempted to access banned variable
MeloVariable(String), MeloVariable(String),
TopLevelEnough,
/// Breaking / re-starting loop outside loop
LoopOpOutsideLoop,
/// Rlyeh was executed but host interface's exit
/// doesn't exit the program
NonExitingRlyeh(i32), NonExitingRlyeh(i32),
/// Missing left-hand side expression in binary expression
MissingLhs, MissingLhs,
/// Error when executing BF code
Brian(InterpretError), Brian(InterpretError),
/// IO Error
Io(io::Error), Io(io::Error),
} }
@ -51,7 +69,10 @@ impl Display for ErrorKind {
ErrorKind::UnexpectedToken(token) => write!(f, "unexpected token {:?}", token), ErrorKind::UnexpectedToken(token) => write!(f, "unexpected token {:?}", token),
ErrorKind::UnknownVariable(name) => write!(f, "unknown identifier \"{}\"", name), ErrorKind::UnknownVariable(name) => write!(f, "unknown identifier \"{}\"", name),
ErrorKind::MeloVariable(name) => write!(f, "banned variable \"{}\"", name), ErrorKind::MeloVariable(name) => write!(f, "banned variable \"{}\"", name),
ErrorKind::TopLevelEnough => write!(f, "can only `enough` out of a loop"), ErrorKind::LoopOpOutsideLoop => write!(
f,
"unable to perform loop operation (enough or and enough) outside a loop"
),
&ErrorKind::NonExitingRlyeh(code) => write!(f, "program exited with code {code}"), &ErrorKind::NonExitingRlyeh(code) => write!(f, "program exited with code {code}"),
ErrorKind::Brian(err) => write!(f, "brainfuck error: {}", err), ErrorKind::Brian(err) => write!(f, "brainfuck error: {}", err),
// TODO: give concrete numbers here. // TODO: give concrete numbers here.

View File

@ -124,7 +124,7 @@ impl<H: HostInterface> ExecEnv<H> {
HaltStatus::Enough(span) | HaltStatus::AndAgain(span) => Err(Error { HaltStatus::Enough(span) | HaltStatus::AndAgain(span) => Err(Error {
// It's an error to issue a `enough` outside of a // It's an error to issue a `enough` outside of a
// `loop` statement. // `loop` statement.
kind: ErrorKind::TopLevelEnough, kind: ErrorKind::LoopOpOutsideLoop,
span, span,
}), }),
}?; }?;