mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-12 01:46:46 +02:00
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.
44 lines
985 B
C++
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);
|
|
|
|
}
|