From eca378a7a3159ab59d8bb772e8ae7da5df530c0b Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Mon, 18 Nov 2024 11:18:00 -0500 Subject: [PATCH] LibJS: Restore some Temporal numeric constants And add few ad-hoc constants for convenience. --- Libraries/LibJS/CMakeLists.txt | 1 + Libraries/LibJS/Runtime/Temporal/Instant.cpp | 37 +++++++++++++++++++ Libraries/LibJS/Runtime/Temporal/Instant.h | 39 ++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 Libraries/LibJS/Runtime/Temporal/Instant.cpp create mode 100644 Libraries/LibJS/Runtime/Temporal/Instant.h diff --git a/Libraries/LibJS/CMakeLists.txt b/Libraries/LibJS/CMakeLists.txt index 9e05a465231..8e51d0a2697 100644 --- a/Libraries/LibJS/CMakeLists.txt +++ b/Libraries/LibJS/CMakeLists.txt @@ -206,6 +206,7 @@ set(SOURCES Runtime/SymbolPrototype.cpp Runtime/Temporal/AbstractOperations.cpp Runtime/Temporal/Duration.cpp + Runtime/Temporal/Instant.cpp Runtime/Temporal/Temporal.cpp Runtime/TypedArray.cpp Runtime/TypedArrayConstructor.cpp diff --git a/Libraries/LibJS/Runtime/Temporal/Instant.cpp b/Libraries/LibJS/Runtime/Temporal/Instant.cpp new file mode 100644 index 00000000000..5a23ec90287 --- /dev/null +++ b/Libraries/LibJS/Runtime/Temporal/Instant.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021-2023, Linus Groh + * Copyright (c) 2021, Idan Horowitz + * Copyright (c) 2023, Shannon Booth + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +namespace JS::Temporal { + +// nsMaxInstant = 10**8 × nsPerDay = 8.64 × 10**21 +Crypto::SignedBigInteger const NANOSECONDS_MAX_INSTANT = "8640000000000000000000"_sbigint; + +// nsMinInstant = -nsMaxInstant = -8.64 × 10**21 +Crypto::SignedBigInteger const NANOSECONDS_MIN_INSTANT = "-8640000000000000000000"_sbigint; + +// nsPerDay = 10**6 × ℝ(msPerDay) = 8.64 × 10**13 +Crypto::UnsignedBigInteger const NANOSECONDS_PER_DAY = 86400000000000_bigint; + +// Non-standard: +Crypto::UnsignedBigInteger const NANOSECONDS_PER_HOUR = 3600000000000_bigint; +Crypto::UnsignedBigInteger const NANOSECONDS_PER_MINUTE = 60000000000_bigint; +Crypto::UnsignedBigInteger const NANOSECONDS_PER_SECOND = 1000000000_bigint; +Crypto::UnsignedBigInteger const NANOSECONDS_PER_MILLISECOND = 1000000_bigint; +Crypto::UnsignedBigInteger const NANOSECONDS_PER_MICROSECOND = 1000_bigint; +Crypto::UnsignedBigInteger const NANOSECONDS_PER_NANOSECOND = 1_bigint; + +Crypto::UnsignedBigInteger const MICROSECONDS_PER_MILLISECOND = 1000_bigint; +Crypto::UnsignedBigInteger const MILLISECONDS_PER_SECOND = 1000_bigint; +Crypto::UnsignedBigInteger const SECONDS_PER_MINUTE = 60_bigint; +Crypto::UnsignedBigInteger const MINUTES_PER_HOUR = 60_bigint; +Crypto::UnsignedBigInteger const HOURS_PER_DAY = 24_bigint; + +} diff --git a/Libraries/LibJS/Runtime/Temporal/Instant.h b/Libraries/LibJS/Runtime/Temporal/Instant.h new file mode 100644 index 00000000000..9c90733e5c4 --- /dev/null +++ b/Libraries/LibJS/Runtime/Temporal/Instant.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021-2023, Linus Groh + * Copyright (c) 2021, Idan Horowitz + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace JS::Temporal { + +// https://tc39.es/proposal-temporal/#eqn-nsMaxInstant +extern Crypto::SignedBigInteger const NANOSECONDS_MAX_INSTANT; + +// https://tc39.es/proposal-temporal/#eqn-nsMinInstant +extern Crypto::SignedBigInteger const NANOSECONDS_MIN_INSTANT; + +// https://tc39.es/proposal-temporal/#eqn-nsPerDay +extern Crypto::UnsignedBigInteger const NANOSECONDS_PER_DAY; + +// Non-standard: +extern Crypto::UnsignedBigInteger const NANOSECONDS_PER_HOUR; +extern Crypto::UnsignedBigInteger const NANOSECONDS_PER_MINUTE; +extern Crypto::UnsignedBigInteger const NANOSECONDS_PER_SECOND; +extern Crypto::UnsignedBigInteger const NANOSECONDS_PER_MILLISECOND; +extern Crypto::UnsignedBigInteger const NANOSECONDS_PER_MICROSECOND; +extern Crypto::UnsignedBigInteger const NANOSECONDS_PER_NANOSECOND; + +extern Crypto::UnsignedBigInteger const MICROSECONDS_PER_MILLISECOND; +extern Crypto::UnsignedBigInteger const MILLISECONDS_PER_SECOND; +extern Crypto::UnsignedBigInteger const SECONDS_PER_MINUTE; +extern Crypto::UnsignedBigInteger const MINUTES_PER_HOUR; +extern Crypto::UnsignedBigInteger const HOURS_PER_DAY; + +}