in src/deserialize/backend/yyjson.rs [195:236]
fn populate_yy_array(list: *mut pyo3_ffi::PyObject, elem: *mut yyjson_val) {
unsafe {
let len = unsafe_yyjson_get_len(elem);
assume!(len >= 1);
let mut next = unsafe_yyjson_get_first(elem);
let mut dptr = (*(list as *mut pyo3_ffi::PyListObject)).ob_item;
for _ in 0..len {
let val = next;
if unlikely!(unsafe_yyjson_is_ctn(val)) {
next = unsafe_yyjson_get_next_container(val);
if is_yyjson_tag!(val, TAG_ARRAY) {
let pyval = ffi!(PyList_New(unsafe_yyjson_get_len(val) as isize));
append_to_list!(dptr, pyval);
if unsafe_yyjson_get_len(val) > 0 {
populate_yy_array(pyval, val);
}
} else {
let pyval = ffi!(_PyDict_NewPresized(unsafe_yyjson_get_len(val) as isize));
append_to_list!(dptr, pyval);
if unsafe_yyjson_get_len(val) > 0 {
populate_yy_object(pyval, val);
}
}
} else {
next = unsafe_yyjson_get_next_non_container(val);
let pyval = match ElementType::from_tag(val) {
ElementType::String => parse_yy_string(val),
ElementType::Uint64 => parse_yy_u64(val),
ElementType::Int64 => parse_yy_i64(val),
ElementType::Double => parse_yy_f64(val),
ElementType::Null => parse_none(),
ElementType::True => parse_true(),
ElementType::False => parse_false(),
ElementType::Array => unreachable_unchecked!(),
ElementType::Object => unreachable_unchecked!(),
};
append_to_list!(dptr, pyval.as_ptr());
}
}
}
}