diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp index f6e40aab705240..da4db0a3617138 100644 --- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp +++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp @@ -279,7 +279,7 @@ Bytecode::CodeGenerationErrorOr> NullLiteral::genera return generator.add_constant(js_null()); } -Bytecode::CodeGenerationErrorOr> BigIntLiteral::generate_bytecode(Bytecode::Generator& generator, Optional preferred_dst) const +Bytecode::CodeGenerationErrorOr> BigIntLiteral::generate_bytecode(Bytecode::Generator& generator, [[maybe_unused]] Optional preferred_dst) const { Bytecode::Generator::SourceLocationScope scope(generator, *this); // 1. Return the NumericValue of NumericLiteral as defined in 12.8.3. @@ -293,10 +293,7 @@ Bytecode::CodeGenerationErrorOr> BigIntLiteral::gene return MUST(Crypto::SignedBigInteger::from_base(2, m_value.substring(2, m_value.length() - 3))); return MUST(Crypto::SignedBigInteger::from_base(10, m_value.substring(0, m_value.length() - 1))); }(); - - auto dst = choose_dst(generator, preferred_dst); - generator.emit(dst, integer); - return dst; + return generator.add_constant(BigInt::create(generator.vm(), move(integer)), Bytecode::Generator::DeduplicateConstant::No); } Bytecode::CodeGenerationErrorOr> StringLiteral::generate_bytecode(Bytecode::Generator& generator, [[maybe_unused]] Optional preferred_dst) const diff --git a/Userland/Libraries/LibJS/Bytecode/Instruction.h b/Userland/Libraries/LibJS/Bytecode/Instruction.h index fc4d91e9d8f27c..31d9f7d7eb0581 100644 --- a/Userland/Libraries/LibJS/Bytecode/Instruction.h +++ b/Userland/Libraries/LibJS/Bytecode/Instruction.h @@ -82,7 +82,6 @@ O(Mov) \ O(Mul) \ O(NewArray) \ - O(NewBigInt) \ O(NewClass) \ O(NewFunction) \ O(NewObject) \ diff --git a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp index 4dfa93e31a6277..6869500e9906a5 100644 --- a/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp +++ b/Userland/Libraries/LibJS/Bytecode/Interpreter.cpp @@ -63,6 +63,8 @@ static ByteString format_operand(StringView name, Operand operand, Bytecode::Exe builder.appendff("Int32({})", value.as_i32()); else if (value.is_double()) builder.appendff("Double({})", value.as_double()); + else if (value.is_bigint()) + builder.appendff("BigInt({})", value.as_bigint().to_byte_string()); else if (value.is_string()) builder.appendff("String(\"{}\")", value.as_string().utf8_string_view()); else if (value.is_undefined()) @@ -854,13 +856,6 @@ static ThrowCompletionOr typeof_(VM& vm, Value value) JS_ENUMERATE_COMMON_UNARY_OPS(JS_DEFINE_COMMON_UNARY_OP) -ThrowCompletionOr NewBigInt::execute_impl(Bytecode::Interpreter& interpreter) const -{ - auto& vm = interpreter.vm(); - interpreter.set(dst(), BigInt::create(vm, m_bigint)); - return {}; -} - ThrowCompletionOr NewArray::execute_impl(Bytecode::Interpreter& interpreter) const { auto array = MUST(Array::create(interpreter.realm(), 0)); @@ -1613,13 +1608,6 @@ ByteString Mov::to_byte_string_impl(Bytecode::Executable const& executable) cons format_operand("src"sv, m_src, executable)); } -ByteString NewBigInt::to_byte_string_impl(Bytecode::Executable const& executable) const -{ - return ByteString::formatted("NewBigInt {}, {}", - format_operand("dst"sv, dst(), executable), - m_bigint.to_base_deprecated(10)); -} - ByteString NewArray::to_byte_string_impl(Bytecode::Executable const& executable) const { StringBuilder builder; diff --git a/Userland/Libraries/LibJS/Bytecode/Op.h b/Userland/Libraries/LibJS/Bytecode/Op.h index c1d5dc33023ded..c8489d04f13ec6 100644 --- a/Userland/Libraries/LibJS/Bytecode/Op.h +++ b/Userland/Libraries/LibJS/Bytecode/Op.h @@ -239,26 +239,6 @@ class CopyObjectExcludingProperties final : public Instruction { Operand m_excluded_names[]; }; -class NewBigInt final : public Instruction { -public: - NewBigInt(Operand dst, Crypto::SignedBigInteger bigint) - : Instruction(Type::NewBigInt, sizeof(*this)) - , m_dst(dst) - , m_bigint(move(bigint)) - { - } - - ThrowCompletionOr execute_impl(Bytecode::Interpreter&) const; - ByteString to_byte_string_impl(Bytecode::Executable const&) const; - - Operand dst() const { return m_dst; } - Crypto::SignedBigInteger const& bigint() const { return m_bigint; } - -private: - Operand m_dst; - Crypto::SignedBigInteger m_bigint; -}; - // NOTE: This instruction is variable-width depending on the number of elements! class NewArray final : public Instruction { public: