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 năm trước cách đây
mục cha
commit
167495b87b
1 tập tin đã thay đổi với 4 bổ sung1 xóa
  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 {};
     }