ladybird/Libraries/LibJS/Bytecode
Andreas Kling 7c26354563 LibJS: Avoid Value->PropertyKey->Value roundtrip in for..in iteration
Before this change, we would call [[OwnPropertyKeys]] on the target
objects, then convert the returned keys from Value into PropertyKey.
Then, when actually iterating, we'd convert them back into Value again.
This was particularly costly for numeric property keys, since we had
to go through string-from-number construction.

Now, we simply keep the original values returned by [[OwnPropertyKeys]]
around and use them for the enumeration.

1.09x speedup on MicroBench/for-in-indexed-properties.js
1.01x speedup on MicroBench/for-in-named-properties.js
2025-05-03 17:33:54 +02:00
..
ASTCodegen.cpp LibJS: Optimize array destructuring assignment for builtin iterators 2025-05-01 16:57:56 +03:00
BasicBlock.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
BasicBlock.h LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
Builtins.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Builtins.h LibJS: Add builtin for Math.random() 2025-04-03 13:56:39 +02:00
CodeGenerationError.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
CodeGenerationError.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Executable.cpp LibGC+Everywhere: Factor out a LibGC from LibJS 2024-11-15 14:49:20 +01:00
Executable.h LibJS: Add new operand type for function arguments 2025-04-26 11:02:29 +02:00
Generator.cpp LibJS: Mark arguments local as initialized after creating it 2025-04-28 01:23:56 +02:00
Generator.h LibJS: Skip allocating locals for arguments that allowed to be local 2025-04-26 11:02:29 +02:00
IdentifierTable.cpp LibJS: Use FlyString in PropertyKey instead of DeprecatedFlyString 2025-03-24 22:27:17 +00:00
IdentifierTable.h LibJS: Make Optional<IdentifierTableIndex> use less space 2025-03-27 19:50:13 +00:00
Instruction.cpp LibJS: Remove unused InstructionStreamIterator::source_code getter 2025-04-16 10:41:44 -06:00
Instruction.h LibJS: Optimize array destructuring assignment for builtin iterators 2025-05-01 16:57:56 +03:00
Interpreter.cpp LibJS: Avoid Value->PropertyKey->Value roundtrip in for..in iteration 2025-05-03 17:33:54 +02:00
Interpreter.h Revert "LibJS: Add StackFrame to avoid indirection in VM register access" 2025-04-29 16:08:42 +02:00
Label.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Label.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Op.h LibJS: Optimize array destructuring assignment for builtin iterators 2025-05-01 16:57:56 +03:00
Operand.h LibJS: Add new operand type for function arguments 2025-04-26 11:02:29 +02:00
RegexTable.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
RegexTable.h LibJS: Use u32 for RegexTableIndex 2025-04-06 02:05:27 +02:00
Register.h LibJS: Remove unused bytecode VM register reservation 2025-04-30 09:38:40 +02:00
ScopedOperand.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
ScopedOperand.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
StringTable.cpp LibJS: Make Optional<StringTableIndex> use less space 2025-04-06 02:05:27 +02:00
StringTable.h LibJS: Make Optional<StringTableIndex> use less space 2025-04-06 02:05:27 +02:00