mirror of
https://github.com/RGBCube/serenity
synced 2025-07-23 06:07:34 +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:
parent
01e8f0889a
commit
597e0d95fe
1 changed files with 2 additions and 1 deletions
|
@ -462,7 +462,6 @@ void ArrayExpression::generate_bytecode(Bytecode::Generator& generator) const
|
||||||
{
|
{
|
||||||
Vector<Bytecode::Register> element_regs;
|
Vector<Bytecode::Register> element_regs;
|
||||||
for (auto& element : m_elements) {
|
for (auto& element : m_elements) {
|
||||||
generator.emit<Bytecode::Op::LoadImmediate>(Value {});
|
|
||||||
if (element) {
|
if (element) {
|
||||||
element->generate_bytecode(generator);
|
element->generate_bytecode(generator);
|
||||||
|
|
||||||
|
@ -470,6 +469,8 @@ void ArrayExpression::generate_bytecode(Bytecode::Generator& generator) const
|
||||||
TODO();
|
TODO();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
generator.emit<Bytecode::Op::LoadImmediate>(Value {});
|
||||||
}
|
}
|
||||||
auto element_reg = generator.allocate_register();
|
auto element_reg = generator.allocate_register();
|
||||||
generator.emit<Bytecode::Op::Store>(element_reg);
|
generator.emit<Bytecode::Op::Store>(element_reg);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue