1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 04:38:11 +00:00

LibJS: Only set element in array literal to an empty value if it's null

This avoids an unnecessary empty load that immediately gets overridden.

For example, `[1,,]` would appear as:
[   0] EnterScope
[  10] LoadImmediate value:<empty>
[  28] LoadImmediate value:1
[  40] Store dst:$1
[  48] LoadImmediate value:<empty>
[  60] Store dst:$2
[  68] NewArray, elements:[$1,$2]

But now appears as:
[   0] EnterScope
[  10] LoadImmediate value:1
[  28] Store dst:$1
[  30] LoadImmediate value:<empty>
[  48] Store dst:$2
[  50] NewArray, elements:[$1,$2]
This commit is contained in:
Luke 2021-06-09 04:43:13 +01:00 committed by Andreas Kling
parent 01e8f0889a
commit 597e0d95fe

View file

@ -462,7 +462,6 @@ void ArrayExpression::generate_bytecode(Bytecode::Generator& generator) const
{
Vector<Bytecode::Register> element_regs;
for (auto& element : m_elements) {
generator.emit<Bytecode::Op::LoadImmediate>(Value {});
if (element) {
element->generate_bytecode(generator);
@ -470,6 +469,8 @@ void ArrayExpression::generate_bytecode(Bytecode::Generator& generator) const
TODO();
continue;
}
} else {
generator.emit<Bytecode::Op::LoadImmediate>(Value {});
}
auto element_reg = generator.allocate_register();
generator.emit<Bytecode::Op::Store>(element_reg);