Files
ladybird/Libraries/LibJS/Runtime/BigInt.h
Andreas Kling c6a79c3ae3 LibJS+LibCrypto: Account BigInt limbs as external memory
Expose the Tommath limb allocation size from LibCrypto big integers.
Use it as the external memory size for LibJS BigInt cells so large
integer values participate in GC threshold calculations.
2026-05-07 10:03:09 +02:00

44 lines
985 B
C++

/*
* Copyright (c) 2020-2022, Linus Groh <linusg@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Error.h>
#include <AK/String.h>
#include <AK/StringView.h>
#include <LibCrypto/BigInt/SignedBigInteger.h>
#include <LibGC/CellAllocator.h>
#include <LibJS/Export.h>
#include <LibJS/Heap/Cell.h>
namespace JS {
class JS_API BigInt final : public Cell {
GC_CELL(BigInt, Cell);
GC_DECLARE_ALLOCATOR(BigInt);
public:
[[nodiscard]] static GC::Ref<BigInt> create(VM&, Crypto::SignedBigInteger);
virtual ~BigInt() override = default;
Crypto::SignedBigInteger const& big_integer() const { return m_big_integer; }
ErrorOr<String> to_string() const;
Utf16String to_utf16_string() const;
private:
virtual size_t external_memory_size() const override;
explicit BigInt(Crypto::SignedBigInteger);
Crypto::SignedBigInteger m_big_integer;
};
ThrowCompletionOr<GC::Ref<BigInt>> number_to_bigint(VM&, Value);
}