all errors now contain source location

This commit is contained in:
2020-10-06 22:54:34 +02:00
parent d4534c9c66
commit 91573140a4
32 changed files with 400 additions and 322 deletions
+3 -2
View File
@@ -2,6 +2,7 @@ use crsn::asm::error::CrsnError;
use crsn::asm::instr::op::OpKind;
use crsn::asm::parse::arg_parser::TokenParser;
use crsn::module::{CrsnExtension, ParseRes};
use crsn::sexp::SourcePosition;
mod defs;
mod parse;
@@ -21,7 +22,7 @@ impl CrsnExtension for ArithOps {
"arith"
}
fn parse_op<'a>(&self, keyword: &str, args: TokenParser<'a>) -> Result<ParseRes<'a, OpKind>, CrsnError> {
parse::parse(keyword, args)
fn parse_op<'a>(&self, pos: SourcePosition, keyword: &str, args: TokenParser<'a>) -> Result<ParseRes<'a, OpKind>, CrsnError> {
parse::parse(pos, keyword, args)
}
}
+17 -16
View File
@@ -5,8 +5,9 @@ use crsn::asm::parse::arg_parser::TokenParser;
use crsn::module::ParseRes;
use crate::defs::ArithOp;
use crsn::sexp::SourcePosition;
pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<ParseRes<'a, OpKind>, CrsnError> {
pub(crate) fn parse<'a>(pos: SourcePosition, keyword: &str, mut args: TokenParser<'a>) -> Result<ParseRes<'a, OpKind>, CrsnError> {
Ok(ParseRes::ext(match keyword {
"cmp" => {
ArithOp::Compare {
@@ -56,7 +57,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Add requires 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Add requires 2 or 3 arguments".into(), pos));
}
}
}
@@ -79,7 +80,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Sub requires 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Sub requires 2 or 3 arguments".into(), pos));
}
}
}
@@ -102,7 +103,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Mul requires 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Mul requires 2 or 3 arguments".into(), pos));
}
}
}
@@ -129,7 +130,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("DivR requires 3 or 4 arguments".into()));
return Err(CrsnError::Parse("DivR requires 3 or 4 arguments".into(), pos));
}
}
}
@@ -155,7 +156,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Div requires 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Div requires 2 or 3 arguments".into(), pos));
}
}
}
@@ -179,7 +180,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Mod requires 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Mod requires 2 or 3 arguments".into(), pos));
}
}
}
@@ -202,7 +203,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("And requires 2 or 3 arguments".into()));
return Err(CrsnError::Parse("And requires 2 or 3 arguments".into(), pos));
}
}
}
@@ -225,7 +226,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Or requires 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Or requires 2 or 3 arguments".into(), pos));
}
}
}
@@ -248,7 +249,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Xor requires 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Xor requires 2 or 3 arguments".into(), pos));
}
}
}
@@ -269,7 +270,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Cpl requires 1 or 2 arguments".into()));
return Err(CrsnError::Parse("Cpl requires 1 or 2 arguments".into(), pos));
}
}
}
@@ -300,7 +301,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Rol requires 1, 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Rol requires 1, 2 or 3 arguments".into(), pos));
}
}
}
@@ -331,7 +332,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Ror requires 1, 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Ror requires 1, 2 or 3 arguments".into(), pos));
}
}
}
@@ -362,7 +363,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Lsl requires 1, 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Lsl requires 1, 2 or 3 arguments".into(), pos));
}
}
}
@@ -393,7 +394,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Lsr requires 1, 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Lsr requires 1, 2 or 3 arguments".into(), pos));
}
}
}
@@ -424,7 +425,7 @@ pub(crate) fn parse<'a>(keyword: &str, mut args: TokenParser<'a>) -> Result<Pars
}
}
_ => {
return Err(CrsnError::Parse("Asr requires 1, 2 or 3 arguments".into()));
return Err(CrsnError::Parse("Asr requires 1, 2 or 3 arguments".into(), pos));
}
}
}