feat(frontends/lean/builtin_exprs): better error synchronization for 'begin...end' blocks
This commit is contained in:
parent
aba158dbd4
commit
9438366e37
1 changed files with 103 additions and 88 deletions
|
@ -147,6 +147,7 @@ static expr parse_begin_end_core(parser & p, pos_info const & pos, name const &
|
||||||
tacs.push_back(tac);
|
tacs.push_back(tac);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
while (!p.curr_is_token(end_token)) {
|
while (!p.curr_is_token(end_token)) {
|
||||||
if (first) {
|
if (first) {
|
||||||
first = false;
|
first = false;
|
||||||
|
@ -240,6 +241,20 @@ static expr parse_begin_end_core(parser & p, pos_info const & pos, name const &
|
||||||
add_tac(t, pos);
|
add_tac(t, pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (exception & ex) {
|
||||||
|
if (end_token == get_end_tk()) {
|
||||||
|
// When the end_token is 'end', the default parser
|
||||||
|
// sync_command does not work well because it will
|
||||||
|
// interpret 'end' as a synchronization point because 'end' is also a command.
|
||||||
|
while (!p.curr_is_token(get_end_tk())) {
|
||||||
|
if (p.curr() == scanner::token_kind::Eof)
|
||||||
|
ex.rethrow();
|
||||||
|
p.next();
|
||||||
|
}
|
||||||
|
p.next(); // consume 'end'
|
||||||
|
}
|
||||||
|
ex.rethrow();
|
||||||
|
}
|
||||||
auto end_pos = p.pos();
|
auto end_pos = p.pos();
|
||||||
p.next();
|
p.next();
|
||||||
if (tacs.empty()) {
|
if (tacs.empty()) {
|
||||||
|
|
Loading…
Reference in a new issue