Browse Source

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.
Aliaksandr Kalenik 2 years ago
parent
commit
167495b87b
1 changed files with 4 additions and 1 deletions
  1. 4 1
      Userland/Libraries/LibJS/Bytecode/Generator.cpp

+ 4 - 1
Userland/Libraries/LibJS/Bytecode/Generator.cpp

@@ -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 {};
     }