Fix scan_expression and compile_dict

This commit is contained in:
harupy 2023-01-15 14:54:58 +09:00
parent 375d592562
commit cb3578dbf2
2 changed files with 14 additions and 13 deletions

View file

@ -885,14 +885,15 @@ impl SymbolTableBuilder {
self.scan_expression(value, ExpressionContext::Load)?;
}
Dict { keys, values } => {
let (packed, unpacked) = values.split_at(keys.len());
for (key, value) in keys.iter().zip(packed) {
if let Some(key) = key {
self.scan_expression(key, context)?;
}
let (packed, unpacked): (Vec<_>, Vec<_>) = keys
.iter()
.zip(values.iter())
.partition(|(key, _)| key.is_some());
for (key, value) in packed {
self.scan_expression(&key.as_ref().unwrap(), context)?;
self.scan_expression(value, context)?;
}
for value in unpacked {
for (_, value) in unpacked {
// dict unpacking marker
self.scan_expression(value, context)?;
}