mirror of
https://github.com/vlang/v.git
synced 2025-09-13 22:42:26 +03:00
more checker restructuring
This commit is contained in:
parent
43be3e4fa3
commit
7ef3d3fc8e
1 changed files with 67 additions and 74 deletions
|
@ -12,7 +12,73 @@ fn (mut checker Decoder) check_json_format() ! {
|
||||||
|
|
||||||
start_idx_position := checker.checker_idx
|
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
|
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() ! {
|
fn (mut checker Decoder) check_string() ! {
|
||||||
// check if the JSON string is a valid string
|
// check if the JSON string is a valid string
|
||||||
if checker.checker_idx == checker.json.len {
|
if checker.checker_idx == checker.json.len {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue