From 47fb4286c7247af3faa354ceba97ac46d8bd854f Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Wed, 7 Jul 2021 17:41:37 +0100 Subject: LibJS: Start implementing Temporal.Instant Just like the initial Temporal.TimeZone commit, this patch adds the Instant object itself, its constructor and prototype (currently empty), and two required abstract operations. --- .../Libraries/LibJS/Runtime/Temporal/Instant.h | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Userland/Libraries/LibJS/Runtime/Temporal/Instant.h (limited to 'Userland/Libraries/LibJS/Runtime/Temporal/Instant.h') diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/Instant.h b/Userland/Libraries/LibJS/Runtime/Temporal/Instant.h new file mode 100644 index 0000000000..7700295d93 --- /dev/null +++ b/Userland/Libraries/LibJS/Runtime/Temporal/Instant.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021, Linus Groh + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include + +namespace JS::Temporal { + +class Instant final : public Object { + JS_OBJECT(Instant, Object); + +public: + explicit Instant(BigInt& nanoseconds, Object& prototype); + virtual ~Instant() override = default; + + BigInt const& nanoseconds() const { return m_nanoseconds; } + +private: + virtual void visit_edges(Visitor&) override; + + // 8.4 Properties of Temporal.Instant Instances, https://tc39.es/proposal-temporal/#sec-properties-of-temporal-instant-instances + + // [[Nanoseconds]] + BigInt& m_nanoseconds; +}; + +// -86400 * 10^17 +const auto INSTANT_NANOSECONDS_MIN = Crypto::SignedBigInteger::from_base(10, "-8640000000000000000000"); +// +86400 * 10^17 +const auto INSTANT_NANOSECONDS_MAX = Crypto::SignedBigInteger::from_base(10, "8640000000000000000000"); + +bool is_valid_epoch_nanoseconds(BigInt const& epoch_nanoseconds); +Object* create_temporal_instant(GlobalObject&, BigInt& nanoseconds, FunctionObject* new_target = nullptr); + +} -- cgit v1.2.3