1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 * vim: set ts=8 sts=2 et sw=2 tw=80:
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef builtin_temporal_TemporalParser_h
8 #define builtin_temporal_TemporalParser_h
10 #include "mozilla/Assertions.h"
15 #include "builtin/temporal/TemporalUnit.h"
16 #include "js/RootingAPI.h"
17 #include "js/TypeDecls.h"
20 class JS_PUBLIC_API JSTracer
;
22 namespace js::temporal
{
29 struct ParsedTimeZone
{
30 JSLinearString
* name
= nullptr;
31 int32_t offset
= INT32_MIN
;
33 void trace(JSTracer
* trc
);
35 static ParsedTimeZone
fromName(JSLinearString
* name
) {
40 static ParsedTimeZone
fromOffset(int32_t offset
) {
41 MOZ_ASSERT(std::abs(offset
) < UnitsPerDay(TemporalUnit::Minute
));
42 return {nullptr, offset
};
45 explicit operator bool() const {
46 return name
!= nullptr || offset
!= INT32_MIN
;
51 * ParseTemporalInstantString ( isoString )
53 bool ParseTemporalInstantString(JSContext
* cx
, JS::Handle
<JSString
*> str
,
54 PlainDateTime
* result
, int64_t* offset
);
57 * ParseTemporalTimeZoneString ( timeZoneString )
59 bool ParseTemporalTimeZoneString(JSContext
* cx
, JS::Handle
<JSString
*> str
,
60 JS::MutableHandle
<ParsedTimeZone
> result
);
63 * ParseTimeZoneIdentifier ( identifier )
65 bool ParseTimeZoneIdentifier(JSContext
* cx
, JS::Handle
<JSString
*> str
,
66 JS::MutableHandle
<ParsedTimeZone
> result
);
69 * ParseTimeZoneOffsetString ( isoString )
71 bool ParseTimeZoneOffsetString(JSContext
* cx
, JS::Handle
<JSString
*> str
,
75 * ParseDateTimeUTCOffset ( offsetString )
77 bool ParseDateTimeUTCOffset(JSContext
* cx
, JS::Handle
<JSString
*> str
,
81 * ParseTemporalDurationString ( isoString )
83 bool ParseTemporalDurationString(JSContext
* cx
, JS::Handle
<JSString
*> str
,
87 * ParseTemporalCalendarString ( isoString )
89 JSLinearString
* ParseTemporalCalendarString(JSContext
* cx
,
90 JS::Handle
<JSString
*> str
);
93 * ParseTemporalTimeString ( isoString )
95 bool ParseTemporalTimeString(JSContext
* cx
, JS::Handle
<JSString
*> str
,
99 * ParseTemporalDateString ( isoString )
101 bool ParseTemporalDateString(JSContext
* cx
, JS::Handle
<JSString
*> str
,
103 JS::MutableHandle
<JSString
*> calendar
);
106 * ParseTemporalMonthDayString ( isoString )
108 bool ParseTemporalMonthDayString(JSContext
* cx
, JS::Handle
<JSString
*> str
,
109 PlainDate
* result
, bool* hasYear
,
110 JS::MutableHandle
<JSString
*> calendar
);
113 * ParseTemporalYearMonthString ( isoString )
115 bool ParseTemporalYearMonthString(JSContext
* cx
, JS::Handle
<JSString
*> str
,
117 JS::MutableHandle
<JSString
*> calendar
);
120 * ParseTemporalDateTimeString ( isoString )
122 bool ParseTemporalDateTimeString(JSContext
* cx
, JS::Handle
<JSString
*> str
,
123 PlainDateTime
* result
,
124 JS::MutableHandle
<JSString
*> calendar
);
127 * ParseTemporalZonedDateTimeString ( isoString )
129 bool ParseTemporalZonedDateTimeString(
130 JSContext
* cx
, JS::Handle
<JSString
*> str
, PlainDateTime
* dateTime
,
131 bool* isUTC
, bool* hasOffset
, int64_t* timeZoneOffset
,
132 JS::MutableHandle
<ParsedTimeZone
> timeZoneName
,
133 JS::MutableHandle
<JSString
*> calendar
);
136 * ParseTemporalRelativeToString ( isoString )
138 bool ParseTemporalRelativeToString(
139 JSContext
* cx
, JS::Handle
<JSString
*> str
, PlainDateTime
* dateTime
,
140 bool* isUTC
, bool* hasOffset
, int64_t* timeZoneOffset
,
141 JS::MutableHandle
<ParsedTimeZone
> timeZoneName
,
142 JS::MutableHandle
<JSString
*> calendar
);
144 } /* namespace js::temporal */
148 template <typename Wrapper
>
149 class WrappedPtrOperations
<temporal::ParsedTimeZone
, Wrapper
> {
150 const auto& object() const {
151 return static_cast<const Wrapper
*>(this)->get();
155 JS::Handle
<JSLinearString
*> name() const {
156 return JS::Handle
<JSLinearString
*>::fromMarkedLocation(&object().name
);
159 int32_t offset() const { return object().offset
; }
161 explicit operator bool() const { return bool(object()); }
166 #endif /* builtin_temporal_TemporalParser_h */