forked from MightyPork/crsn
all errors now contain source location
This commit is contained in:
@@ -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
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user