| 942 | } |
| 943 | |
| 944 | bool Reader::recoverFromError(TokenType skipUntilToken) { |
| 945 | int errorCount = int(errors_.size()); |
| 946 | Token skip; |
| 947 | for (;;) { |
| 948 | if (!readToken(skip)) |
| 949 | errors_.resize(errorCount); // discard errors caused by recovery |
| 950 | if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) |
| 951 | break; |
| 952 | } |
| 953 | errors_.resize(errorCount); |
| 954 | return false; |
| 955 | } |
| 956 | |
| 957 | bool Reader::addErrorAndRecover(const std::string& message, |
| 958 | Token& token, |