good error

This commit is contained in:
nora 2022-06-27 12:17:40 +02:00
parent 72fbc4e55a
commit 72687d4167
2 changed files with 12 additions and 4 deletions

View file

@ -120,7 +120,7 @@ impl InterpretCtx {
let is_ok = std::io::stdin().read_exact(slice).is_ok();
*self.reg_mut(Register(0)) = if is_ok { 0 } else { 1 };
}
_ => panic!("invalid interrupt!"),
_ => unreachable!("checked in compiler"),
}
}

View file

@ -102,7 +102,7 @@ impl CompileCtx {
Stmt::Div { to, value }
}
StmtKind::Int { number } => {
if number > 1 {
if number > 2 {
return Err(CompilerError::simple(
"invalid interrupt".to_string(),
p_stmt.span,
@ -155,7 +155,10 @@ impl CompileCtx {
nested.span,
"save the first result in a temporary register".to_string(),
)),
ExprKind::Symbol(_) => todo!("compile to AddrLiteral"),
ExprKind::Symbol(_) => return Err(CompilerError::simple(
"symbol not allowed here".to_owned(),
expr.span,
))
},
}
}
@ -163,7 +166,12 @@ impl CompileCtx {
fn compile_value(&mut self, expr: parser::Expr) -> Result<Value> {
match expr.kind {
ExprKind::Number(n) => Ok(Value::Literal(n)),
ExprKind::Symbol(_) => todo!("compile to Literal"),
ExprKind::Symbol(_) => {
return Err(CompilerError::simple(
"symbol not allowed here".to_owned(),
expr.span,
))
}
_ => Ok(Value::Place(self.compile_place(expr)?)),
}
}