LibJS/Bytecode: Always return false on attempt to delete local variable

Since it is not possible for delete operator to return true when it is
applied to local variable, DeleteVariable can safely always return
false for locals.

This also fixes operators/delete-local-variable.js in test-js.
This commit is contained in:
Aliaksandr Kalenik 2023-07-08 20:29:13 +02:00 committed by Andreas Kling
parent 0c5c75e8a4
commit 167495b87b

View file

@ -298,7 +298,10 @@ CodeGenerationErrorOr<void> Generator::emit_delete_reference(JS::ASTNode const&
{
if (is<Identifier>(node)) {
auto& identifier = static_cast<Identifier const&>(node);
emit<Bytecode::Op::DeleteVariable>(intern_identifier(identifier.string()));
if (identifier.is_local())
emit<Bytecode::Op::LoadImmediate>(Value(false));
else
emit<Bytecode::Op::DeleteVariable>(intern_identifier(identifier.string()));
return {};
}