| 726 | } |
| 727 | |
| 728 | bool Reader::recoverFromError(TokenType skipUntilToken) { |
| 729 | size_t const errorCount = errors_.size(); |
| 730 | Token skip; |
| 731 | for (;;) { |
| 732 | if (!readToken(skip)) |
| 733 | errors_.resize(errorCount); // discard errors caused by recovery |
| 734 | if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) |
| 735 | break; |
| 736 | } |
| 737 | errors_.resize(errorCount); |
| 738 | return false; |
| 739 | } |
| 740 | |
| 741 | bool Reader::addErrorAndRecover(const String& message, Token& token, |
| 742 | TokenType skipUntilToken) { |