more checker restructuring

This commit is contained in:
Larsimusrex 2025-08-04 21:24:02 +02:00
parent 43be3e4fa3
commit 7ef3d3fc8e

View file

@ -12,7 +12,73 @@ fn (mut checker Decoder) check_json_format() ! {
start_idx_position := checker.checker_idx
mut actual_value_info_pointer := checker.get_value_kind()!
mut actual_value_info_pointer := unsafe { &ValueInfo(nil) }
match checker.json[checker.checker_idx] {
`"` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .string_
})
actual_value_info_pointer = checker.values_info.last()
checker.check_string()!
}
`-`, `0`...`9` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .number
})
actual_value_info_pointer = checker.values_info.last()
checker.check_number()!
}
`t`, `f` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .boolean
})
actual_value_info_pointer = checker.values_info.last()
checker.check_boolean()!
}
`n` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .null
})
actual_value_info_pointer = checker.values_info.last()
checker.check_null()!
}
`[` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .array
})
actual_value_info_pointer = checker.values_info.last()
checker.check_array()!
}
`{` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .object
})
actual_value_info_pointer = checker.values_info.last()
checker.check_object()!
}
else {
checker.checker_error('unknown value kind')!
}
}
actual_value_info_pointer.length = checker.checker_idx + 1 - start_idx_position
@ -32,79 +98,6 @@ fn (mut checker Decoder) check_json_format() ! {
}
}
// get_value_kind returns the kind of a JSON value.
fn (mut checker Decoder) get_value_kind() !&ValueInfo {
mut result := unsafe { nil }
match checker.json[checker.checker_idx] {
`"` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .string_
})
result = checker.values_info.last()
checker.check_string()!
}
`-`, `0`...`9` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .number
})
result = checker.values_info.last()
checker.check_number()!
}
`t`, `f` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .boolean
})
result = checker.values_info.last()
checker.check_boolean()!
}
`n` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .null
})
result = checker.values_info.last()
checker.check_null()!
}
`[` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .array
})
result = checker.values_info.last()
checker.check_array()!
}
`{` {
checker.values_info.push(ValueInfo{
position: checker.checker_idx
value_kind: .object
})
result = checker.values_info.last()
checker.check_object()!
}
else {
checker.checker_error('unknown value kind')!
}
}
return result
}
fn (mut checker Decoder) check_string() ! {
// check if the JSON string is a valid string
if checker.checker_idx == checker.json.len {