POLISH: Better error reporting for statements.

This commit is contained in:
Jeremy Wall 2018-05-22 19:05:40 -05:00
parent fdd8a35086
commit 79bee4e2b4

View File

@ -755,20 +755,32 @@ fn tuple_to_let(t: (Token, Expression)) -> ParseResult<Statement> {
}))
}
named!(let_statement<TokenIter, Statement, error::Error>,
named!(let_stmt_body<TokenIter, Statement, error::Error>,
map_res!(
do_parse!(
word!("let") >>
name: match_type!(BAREWORD) >>
punct!("=") >>
val: expression >>
punct!(";") >>
(name, val)
),
(name, val)),
tuple_to_let
)
);
named!(let_statement<TokenIter, Statement, error::Error>,
do_parse!(
word!("let") >>
pos: pos >>
stmt: add_return_error!(
nom::ErrorKind::Custom(
error::Error::new(
"Invalid syntax for let binding",
error::ErrorType::ParseError, pos)),
let_stmt_body) >>
(stmt)
)
);
fn tuple_to_import(t: (Token, Token)) -> ParseResult<Statement> {
Ok(Statement::Import(ImportDef {
path: t.0,
@ -776,20 +788,33 @@ fn tuple_to_import(t: (Token, Token)) -> ParseResult<Statement> {
}))
}
named!(import_statement<TokenIter, Statement, error::Error>,
named!(import_stmt_body<TokenIter, Statement, error::Error>,
map_res!(
do_parse!(
word!("import") >>
path: match_type!(STR) >>
word!("as") >>
name: match_type!(BAREWORD) >>
punct!(";") >>
(path, name)
),
do_parse!(
path: match_type!(STR) >>
word!("as") >>
name: match_type!(BAREWORD) >>
punct!(";") >>
(path, name)),
tuple_to_import
)
);
named!(import_statement<TokenIter, Statement, error::Error>,
do_parse!(
word!("import") >>
// past this point we know this is supposed to be an import statement.
pos: pos >>
stmt: add_return_error!(
nom::ErrorKind::Custom(
error::Error::new(
"Invalid syntax for import",
error::ErrorType::ParseError, pos)),
import_stmt_body) >>
(stmt)
)
);
named!(statement<TokenIter, Statement, error::Error>,
do_parse!(
stmt: alt_complete!(