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!( map_res!(
do_parse!( do_parse!(
word!("let") >>
name: match_type!(BAREWORD) >> name: match_type!(BAREWORD) >>
punct!("=") >> punct!("=") >>
val: expression >> val: expression >>
punct!(";") >> punct!(";") >>
(name, val) (name, val)),
),
tuple_to_let 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> { fn tuple_to_import(t: (Token, Token)) -> ParseResult<Statement> {
Ok(Statement::Import(ImportDef { Ok(Statement::Import(ImportDef {
path: t.0, 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!( map_res!(
do_parse!( do_parse!(
word!("import") >> path: match_type!(STR) >>
path: match_type!(STR) >> word!("as") >>
word!("as") >> name: match_type!(BAREWORD) >>
name: match_type!(BAREWORD) >> punct!(";") >>
punct!(";") >> (path, name)),
(path, name)
),
tuple_to_import 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>, named!(statement<TokenIter, Statement, error::Error>,
do_parse!( do_parse!(
stmt: alt_complete!( stmt: alt_complete!(