Add "production" line to parse debug output
And also add a .next() in the parser that should've been there
This commit is contained in:
parent
28056b1f89
commit
904d5c4431
@ -825,6 +825,7 @@ impl Parser {
|
|||||||
let lhs = self.prefix_expr()?;
|
let lhs = self.prefix_expr()?;
|
||||||
let ref next = self.token_handler.peek_kind();
|
let ref next = self.token_handler.peek_kind();
|
||||||
Ok(if let Some(op) = BinOp::from_sigil_token(next) {
|
Ok(if let Some(op) = BinOp::from_sigil_token(next) {
|
||||||
|
self.token_handler.next();
|
||||||
Discriminator::BinOp(lhs, op)
|
Discriminator::BinOp(lhs, op)
|
||||||
} else {
|
} else {
|
||||||
Discriminator::Simple(lhs)
|
Discriminator::Simple(lhs)
|
||||||
|
@ -127,12 +127,18 @@ fn format_parse_error(error: parsing::ParseError, handle: &mut Schala) -> String
|
|||||||
let line_num_digits = format!("{}", line_num).chars().count();
|
let line_num_digits = format!("{}", line_num).chars().count();
|
||||||
let space_padding = " ".repeat(line_num_digits);
|
let space_padding = " ".repeat(line_num_digits);
|
||||||
|
|
||||||
|
let production = match error.production_name {
|
||||||
|
Some(n) => format!("\n(from production \"{}\")", n),
|
||||||
|
None => "".to_string()
|
||||||
|
};
|
||||||
|
|
||||||
format!(r#"
|
format!(r#"
|
||||||
{error_msg}
|
{error_msg}{production}
|
||||||
{space_padding} |
|
{space_padding} |
|
||||||
{line_num} | {}
|
{line_num} | {}
|
||||||
{space_padding} | {}
|
{space_padding} | {}
|
||||||
"#, line_from_program, location_pointer, error_msg=error.msg, space_padding=space_padding, line_num=line_num)
|
"#, line_from_program, location_pointer, error_msg=error.msg, space_padding=space_padding, line_num=line_num, production=production
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn symbol_table(input: ast::AST, handle: &mut Schala, comp: Option<&mut PassDebugArtifact>) -> Result<ast::AST, String> {
|
fn symbol_table(input: ast::AST, handle: &mut Schala, comp: Option<&mut PassDebugArtifact>) -> Result<ast::AST, String> {
|
||||||
|
Loading…
Reference in New Issue
Block a user