summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp')
-rw-r--r--Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp b/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp
index f9948eea02..aa53db94bb 100644
--- a/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp
+++ b/Userland/Libraries/LibJS/Runtime/Temporal/Calendar.cpp
@@ -4,11 +4,55 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
+#include <LibJS/Runtime/AbstractOperations.h>
+#include <LibJS/Runtime/GlobalObject.h>
#include <LibJS/Runtime/Temporal/Calendar.h>
+#include <LibJS/Runtime/Temporal/CalendarConstructor.h>
#include <LibJS/Runtime/Value.h>
namespace JS::Temporal {
+// 12 Temporal.Calendar Objects, https://tc39.es/proposal-temporal/#sec-temporal-calendar-objects
+Calendar::Calendar(String identifier, Object& prototype)
+ : Object(prototype)
+ , m_identifier(move(identifier))
+{
+}
+
+// 12.1.1 CreateTemporalCalendar ( identifier [ , newTarget ] ), https://tc39.es/proposal-temporal/#sec-temporal-createtemporalcalendar
+Calendar* create_temporal_calendar(GlobalObject& global_object, String const& identifier, FunctionObject* new_target)
+{
+ auto& vm = global_object.vm();
+
+ // 1. Assert: ! IsBuiltinCalendar(identifier) is true.
+ VERIFY(is_builtin_calendar(identifier));
+
+ // 2. If newTarget is not provided, set newTarget to %Temporal.Calendar%.
+ if (!new_target)
+ new_target = global_object.temporal_calendar_constructor();
+
+ // 3. Let object be ? OrdinaryCreateFromConstructor(newTarget, "%Temporal.Calendar.prototype%", ยซ [[InitializedTemporalCalendar]], [[Identifier]] ยป).
+ // 4. Set object.[[Identifier]] to identifier.
+ auto* object = ordinary_create_from_constructor<Calendar>(global_object, *new_target, &GlobalObject::temporal_calendar_prototype, identifier);
+ if (vm.exception())
+ return {};
+
+ // 5. Return object.
+ return object;
+}
+
+// 12.1.2 IsBuiltinCalendar ( id ), https://tc39.es/proposal-temporal/#sec-temporal-isbuiltincalendar
+// NOTE: This is the minimum IsBuiltinCalendar implementation for engines without ECMA-402.
+bool is_builtin_calendar(String const& identifier)
+{
+ // 1. If id is not "iso8601", return false.
+ if (identifier != "iso8601"sv)
+ return false;
+
+ // 2. Return true.
+ return true;
+}
+
// 12.1.30 IsISOLeapYear ( year ), https://tc39.es/proposal-temporal/#sec-temporal-isisoleapyear
bool is_iso_leap_year(i32 year)
{