diff --git a/src/builtins/builtins-temporal-gen.cc b/src/builtins/builtins-temporal-gen.cc index eaa2eade1c..98c947ab7e 100644 --- a/src/builtins/builtins-temporal-gen.cc +++ b/src/builtins/builtins-temporal-gen.cc @@ -106,8 +106,8 @@ TNode TemporalBuiltinsAssembler::CalendarFieldsArrayFromIterable( // Notice this spec text is in the Chapter 15 of the #sup part not #sec // part. // 7. If calendar.[[Identifier]] is "iso8601", then - const TNode flags = - LoadObjectField(calendar, JSTemporalCalendar::kFlagsOffset); + const TNode flags = LoadAndUntagToWord32ObjectField( + calendar, JSTemporalCalendar::kFlagsOffset); // calendar is "iso8601" while the index of calendar is 0 const TNode index = Signed( DecodeWordFromWord32(flags)); diff --git a/test/intl/temporal/calendar/fields.js b/test/intl/temporal/calendar/fields.js new file mode 100644 index 0000000000..e3a4c7d746 --- /dev/null +++ b/test/intl/temporal/calendar/fields.js @@ -0,0 +1,24 @@ +// Copyright 2022 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// Flags: --harmony-temporal + +assertEquals(["year"], + (new Temporal.Calendar("iso8601")).fields(["year"])); + +assertEquals(["month", "year"], + (new Temporal.Calendar("iso8601")).fields(["month", "year"])); + +assertEquals(["year", "era", "eraYear"], + (new Temporal.Calendar("japanese")).fields(["year"])); + +assertEquals(["month", "year", "era", "eraYear"], + (new Temporal.Calendar("japanese")).fields(["month", "year"])); + +assertEquals(["year", "era", "eraYear"], + (new Temporal.Calendar("roc")).fields(["year"])); + +assertThrows( + () => (new Temporal.Calendar("japanese")).fields(["hello", "world"]), + RangeError);