From 442ca4f9b49b45e96d1257d5422b34c21f2d3a99 Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Sun, 2 Jul 2023 20:19:05 +0100 Subject: [PATCH] LibJS: Avoid RequireObjectCoercible when creating super references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is part of an old normative change that happened soon after Andreas made `super` closer to spec in 1270df2. See https://github.com/tc39/ecma262/pull/2267/ This was introduced into bytecode by virtue of copy and paste :^) Bytecode results: Summary: Diff Tests: +2 ✅ -2 ❌ --- Userland/Libraries/LibJS/Bytecode/Op.cpp | 5 +---- Userland/Libraries/LibJS/Runtime/AbstractOperations.cpp | 7 ++----- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/Userland/Libraries/LibJS/Bytecode/Op.cpp b/Userland/Libraries/LibJS/Bytecode/Op.cpp index 77069e7e6e..141a8c7811 100644 --- a/Userland/Libraries/LibJS/Bytecode/Op.cpp +++ b/Userland/Libraries/LibJS/Bytecode/Op.cpp @@ -660,10 +660,7 @@ ThrowCompletionOr ResolveSuperBase::execute_impl(Bytecode::Interpreter& in VERIFY(env.has_super_binding()); // 3. Let baseValue be ? env.GetSuperBase(). - auto base_value = TRY(env.get_super_base()); - - // 4. Let bv be ? RequireObjectCoercible(baseValue). - interpreter.accumulator() = TRY(require_object_coercible(vm, base_value)); + interpreter.accumulator() = TRY(env.get_super_base()); return {}; } diff --git a/Userland/Libraries/LibJS/Runtime/AbstractOperations.cpp b/Userland/Libraries/LibJS/Runtime/AbstractOperations.cpp index 09e71b8b0d..3bb8980a7e 100644 --- a/Userland/Libraries/LibJS/Runtime/AbstractOperations.cpp +++ b/Userland/Libraries/LibJS/Runtime/AbstractOperations.cpp @@ -513,11 +513,8 @@ ThrowCompletionOr make_super_property_reference(VM& vm, Value actual_ // 3. Let baseValue be ? env.GetSuperBase(). auto base_value = TRY(env.get_super_base()); - // 4. Let bv be ? RequireObjectCoercible(baseValue). - auto bv = TRY(require_object_coercible(vm, base_value)); - - // 5. Return the Reference Record { [[Base]]: bv, [[ReferencedName]]: propertyKey, [[Strict]]: strict, [[ThisValue]]: actualThis }. - return Reference { bv, property_key, actual_this, strict }; + // 4. Return the Reference Record { [[Base]]: baseValue, [[ReferencedName]]: propertyKey, [[Strict]]: strict, [[ThisValue]]: actualThis }. + return Reference { base_value, property_key, actual_this, strict }; } // 19.2.1.1 PerformEval ( x, strictCaller, direct ), https://tc39.es/ecma262/#sec-performeval