diff --git a/ablescript/src/error.rs b/ablescript/src/error.rs index 321ec18c..195a271d 100644 --- a/ablescript/src/error.rs +++ b/ablescript/src/error.rs @@ -9,14 +9,32 @@ pub struct Error { #[derive(Debug)] pub enum ErrorKind { + /// Parser expected token, but none was available UnexpectedEoi, + + /// Parser expected certain token, but other one appeared UnexpectedToken(Token), + + /// Attempted to assign to undefined variable UnknownVariable(String), + + /// Attempted to access banned variable 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), + + /// Missing left-hand side expression in binary expression MissingLhs, + + /// Error when executing BF code Brian(InterpretError), + + /// IO Error Io(io::Error), } @@ -51,7 +69,10 @@ impl Display for ErrorKind { ErrorKind::UnexpectedToken(token) => write!(f, "unexpected token {:?}", token), ErrorKind::UnknownVariable(name) => write!(f, "unknown identifier \"{}\"", 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::Brian(err) => write!(f, "brainfuck error: {}", err), // TODO: give concrete numbers here. diff --git a/ablescript/src/interpret.rs b/ablescript/src/interpret.rs index 82c3c36c..49ebc9ab 100644 --- a/ablescript/src/interpret.rs +++ b/ablescript/src/interpret.rs @@ -124,7 +124,7 @@ impl ExecEnv { HaltStatus::Enough(span) | HaltStatus::AndAgain(span) => Err(Error { // It's an error to issue a `enough` outside of a // `loop` statement. - kind: ErrorKind::TopLevelEnough, + kind: ErrorKind::LoopOpOutsideLoop, span, }), }?;