(tk: &mut Tokenizer, ctx: &LoadCtx)
| 74 | } |
| 75 | |
| 76 | fn parse_array(tk: &mut Tokenizer, ctx: &LoadCtx) -> Result<Handle> { |
| 77 | let list = Handle::new_list()?; |
| 78 | let first = tk.next_token().map_err(to_pdk_err)?; |
| 79 | if matches!(first, Token::RBracket) { return Ok(list); } |
| 80 | let mut current = first; |
| 81 | loop { |
| 82 | let item = parse_value_with(tk, current, ctx)?; |
| 83 | let _ = list.call("append", &[item.raw()])?; |
| 84 | match tk.next_token().map_err(to_pdk_err)? { |
| 85 | Token::Comma => current = tk.next_token().map_err(to_pdk_err)?, |
| 86 | Token::RBracket => return Ok(list), |
| 87 | _ => return Err(value_err(tk.pos(), "expected ',' or ']' in array")), |
| 88 | } |
| 89 | } |
| 90 | } |
| 91 | |
| 92 | fn parse_object(tk: &mut Tokenizer, ctx: &LoadCtx) -> Result<Handle> { |
| 93 | // `object_pairs_hook` wins over `object_hook` per CPython spec: gather (key, value) pairs and call the hook on them, skipping dict build. |
no test coverage detected