mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 00:31:14 +00:00
LibJS/Bytecode: Don't clobber accumulator in Put/Delete instructions
The fact that side effects clobbers the accumulator isn't just annoying inside the instruction handler, but also really counter-intuitive in the bytecode program itself. 17 new passes on test262. :^)
This commit is contained in:
parent
8450948458
commit
ceb5199225
Notes:
sideshowbarker
2024-07-17 01:55:29 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/ceb5199225 Pull-request: https://github.com/SerenityOS/serenity/pull/19635
|
@ -550,7 +550,9 @@ ThrowCompletionOr<void> PutById::execute_impl(Bytecode::Interpreter& interpreter
|
|||
auto value = interpreter.accumulator();
|
||||
auto object = TRY(interpreter.reg(m_base).to_object(vm));
|
||||
PropertyKey name = interpreter.current_executable().get_identifier(m_property);
|
||||
return put_by_property_key(vm, object, value, name, m_kind);
|
||||
TRY(put_by_property_key(vm, object, value, name, m_kind));
|
||||
interpreter.accumulator() = value;
|
||||
return {};
|
||||
}
|
||||
|
||||
ThrowCompletionOr<void> PutPrivateById::execute_impl(Bytecode::Interpreter& interpreter) const
|
||||
|
@ -561,7 +563,9 @@ ThrowCompletionOr<void> PutPrivateById::execute_impl(Bytecode::Interpreter& inte
|
|||
auto object = TRY(interpreter.reg(m_base).to_object(vm));
|
||||
auto name = interpreter.current_executable().get_identifier(m_property);
|
||||
auto private_reference = make_private_reference(vm, object, name);
|
||||
return private_reference.put_value(vm, value);
|
||||
TRY(private_reference.put_value(vm, value));
|
||||
interpreter.accumulator() = value;
|
||||
return {};
|
||||
}
|
||||
|
||||
ThrowCompletionOr<void> DeleteById::execute_impl(Bytecode::Interpreter& interpreter) const
|
||||
|
@ -981,7 +985,9 @@ ThrowCompletionOr<void> PutByValue::execute_impl(Bytecode::Interpreter& interpre
|
|||
auto object = TRY(interpreter.reg(m_base).to_object(vm));
|
||||
|
||||
auto property_key = TRY(interpreter.reg(m_property).to_property_key(vm));
|
||||
return put_by_property_key(vm, object, value, property_key, m_kind);
|
||||
TRY(put_by_property_key(vm, object, value, property_key, m_kind));
|
||||
interpreter.accumulator() = value;
|
||||
return {};
|
||||
}
|
||||
|
||||
ThrowCompletionOr<void> DeleteByValue::execute_impl(Bytecode::Interpreter& interpreter) const
|
||||
|
|
Loading…
Reference in a new issue