1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 22:47:44 +00:00

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.
This commit is contained in:
Linus Groh 2021-07-07 17:41:37 +01:00
parent d9cff591b6
commit 47fb4286c7
11 changed files with 255 additions and 1 deletions

View file

@ -0,0 +1,41 @@
/*
* Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Optional.h>
#include <LibJS/Runtime/BigInt.h>
#include <LibJS/Runtime/Object.h>
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);
}