anchor.diff:        _requireKey = true;
         return;
       } else if (_weAreInObject && _requireComma) {
  -      _parserAssertNotReached("Expected } or ,");
  +      _parserAssertNotReached("Expected } or ,", outputController);
  +      _subParser = _SubParser.errored;
       } else if (_weAreInObject && _requireColon && ch == 58) {
         _requireColon = false;
         return;
       } else if (_weAreInObject && _requireColon) {
  -      _parserAssertNotReached("Expected :");
  +      _parserAssertNotReached("Expected :", outputController);
  +      _subParser = _SubParser.errored;
       } else if (_weAreInObject && _requireKey && ch == 34) {
         _stringIsReady = new Completer.sync();
         _stringBuffer = new StringBuffer();
  
positive.code: 
          _subParser = _SubParser.top;
          _rawTokenResult = null;
        }).catchError(outputController.addError);
        return;
      } else if (<int>[45, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57].contains(ch)) {
        _numberResult = new StringBuffer();
  
negative.code:           JsonStreamingEventType eventType) =>
        new JsonStreamingEvent(object, currentPath, currentContext, eventType);
  
    void _parserAssertNotReached(String message, StreamController<JsonStreamingEvent> outputController) {
      outputController.addError(new StateError(message));
      _subParser = _SubParser.errored;
    }
  
    void _parserAssertNotReachedSync(String message) {
      throw new StateError(message);}
  
    JsonStreamingEvent _makeFinalSymbol(value) {
      if (_weAreInObject) {
  