Skip to content

Commit 5c5b97e

Browse files
committed
Do not eat first token on syntax error when parsing expression
1 parent 8ab604c commit 5c5b97e

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

vhdl_lang/src/syntax/expression.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,11 +507,15 @@ fn parse_expr_initial_token(
507507
/// 7. multiplying_operator: * | / | mod | rem
508508
/// 8. misc_operator: ** | abs | not
509509
pub fn parse_expression(stream: &mut TokenStream) -> ParseResult<WithPos<Expression>> {
510+
let state = stream.state();
510511
let token = stream.expect()?;
511-
parse_expression_initial_token(stream, token)
512+
parse_expression_initial_token(stream, token).map_err(|err| {
513+
stream.set_state(state);
514+
err
515+
})
512516
}
513517

514-
pub fn parse_expression_initial_token(
518+
fn parse_expression_initial_token(
515519
stream: &mut TokenStream,
516520
token: Token,
517521
) -> ParseResult<WithPos<Expression>> {

vhdl_lang/src/syntax/names.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use super::common::ParseResult;
88
/// LRM 8. Names
9-
use super::expression::{parse_expression, parse_expression_initial_token};
9+
use super::expression::parse_expression;
1010
use super::subprogram::parse_signature;
1111
use super::subtype_indication::parse_subtype_indication;
1212
use super::tokens::{Kind::*, Token, TokenStream};
@@ -157,11 +157,12 @@ fn assoc_to_expression(assoc: AssociationElement) -> ParseResult<WithPos<Express
157157
}
158158

159159
fn parse_actual_part(stream: &mut TokenStream) -> ParseResult<WithPos<ActualPart>> {
160-
let token = stream.expect()?;
160+
let token = stream.peek_expect()?;
161161
if token.kind == Open {
162+
stream.move_after(&token);
162163
Ok(WithPos::from(ActualPart::Open, token))
163164
} else {
164-
Ok(parse_expression_initial_token(stream, token)?.map_into(ActualPart::Expression))
165+
Ok(parse_expression(stream)?.map_into(ActualPart::Expression))
165166
}
166167
}
167168

0 commit comments

Comments
 (0)