Skip to content

Commit e6717cd

Browse files
committed
Implement Temporal.PlainDateTime (to the extent of current PlainDate impl)
https://bugs.webkit.org/show_bug.cgi?id=244142 Reviewed by Yusuke Suzuki. This patch implements a large part of the Temporal.PlainDateTime class: https://tc39.es/proposal-temporal/#sec-temporal-plaindatetime-objects Since Temporal.PlainDate is incomplete, this patch aims to be "as complete as" PlainDate, while the next patch will aim to complete the API surface for both classes at once. (Test262 tests for both will be enabled at that time.) Specifically, this patch implements and tests the following functionality: - Temporal.PlainTime: Support `from(PlainDateTime)`. - Temporal.PlainDate: Support `from(PlainDateTime)`. Also add `calendar` getter, getISOFields, toJSON, toLocaleString, valueOf (all trivial). - Temporal.PlainDateTime: Implement constructor, `from` (modulo generic object path), `compare`, all getters, getISOFields, toString, toJSON, toLocaleString, valueOf. * JSTests/stress/temporal-plaindate.js: * JSTests/stress/temporal-plaindatetime.js: Added. * JSTests/stress/temporal-plaintime.js: * JSTests/test262/config.yaml: Refactor Temporal skips. * JSTests/test262/expectations.yaml: Update results. * Source/JavaScriptCore/CMakeLists.txt: * Source/JavaScriptCore/DerivedSources-input.xcfilelist: * Source/JavaScriptCore/DerivedSources-output.xcfilelist: * Source/JavaScriptCore/DerivedSources.make: * Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj: * Source/JavaScriptCore/Sources.txt: * Source/JavaScriptCore/heap/Heap.h: * Source/JavaScriptCore/heap/HeapSubspaceTypes.h: * Source/JavaScriptCore/runtime/CommonIdentifiers.h: * Source/JavaScriptCore/runtime/ISO8601.cpp: (JSC::ISO8601::temporalDateTimeToString): * Source/JavaScriptCore/runtime/ISO8601.h: * Source/JavaScriptCore/runtime/JSGlobalObject.cpp: (JSC::JSGlobalObject::init): (JSC::JSGlobalObject::visitChildrenImpl): * Source/JavaScriptCore/runtime/JSGlobalObject.h: (JSC::JSGlobalObject::plainDateTimeStructure): * Source/JavaScriptCore/runtime/TemporalObject.cpp: (JSC::createPlainDateTimeConstructor): * Source/JavaScriptCore/runtime/TemporalPlainDate.cpp: (JSC::TemporalPlainDate::toPlainDate): (JSC::TemporalPlainDate::tryCreateIfValid): (JSC::TemporalPlainDate::from): (JSC::TemporalPlainDate::compare): (JSC::toPlainDate): Deleted. * Source/JavaScriptCore/runtime/TemporalPlainDate.h: * Source/JavaScriptCore/runtime/TemporalPlainDateConstructor.cpp: * Source/JavaScriptCore/runtime/TemporalPlainDatePrototype.cpp: * Source/JavaScriptCore/runtime/TemporalPlainDateTime.cpp: Added. * Source/JavaScriptCore/runtime/TemporalPlainDateTime.h: Added. * Source/JavaScriptCore/runtime/TemporalPlainDateTimeConstructor.cpp: Added. * Source/JavaScriptCore/runtime/TemporalPlainDateTimeConstructor.h: Added. * Source/JavaScriptCore/runtime/TemporalPlainDateTimePrototype.cpp: Added. * Source/JavaScriptCore/runtime/TemporalPlainDateTimePrototype.h: Added. * Source/JavaScriptCore/runtime/TemporalPlainTime.cpp: (JSC::TemporalPlainTime::toPlainTime): (JSC::TemporalPlainTime::tryCreateIfValid): (JSC::TemporalPlainTime::roundTime): (JSC::TemporalPlainTime::round const): (JSC::TemporalPlainTime::toString const): (JSC::regulateTime): (JSC::TemporalPlainTime::from): (JSC::TemporalPlainTime::compare): (JSC::toPlainTime): Deleted. (JSC::roundTime): Deleted. * Source/JavaScriptCore/runtime/TemporalPlainTime.h: * Source/JavaScriptCore/runtime/TemporalPlainTimeConstructor.cpp: * Source/JavaScriptCore/runtime/TemporalPlainTimePrototype.cpp: Canonical link: https://commits.webkit.org/253623@main
1 parent 5a67bbe commit e6717cd

33 files changed

Lines changed: 1449 additions & 79 deletions

JSTests/stress/temporal-plaindate.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,14 @@ shouldBe(String(Temporal.PlainDate.from('2007-01-09 03:24:30+01:00[u-ca=japanese
8080
shouldBe(String(Temporal.PlainDate.from('2007-01-09 03:24:30+01:00[Europe/Brussels][u-ca=japanese]')), `2007-01-09`);
8181
shouldBe(String(Temporal.PlainDate.from('2007-01-09[u-ca=japanese]')), `2007-01-09`);
8282
{
83-
let date = Temporal.PlainDate.from('2007-01-09T03:24:30+01:00[Europe/Brussels]')
83+
let date = Temporal.PlainDate.from('2007-01-09T03:24:30+01:00[Europe/Brussels]');
8484
shouldBe(date === Temporal.PlainDate.from(date), false);
85+
86+
let dateTime = Temporal.PlainDateTime.from('2007-01-09T03:24:30+01:00[Europe/Brussels]');
87+
shouldBe(Temporal.PlainDate.from(dateTime).toString(), date.toString());
88+
89+
shouldBe(date.toJSON(), date.toString());
90+
shouldBe(date.toLocaleString(), date.toString());
8591
}
8692

8793

@@ -303,6 +309,7 @@ for (let text of failures) {
303309

304310
{
305311
let getterNames = [
312+
"calendar",
306313
"year",
307314
"month",
308315
"monthCode",
@@ -324,3 +331,9 @@ for (let text of failures) {
324331
}, TypeError);
325332
}
326333
}
334+
335+
shouldThrow(() => { Temporal.PlainDate.from('2007-01-09').valueOf(); }, TypeError);
336+
{
337+
let time = Temporal.PlainDate.from('2007-01-09');
338+
shouldBe(JSON.stringify(time.getISOFields()), `{"calendar":"iso8601","isoDay":9,"isoMonth":1,"isoYear":2007}`);
339+
}
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
//@ requireOptions("--useTemporal=1")
2+
3+
function shouldBe(actual, expected) {
4+
if (actual !== expected)
5+
throw new Error(`expected ${expected} but got ${actual}`);
6+
}
7+
8+
function shouldNotThrow(func) {
9+
func();
10+
}
11+
12+
function shouldThrow(func, errorType) {
13+
let error;
14+
try {
15+
func();
16+
} catch (e) {
17+
error = e;
18+
}
19+
20+
if (!(error instanceof errorType))
21+
throw new Error(`Expected ${errorType.name}!`);
22+
}
23+
24+
shouldBe(Temporal.PlainDateTime instanceof Function, true);
25+
shouldBe(Temporal.PlainDateTime.length, 0);
26+
shouldBe(Object.getOwnPropertyDescriptor(Temporal.PlainDateTime, 'prototype').writable, false);
27+
shouldBe(Object.getOwnPropertyDescriptor(Temporal.PlainDateTime, 'prototype').enumerable, false);
28+
shouldBe(Object.getOwnPropertyDescriptor(Temporal.PlainDateTime, 'prototype').configurable, false);
29+
shouldThrow(() => Temporal.PlainDateTime(), TypeError);
30+
shouldBe(Temporal.PlainDateTime.prototype.constructor, Temporal.PlainDateTime);
31+
32+
const pdt = new Temporal.PlainDateTime(1,2,3,4,5,6,7,8,9);
33+
shouldBe(pdt instanceof Temporal.PlainDateTime, true);
34+
{
35+
class DerivedPlainDateTime extends Temporal.PlainDateTime {}
36+
37+
const dd = new DerivedPlainDateTime(0, 1, 1);
38+
shouldBe(dd instanceof DerivedPlainDateTime, true);
39+
shouldBe(dd instanceof Temporal.PlainDateTime, true);
40+
shouldBe(dd.negated, Temporal.PlainDateTime.prototype.negated);
41+
shouldBe(Object.getPrototypeOf(dd), DerivedPlainDateTime.prototype);
42+
shouldBe(Object.getPrototypeOf(DerivedPlainDateTime.prototype), Temporal.PlainDateTime.prototype);
43+
}
44+
45+
shouldThrow(() => new Temporal.PlainDateTime(), RangeError);
46+
shouldThrow(() => new Temporal.PlainDateTime(0, 1), RangeError);
47+
shouldThrow(() => new Temporal.PlainDateTime(Infinity, 1, 1), RangeError);
48+
shouldThrow(() => new Temporal.PlainDateTime(0, Infinity, 1), RangeError);
49+
shouldThrow(() => new Temporal.PlainDateTime(0, 1, Infinity), RangeError);
50+
shouldThrow(() => new Temporal.PlainDateTime(0, 1, 1, Infinity), RangeError);
51+
shouldThrow(() => new Temporal.PlainDateTime(0, 1, 1, 0, Infinity), RangeError);
52+
shouldThrow(() => new Temporal.PlainDateTime(0, 1, 1, 0, 0, Infinity), RangeError);
53+
shouldThrow(() => new Temporal.PlainDateTime(0, 1, 1, 0, 0, 0, Infinity), RangeError);
54+
shouldThrow(() => new Temporal.PlainDateTime(0, 1, 1, 0, 0, 0, 0, Infinity), RangeError);
55+
shouldThrow(() => new Temporal.PlainDateTime(0, 1, 1, 0, 0, 0, 0, 0, Infinity), RangeError);
56+
57+
const fields = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond', 'microsecond', 'nanosecond'];
58+
fields.forEach((field, i) => {
59+
shouldThrow(() => Temporal.PlainDateTime.prototype[field], TypeError);
60+
shouldBe(pdt[field], i + 1);
61+
});
62+
63+
shouldBe(pdt.calendar instanceof Temporal.Calendar, true);
64+
shouldBe(pdt.calendar.toString(), 'iso8601');
65+
{
66+
const dateGetters = ['monthCode', 'dayOfWeek', 'dayOfYear', 'weekOfYear', 'daysInWeek', 'daysInMonth', 'daysInYear', 'monthsInYear', 'inLeapYear'];
67+
const results = ['M02', 6, 34, 5, 7, 28, 365, 12, false];
68+
dateGetters.forEach((property, i) => {
69+
shouldThrow(() => Temporal.PlainDateTime.prototype[property], TypeError);
70+
shouldBe(pdt[property], results[i]);
71+
});
72+
}
73+
74+
shouldBe(Temporal.PlainDateTime.prototype.getISOFields.length, 0);
75+
shouldBe(JSON.stringify(pdt.getISOFields()), `{"calendar":"iso8601","isoDay":3,"isoHour":4,"isoMicrosecond":8,"isoMillisecond":7,"isoMinute":5,"isoMonth":2,"isoNanosecond":9,"isoSecond":6,"isoYear":1}`);
76+
77+
shouldBe(Temporal.PlainDateTime.from.length, 1);
78+
shouldThrow(() => Temporal.PlainDateTime.from(), RangeError);
79+
shouldBe(Temporal.PlainDateTime.from('0001-02-03T04:05:06.007008009').toString(), '0001-02-03T04:05:06.007008009');
80+
{
81+
const dateTime = Temporal.PlainDateTime.from('2007-01-09T03:24:30+01:00[Europe/Brussels]');
82+
shouldBe(dateTime === Temporal.PlainDateTime.from(dateTime), false);
83+
84+
const date = Temporal.PlainDate.from('2007-01-09T03:24:30+01:00[Europe/Brussels]');
85+
shouldBe(Temporal.PlainDateTime.from(date).toString(), '2007-01-09T00:00:00');
86+
}
87+
88+
shouldThrow(() => Temporal.PlainDateTime.from(pdt, { overflow: 'bogus' }), RangeError);
89+
shouldBe(Temporal.PlainDateTime.from(pdt, { overflow: 'constrain' }).toString(), Temporal.PlainDateTime.from(pdt).toString());
90+
91+
const goodStrings = [
92+
'2007-01-09',
93+
'2007-01-09T03:24:30',
94+
'2007-01-09t03:24:30',
95+
'2007-01-09 03:24:30',
96+
'2007-01-09T03:24:30+20:20:59',
97+
'2007-01-09T03:24:30-20:20:59',
98+
'2007-01-09T03:24:30\u221220:20:59',
99+
'2007-01-09T03:24:30+10',
100+
'2007-01-09T03:24:30+1020',
101+
'2007-01-09T03:24:30+102030',
102+
'2007-01-09T03:24:30+10:20:30.05',
103+
'2007-01-09T03:24:30+10:20:30.123456789',
104+
'2007-01-09T03:24:30+01:00[Europe/Brussels]',
105+
'2007-01-09 03:24:30+01:00[Europe/Brussels]',
106+
'2007-01-09T03:24:30+01:00[UNKNOWN]', // TimeZone error should be ignored.
107+
'2007-01-09T03:24:30+01:00[.hey]', // TimeZone error should be ignored.
108+
'2007-01-09T03:24:30+01:00[_]', // TimeZone error should be ignored.
109+
'2007-01-09T03:24:30+01:00[_-]', // TimeZone error should be ignored.
110+
'2007-01-09T03:24:30+01:00[_/_]', // TimeZone error should be ignored.
111+
'2007-01-09T03:24:30+01:00[_-./_-.]', // TimeZone error should be ignored.
112+
'2007-01-09T03:24:30+01:00[_../_..]', // TimeZone error should be ignored.
113+
'2007-01-09T03:24:30+01:00[_./_.]', // TimeZone error should be ignored.
114+
'2007-01-09T03:24:30+01:00[Etc/GMT+20]', // TimeZone error should be ignored.
115+
'2007-01-09T03:24:30+01:00[Etc/GMT-20]', // TimeZone error should be ignored.
116+
'2007-01-09 03:24:30+01:00[+01]',
117+
'2007-01-09 03:24:30+01:00[+01:00]',
118+
'2007-01-09 03:24:30+01:00[+01:00:00]',
119+
'2007-01-09 03:24:30+01:00[+01:00:00.123]',
120+
'2007-01-09 03:24:30+01:00[+01:00:00.12345]',
121+
'2007-01-09 03:24:30+01:00[+01:00:00.12345678]',
122+
'2007-01-09 03:24:30+01:00[+01:00:00.123456789]',
123+
'2007-01-09 03:24:30+01:00[-01:00]',
124+
'2007-01-09 03:24:30+01:00[\u221201:00]',
125+
'2007-01-09 03:24:30+01:00[u-ca=japanese]',
126+
'2007-01-09 03:24:30+01:00[Europe/Brussels][u-ca=japanese]',
127+
'2007-01-09[u-ca=japanese]',
128+
];
129+
for (let s of goodStrings)
130+
shouldNotThrow(() => Temporal.PlainDateTime.from(s));
131+
132+
const badStrings = [
133+
"",
134+
"23:59:61.999999999",
135+
"1995-1207T03:24:30",
136+
"199512-07T03:24:30",
137+
"2007-01-09T03:24:30+20:20:60",
138+
"2007-01-09T03:24:30+20:2050",
139+
"2007-01-09T03:24:30+:",
140+
"2007-01-09T03:24:30+2:50",
141+
"2007-01-09T03:24:30+01:00[/]",
142+
"2007-01-09T03:24:30+01:00[///]",
143+
"2007-01-09T03:24:30+01:00[Hey/Hello",
144+
"2007-01-09T03:24:30+01:00[]",
145+
"2007-01-09T03:24:30+01:00[Hey/]",
146+
"2007-01-09T03:24:30+01:00[..]",
147+
"2007-01-09T03:24:30+01:00[.]",
148+
"2007-01-09T03:24:30+01:00[./.]",
149+
"2007-01-09T03:24:30+01:00[../..]",
150+
"2007-01-09T03:24:30+01:00[-Hey/Hello]",
151+
"2007-01-09T03:24:30+01:00[-]",
152+
"2007-01-09T03:24:30+01:00[-/_]",
153+
"2007-01-09T03:24:30+01:00[_/-]",
154+
"2007-01-09T03:24:30+01:00[CocoaCappuccinoMatcha]",
155+
"2007-01-09T03:24:30+01:00[Etc/GMT+50]",
156+
"2007-01-09T03:24:30+01:00[Etc/GMT+0]",
157+
"2007-01-09T03:24:30+01:00[Etc/GMT0]",
158+
"2007-01-09T03:24:30+10:20:30.0123456789",
159+
"2007-01-09 03:24:30+01:00[Etc/GMT\u221201]",
160+
"2007-01-09 03:24:30+01:00[+02:00:00.0123456789]",
161+
"2007-01-09 03:24:30+01:00[02:00:00.123456789]",
162+
"2007-01-09 03:24:30+01:00[02:0000.123456789]",
163+
"2007-01-09 03:24:30+01:00[0200:00.123456789]",
164+
"2007-01-09 03:24:30+01:00[02:00:60.123456789]",
165+
"2007-01-09T03:24:30Z", // UTCDesignator
166+
"2007-01-09 03:24:30[u-ca=japanese][Europe/Brussels]",
167+
"2007-01-09 03:24:30+01:00[u-ca=japanese][Europe/Brussels]",
168+
];
169+
for (let s of badStrings)
170+
shouldThrow(() => Temporal.PlainDateTime.from(s), RangeError);
171+
172+
shouldBe(Temporal.PlainDateTime.compare.length, 2);
173+
shouldBe(Temporal.PlainDateTime.compare('2007-01-09T03:24', '2007-01-09'), 1);
174+
shouldBe(Temporal.PlainDateTime.compare('2007-01-09T03:24', '2007-01-09T03:24:00.007008009'), -1);
175+
shouldBe(Temporal.PlainDateTime.compare('2007-01-09T00:00', '2007-01-09'), 0);
176+
177+
// At present, toLocaleString has the same behavior as toJSON or argumentless toString.
178+
for (const method of ['toString', 'toJSON', 'toLocaleString']) {
179+
shouldBe(Temporal.PlainDateTime.prototype[method].length, 0);
180+
shouldThrow(() => Temporal.PlainDateTime.prototype[method].call({}), TypeError);
181+
182+
shouldBe(pdt[method](), '0001-02-03T04:05:06.007008009');
183+
}
184+
shouldBe(pdt.toString({}), pdt.toString());
185+
186+
shouldThrow(() => pdt.toString({ smallestUnit: 'bogus' }), RangeError);
187+
for (const unit of ['year', 'month', 'week', 'day', 'hour']) {
188+
shouldThrow(() => pdt.toString({ smallestUnit: unit }), RangeError);
189+
shouldThrow(() => pdt.toString({ smallestUnit: `${unit}s` }), RangeError);
190+
}
191+
shouldBe(pdt.toString({ smallestUnit: 'minute' }), '0001-02-03T04:05');
192+
shouldBe(pdt.toString({ smallestUnit: 'second' }), '0001-02-03T04:05:06');
193+
shouldBe(pdt.toString({ smallestUnit: 'millisecond' }), '0001-02-03T04:05:06.007');
194+
shouldBe(pdt.toString({ smallestUnit: 'microsecond' }), '0001-02-03T04:05:06.007008');
195+
shouldBe(pdt.toString({ smallestUnit: 'nanosecond' }), '0001-02-03T04:05:06.007008009');
196+
for (const unit of ['minute', 'second', 'millisecond', 'microsecond', 'nanosecond'])
197+
shouldBe(pdt.toString({ smallestUnit: unit }), pdt.toString({ smallestUnit: `${unit}s` }));
198+
199+
shouldThrow(() => pdt.toString({ fractionalSecondDigits: -1 }), RangeError);
200+
shouldThrow(() => pdt.toString({ fractionalSecondDigits: 10 }), RangeError);
201+
shouldThrow(() => pdt.toString({ fractionalSecondDigits: 'bogus' }), RangeError);
202+
shouldBe(pdt.toString({ fractionalSecondDigits: 0 }), '0001-02-03T04:05:06');
203+
const decimalPart = '007008009';
204+
for (let i = 1; i < 10; i++)
205+
shouldBe(pdt.toString({ fractionalSecondDigits: i }), `0001-02-03T04:05:06.${decimalPart.slice(0,i)}`);
206+
shouldBe(pdt.toString({ fractionalSecondDigits: 'auto' }), pdt.toString());
207+
208+
shouldThrow(() => pdt.toString({ roundingMode: 'bogus' }), RangeError);
209+
shouldBe(pdt.toString({ roundingMode: 'trunc' }), pdt.toString());
210+
shouldBe(pdt.toString({ fractionalSecondDigits: 2, roundingMode: 'ceil' }), '0001-02-03T04:05:06.01');
211+
shouldBe(pdt.toString({ fractionalSecondDigits: 2, roundingMode: 'floor' }), '0001-02-03T04:05:06.00');
212+
shouldBe(new Temporal.PlainDateTime(1999,12,31,23,59,59,999,999,999).toString({ smallestUnit: 'microsecond', roundingMode: 'halfExpand' }), '2000-01-01T00:00:00.000000');
213+
214+
shouldBe(Temporal.PlainDateTime.prototype.valueOf.length, 0);
215+
shouldThrow(() => pdt.valueOf(), TypeError);

JSTests/stress/temporal-plaintime.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,16 @@ shouldBe(String(Temporal.PlainTime.from('2007-01-09 03:24:30+01:00[u-ca=japanese
146146
shouldBe(String(Temporal.PlainTime.from('2007-01-09 03:24:30+01:00[Europe/Brussels][u-ca=japanese]')), `03:24:30`);
147147
shouldBe(String(Temporal.PlainTime.from('2007-01-09 03:24:30[u-ca=japanese]')), `03:24:30`);
148148
{
149-
let time = Temporal.PlainTime.from('1995-12-07T03:24:30+01:00[Europe/Brussels]')
149+
let time = Temporal.PlainTime.from('1995-12-07T03:24:30+01:00[Europe/Brussels]');
150150
shouldBe(time === Temporal.PlainTime.from(time), false);
151+
152+
let dateTime = Temporal.PlainDateTime.from('1995-12-07T03:24:30+01:00[Europe/Brussels]')
153+
shouldBe(Temporal.PlainTime.from(dateTime).toString(), time.toString());
154+
155+
shouldBe(time.toJSON(), time.toString());
156+
shouldBe(time.toLocaleString(), time.toString());
151157
}
152-
{
158+
{``
153159
let time = Temporal.PlainTime.from({
154160
hour: 19,
155161
minute: 39,

JSTests/test262/config.yaml

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,13 @@ skip:
2929
- test/built-ins/Temporal/Calendar
3030
- test/built-ins/Temporal/Instant/prototype/toZonedDateTime
3131
- test/built-ins/Temporal/Instant/prototype/toZonedDateTimeISO
32-
- test/built-ins/Temporal/Now
32+
- test/built-ins/Temporal/Now/plainDate
33+
- test/built-ins/Temporal/Now/plainDateISO
34+
- test/built-ins/Temporal/Now/plainDateTime
35+
- test/built-ins/Temporal/Now/plainDateTimeISO
36+
- test/built-ins/Temporal/Now/plainTimeISO
37+
- test/built-ins/Temporal/Now/zonedDateTime
38+
- test/built-ins/Temporal/Now/zonedDateTimeISO
3339
- test/built-ins/Temporal/PlainDate
3440
- test/built-ins/Temporal/PlainDateTime
3541
- test/built-ins/Temporal/PlainMonthDay
@@ -254,11 +260,13 @@ skip:
254260
- test/intl402/DateTimeFormat/prototype/formatToParts/temporal-objects-resolved-time-zone.js
255261

256262
# Depends on Temporal.PlainDateTime
263+
- test/built-ins/Temporal/Duration/prototype/add/balance-negative-result.js
257264
- test/built-ins/Temporal/Duration/prototype/add/calendar-dateuntil-called-with-singular-largestunit.js
258265
- test/built-ins/Temporal/Duration/prototype/add/infinity-throws-rangeerror.js
259266
- test/built-ins/Temporal/Duration/prototype/add/negative-infinity-throws-rangeerror.js
260267
- test/built-ins/Temporal/Duration/prototype/add/order-of-operations.js
261268
- test/built-ins/Temporal/Duration/prototype/round/dateuntil-field.js
269+
- test/built-ins/Temporal/Duration/prototype/subtract/balance-negative-result.js
262270
- test/built-ins/Temporal/Duration/prototype/subtract/calendar-dateuntil-called-with-singular-largestunit.js
263271
- test/built-ins/Temporal/Duration/prototype/subtract/infinity-throws-rangeerror.js
264272
- test/built-ins/Temporal/Duration/prototype/subtract/negative-infinity-throws-rangeerror.js
@@ -333,16 +341,6 @@ skip:
333341
- test/built-ins/Temporal/PlainTime/prototype/until/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-out-of-range.js
334342
- test/built-ins/Temporal/PlainTime/prototype/until/argument-zoneddatetime-timezone-getoffsetnanosecondsfor-wrong-type.js
335343

336-
# awaiting resolution: https://github.com/tc39/proposal-temporal/issues/1715
337-
- test/built-ins/Temporal/Duration/prototype/add/balance-negative-result.js
338-
- test/built-ins/Temporal/Duration/prototype/negated/subclassing-ignored.js
339-
- test/built-ins/Temporal/Duration/prototype/round/balance-negative-result.js
340-
- test/built-ins/Temporal/Duration/prototype/round/round-negative-result.js
341-
- test/built-ins/Temporal/Duration/prototype/subtract/balance-negative-result.js
342-
- test/built-ins/Temporal/Instant/prototype/until/instant-string.js
343-
- test/built-ins/Temporal/PlainTime/prototype/since/balance-negative-time-units.js
344-
- test/built-ins/Temporal/PlainTime/prototype/until/balance-negative-time-units.js
345-
346344
# Symbols as WeakMap keys proposal breaks existing tests https://github.com/tc39/proposal-symbols-as-weakmap-keys
347345
- test/built-ins/WeakMap/prototype/set/key-not-object-throw.js
348346
- test/built-ins/WeakSet/symbol-disallowed-as-weakset-key.js

0 commit comments

Comments
 (0)