mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
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
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:
parent
9140c9f844
commit
a11de7263f
9 changed files with 140 additions and 230 deletions
|
@ -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()!
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue