decoder2: improve checker with better EOF detection (#25075)
Some checks failed
Graphics CI / gg-regressions (push) Waiting to run
vlib modules CI / build-module-docs (push) Waiting to run
Shy and PV CI / v-compiles-puzzle-vibes (push) Waiting to run
Sanitized CI / sanitize-undefined-clang (push) Waiting to run
Sanitized CI / sanitize-undefined-gcc (push) Waiting to run
Sanitized CI / tests-sanitize-address-clang (push) Waiting to run
Sanitized CI / sanitize-address-msvc (push) Waiting to run
Sanitized CI / sanitize-address-gcc (push) Waiting to run
Sanitized CI / sanitize-memory-clang (push) Waiting to run
sdl CI / v-compiles-sdl-examples (push) Waiting to run
Time CI / time-linux (push) Waiting to run
Time CI / time-macos (push) Waiting to run
Time CI / time-windows (push) Waiting to run
toml CI / toml-module-pass-external-test-suites (push) Waiting to run
Tools CI / tools-linux (clang) (push) Waiting to run
Tools CI / tools-linux (gcc) (push) Waiting to run
Tools CI / tools-linux (tcc) (push) Waiting to run
Tools CI / tools-macos (clang) (push) Waiting to run
Tools CI / tools-windows (gcc) (push) Waiting to run
Tools CI / tools-windows (msvc) (push) Waiting to run
Tools CI / tools-windows (tcc) (push) Waiting to run
Tools CI / tools-docker-ubuntu-musl (push) Waiting to run
vab CI / vab-compiles-v-examples (push) Waiting to run
vab CI / v-compiles-os-android (push) Waiting to run
json decoder benchmark CI / json-encode-benchmark (push) Has been cancelled
json encoder benchmark CI / json-encode-benchmark (push) Has been cancelled

This commit is contained in:
Larsimusrex 2025-08-09 15:38:58 +02:00 committed by GitHub
parent 9140c9f844
commit a11de7263f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 140 additions and 230 deletions

View file

@ -126,7 +126,7 @@ fn (list &LinkedList[T]) free() {
enum ValueKind {
array
object
string_
string
number
boolean
null
@ -316,7 +316,7 @@ fn (mut decoder Decoder) decode_value[T](mut val T) ! {
$if val is StringDecoder {
struct_info := decoder.current_node.value
if struct_info.value_kind == .string_ {
if struct_info.value_kind == .string {
val.from_json_string(decoder.json[struct_info.position + 1..struct_info.position +
struct_info.length - 1]) or {
decoder.decode_error('${typeof(*val).name}: ${err.msg()}')!
@ -370,7 +370,7 @@ fn (mut decoder Decoder) decode_value[T](mut val T) ! {
$if T.unaliased_typ is string {
string_info := decoder.current_node.value
if string_info.value_kind == .string_ {
if string_info.value_kind == .string {
mut string_buffer := []u8{cap: string_info.length} // might be too long but most json strings don't contain many escape characters anyways
mut buffer_index := 1
@ -542,7 +542,7 @@ fn (mut decoder Decoder) decode_value[T](mut val T) ! {
current_field_info = current_field_info.next
continue
}
.string_ {
.string {
if decoder.current_node.next.value.length == 2 {
current_field_info = current_field_info.next
continue
@ -705,7 +705,7 @@ fn (mut decoder Decoder) decode_value[T](mut val T) ! {
if value_info.value_kind == .number {
unsafe { decoder.decode_number(&val)! }
} else if value_info.value_kind == .string_ {
} else if value_info.value_kind == .string {
// recheck if string contains number
decoder.checker_idx = value_info.position + 1
decoder.check_number()!