| 381 | |
| 382 | template<class Stream> |
| 383 | bool JsonSkipper<Stream>::SkipObject() { |
| 384 | DCHECK(s_.Peek() == '{'); |
| 385 | s_.Take(); |
| 386 | SkipWhitespace(); |
| 387 | if (Consume('}')) return true; |
| 388 | while (true) { |
| 389 | ERROR_IF_FALSE(s_.Peek() == '"', kParseErrorObjectMissName); |
| 390 | RETURN_IF_FALSE(SkipString()); |
| 391 | SkipWhitespace(); |
| 392 | ERROR_IF_FALSE(Consume(':'), kParseErrorObjectMissColon); |
| 393 | SkipWhitespace(); |
| 394 | RETURN_IF_FALSE(SkipValue()); |
| 395 | SkipWhitespace(); |
| 396 | if (Consume(',')) SkipWhitespace(); |
| 397 | else if (Consume('}')) return true; |
| 398 | else ERROR_IF_FALSE(false, kParseErrorObjectMissCommaOrCurlyBracket); |
| 399 | } |
| 400 | } |
| 401 | |
| 402 | template<class Stream> |
| 403 | bool JsonSkipper<Stream>::SkipArray() { |