summaryrefslogtreecommitdiff
path: root/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt')
-rw-r--r--formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt11
1 files changed, 7 insertions, 4 deletions
diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt b/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt
index 7c01daa8..9cb9bb3c 100644
--- a/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt
+++ b/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonTreeReader.kt
@@ -13,6 +13,7 @@ internal class JsonTreeReader(
private val lexer: AbstractJsonLexer
) {
private val isLenient = configuration.isLenient
+ private val trailingCommaAllowed = configuration.allowTrailingComma
private var stackDepth = 0
private fun readObject(): JsonElement = readObjectImpl {
@@ -44,8 +45,9 @@ internal class JsonTreeReader(
if (lastToken == TC_BEGIN_OBJ) { // Case of empty object
lexer.consumeNextToken(TC_END_OBJ)
} else if (lastToken == TC_COMMA) { // Trailing comma
- lexer.fail("Unexpected trailing comma")
- }
+ if (!trailingCommaAllowed) lexer.invalidTrailingComma()
+ lexer.consumeNextToken(TC_END_OBJ)
+ } // else unexpected token?
return JsonObject(result)
}
@@ -66,7 +68,8 @@ internal class JsonTreeReader(
if (lastToken == TC_BEGIN_LIST) { // Case of empty object
lexer.consumeNextToken(TC_END_LIST)
} else if (lastToken == TC_COMMA) { // Trailing comma
- lexer.fail("Unexpected trailing comma")
+ if (!trailingCommaAllowed) lexer.invalidTrailingComma("array")
+ lexer.consumeNextToken(TC_END_LIST)
}
return JsonArray(result)
}
@@ -101,7 +104,7 @@ internal class JsonTreeReader(
result
}
TC_BEGIN_LIST -> readArray()
- else -> lexer.fail("Cannot begin reading element, unexpected token: $token")
+ else -> lexer.fail("Cannot read Json element because of unexpected ${tokenDescription(token)}")
}
}