| 964 | } |
| 965 | |
| 966 | bool Reader::recoverFromError(TokenType skipUntilToken) { |
| 967 | size_t const errorCount = errors_.size(); |
| 968 | Token skip; |
| 969 | for (;;) { |
| 970 | if (!readToken(skip)) |
| 971 | errors_.resize(errorCount); // discard errors caused by recovery |
| 972 | if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) |
| 973 | break; |
| 974 | } |
| 975 | errors_.resize(errorCount); |
| 976 | return false; |
| 977 | } |
| 978 | |
| 979 | bool Reader::addErrorAndRecover(const String& message, Token& token, |
| 980 | TokenType skipUntilToken) { |