Skip to content

Commit b31b08a

Browse files
committed
Simplify compile_dict
1 parent 15228f4 commit b31b08a

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

compiler/codegen/src/compile.rs

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1991,23 +1991,17 @@ impl Compiler {
19911991
keys: &[Option<ast::Expr>],
19921992
values: &[ast::Expr],
19931993
) -> CompileResult<()> {
1994-
let mut size = 0;
1995-
let (packed, unpacked): (Vec<_>, Vec<_>) = keys
1996-
.iter()
1997-
.zip(values.iter())
1998-
.partition(|(k, _)| k.is_some());
1999-
for (key, value) in packed {
2000-
self.compile_expression(key.as_ref().unwrap())?;
2001-
self.compile_expression(value)?;
2002-
size += 1;
2003-
}
2004-
emit!(self, Instruction::BuildMap { size });
2005-
2006-
for (_, value) in unpacked {
2007-
self.compile_expression(value)?;
2008-
emit!(self, Instruction::DictUpdate);
1994+
emit!(self, Instruction::BuildMap { size: 0 });
1995+
for (key, value) in keys.iter().zip(values.iter()) {
1996+
if let Some(key) = key {
1997+
self.compile_expression(key)?;
1998+
self.compile_expression(value)?;
1999+
emit!(self, Instruction::MapAdd { i: 0 });
2000+
} else {
2001+
self.compile_expression(value)?;
2002+
emit!(self, Instruction::DictUpdate);
2003+
}
20092004
}
2010-
20112005
Ok(())
20122006
}
20132007

0 commit comments

Comments
 (0)