| 912 | } |
| 913 | |
| 914 | bool Reader::recoverFromError(TokenType skipUntilToken) { |
| 915 | int errorCount = int(errors_.size()); |
| 916 | Token skip; |
| 917 | for (;;) { |
| 918 | if (!readToken(skip)) |
| 919 | errors_.resize(errorCount); // discard errors caused by recovery |
| 920 | if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) |
| 921 | break; |
| 922 | } |
| 923 | errors_.resize(errorCount); |
| 924 | return false; |
| 925 | } |
| 926 | |
| 927 | bool Reader::addErrorAndRecover(const std::string &message, |
| 928 | Token &token, |