diff --git a/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java b/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java index 09f3fa5d5d..03a5d76cb1 100644 --- a/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java +++ b/src/main/java/com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.java @@ -636,11 +636,11 @@ private final JsonToken _startValue(int ch) throws IOException return _startTrueToken(); case '[': return _startArrayScope(); - case ']': + case INT_RBRACKET: return _closeArrayScope(); case '{': return _startObjectScope(); - case '}': + case INT_RCURLY: return _closeObjectScope(); default: } @@ -676,6 +676,10 @@ private final JsonToken _startValueExpectComma(int ch) throws IOException } _reportUnexpectedChar(ch, "was expecting comma to separate "+_parsingContext.typeDesc()+" entries"); } + + // 17-Sep-2019, tatu: [core#563] Need to call this to update index within array + _parsingContext.expectComma(); + int ptr = _inputPtr; if (ptr >= _inputEnd) { _minorState = MINOR_VALUE_WS_AFTER_COMMA; @@ -722,7 +726,7 @@ private final JsonToken _startValueExpectComma(int ch) throws IOException return _startTrueToken(); case '[': return _startArrayScope(); - case ']': + case INT_RBRACKET: // Was that a trailing comma? if ((_features & FEAT_MASK_TRAILING_COMMA) != 0) { return _closeArrayScope(); @@ -730,7 +734,7 @@ private final JsonToken _startValueExpectComma(int ch) throws IOException break; case '{': return _startObjectScope(); - case '}': + case INT_RCURLY: // Was that a trailing comma? if ((_features & FEAT_MASK_TRAILING_COMMA) != 0) { return _closeObjectScope(); @@ -866,7 +870,7 @@ private final JsonToken _startValueAfterComma(int ch) throws IOException return _startTrueToken(); case '[': return _startArrayScope(); - case ']': + case INT_RBRACKET: // Was that a trailing comma? if ((_features & FEAT_MASK_TRAILING_COMMA) != 0) { return _closeArrayScope(); @@ -874,7 +878,7 @@ private final JsonToken _startValueAfterComma(int ch) throws IOException break; case '{': return _startObjectScope(); - case '}': + case INT_RCURLY: // Was that a trailing comma? if ((_features & FEAT_MASK_TRAILING_COMMA) != 0) { return _closeObjectScope(); @@ -888,7 +892,7 @@ private final JsonToken _startValueAfterComma(int ch) throws IOException protected JsonToken _startUnexpectedValue(boolean leadingComma, int ch) throws IOException { switch (ch) { - case ']': + case INT_RBRACKET: if (!_parsingContext.inArray()) { break; } @@ -902,7 +906,7 @@ protected JsonToken _startUnexpectedValue(boolean leadingComma, int ch) throws I return _valueComplete(JsonToken.VALUE_NULL); } // fall through - case '}': + case INT_RCURLY: // Error: neither is valid at this point; valid closers have // been handled earlier break; @@ -2071,7 +2075,7 @@ private JsonToken _handleOddName(int ch) throws IOException return _finishAposName(0, 0, 0); } break; - case ']': // for better error reporting... + case INT_RBRACKET: // for better error reporting... return _closeArrayScope(); } // allow unquoted names if feature enabled: