ladybird/Userland/Libraries/LibJS/Bytecode
Andreas Kling 732b39d120 LibJS: Don't evaluate computed MemberExpression LHS twice in assignments
The following snippet would cause "i" to be incremented twice(!):

    let a = []
    let i = 0
    a[++i] += 0

This patch solves the issue by remembering the base object and property
name for computed MemberExpression LHS in codegen. We the store the
result of the assignment to the same object and property (instead of
computing the LHS again).

3 new passes on test262. :^)
2023-10-04 18:58:29 +02:00
..
ASTCodegen.cpp LibJS: Don't evaluate computed MemberExpression LHS twice in assignments 2023-10-04 18:58:29 +02:00
BasicBlock.cpp LibJS: Pad the capacity of BasicBlock while growing it 2023-09-30 09:33:11 +02:00
BasicBlock.h LibJS: Use a Vector<u8> for BasicBlock instruction storage 2023-09-28 11:25:19 +02:00
CodeGenerationError.cpp LibJS: Add to_string definitions to CodeGenerationError and ParserError 2023-02-17 09:14:23 -05:00
CodeGenerationError.h LibJS: Remove unused CodeGenerationError::to_deprecated_string 2023-02-17 09:14:23 -05:00
Executable.cpp LibJS: Make Executable ref-counted and let instruction iterator co-own it 2023-10-03 08:23:33 +02:00
Executable.h LibJS: Make Executable ref-counted and let instruction iterator co-own it 2023-10-03 08:23:33 +02:00
Generator.cpp LibJS: Don't evaluate computed MemberExpression LHS twice in assignments 2023-10-04 18:58:29 +02:00
Generator.h LibJS: Don't evaluate computed MemberExpression LHS twice in assignments 2023-10-04 18:58:29 +02:00
IdentifierTable.cpp AK+Everywhere: Rename FlyString to DeprecatedFlyString 2023-01-09 23:00:24 +00:00
IdentifierTable.h AK+Everywhere: Rename FlyString to DeprecatedFlyString 2023-01-09 23:00:24 +00:00
Instruction.cpp LibJS: Add file & line number to bytecode VM stack traces :^) 2023-09-02 15:37:53 +02:00
Instruction.h LibJS: Make Executable ref-counted and let instruction iterator co-own it 2023-10-03 08:23:33 +02:00
Interpreter.cpp LibJS: Make Executable ref-counted and let instruction iterator co-own it 2023-10-03 08:23:33 +02:00
Interpreter.h LibJS: Make Executable ref-counted and let instruction iterator co-own it 2023-10-03 08:23:33 +02:00
Label.h Everywhere: Add sv suffix to strings relying on StringView(char const*) 2022-07-12 23:11:35 +02:00
Op.h LibJS: Remove last user of Op::Jump::set_targets() and API itself 2023-09-28 14:52:03 +02:00
RegexTable.cpp LibJS/Bytecode: Don't reparse regular expressions on instantiation 2023-07-13 13:30:49 +02:00
RegexTable.h LibJS/Bytecode: Don't reparse regular expressions on instantiation 2023-07-13 13:30:49 +02:00
Register.h LibJS: Keep return value in a call frame register 2023-09-28 06:09:16 +02:00
StringTable.cpp AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00
StringTable.h AK+Everywhere: Rename String to DeprecatedString 2022-12-06 08:54:33 +01:00