/* * Copyright (c) 2021, Idan Horowitz * Copyright (c) 2021-2023, Linus Groh * Copyright (c) 2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace JS::Temporal { class PlainTime final : public Object { JS_OBJECT(PlainTime, Object); GC_DECLARE_ALLOCATOR(PlainTime); public: virtual ~PlainTime() override = default; [[nodiscard]] Time const& time() const { return m_time; } private: PlainTime(Time const&, Object& prototype); Time m_time; // [[Time]] }; // Table 5: TemporalTimeLike Record Fields, https://tc39.es/proposal-temporal/#table-temporal-temporaltimelike-record-fields struct TemporalTimeLike { static TemporalTimeLike zero() { return { .hour = 0, .minute = 0, .second = 0, .millisecond = 0, .microsecond = 0, .nanosecond = 0 }; } Optional hour; Optional minute; Optional second; Optional millisecond; Optional microsecond; Optional nanosecond; }; enum class Completeness { Complete, Partial, }; Time create_time_record(double hour, double minute, double second, double millisecond, double microsecond, double nanosecond, double delta_days = 0); Time midnight_time_record(); Time noon_time_record(); TimeDuration difference_time(Time const&, Time const&); ThrowCompletionOr> to_temporal_time(VM&, Value item, Value options = js_undefined()); ThrowCompletionOr