Skip to content

Commit e3b061b

Browse files
committed
*FromFields() operations should use CalendarResolveFields(), not PrepareTemporalFields().
1 parent ee586f8 commit e3b061b

File tree

4 files changed

+28
-13
lines changed

4 files changed

+28
-13
lines changed

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/nodes/temporal/TemporalCalendarDateFromFieldsNode.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
import com.oracle.truffle.js.runtime.builtins.temporal.ISODateRecord;
5151
import com.oracle.truffle.js.runtime.builtins.temporal.JSTemporalPlainDate;
5252
import com.oracle.truffle.js.runtime.builtins.temporal.JSTemporalPlainDateObject;
53-
import com.oracle.truffle.js.runtime.objects.JSObject;
53+
import com.oracle.truffle.js.runtime.objects.JSDynamicObject;
5454
import com.oracle.truffle.js.runtime.util.TemporalUtil;
5555

5656
/**
@@ -61,15 +61,14 @@ public abstract class TemporalCalendarDateFromFieldsNode extends JavaScriptBaseN
6161
protected TemporalCalendarDateFromFieldsNode() {
6262
}
6363

64-
public abstract JSTemporalPlainDateObject execute(TruffleString calendar, Object fields, TemporalUtil.Overflow overflow);
64+
public abstract JSTemporalPlainDateObject execute(TruffleString calendar, JSDynamicObject fields, TemporalUtil.Overflow overflow);
6565

6666
@Specialization
67-
public JSTemporalPlainDateObject calendarDateFromFields(TruffleString calendar, Object fieldsParam, TemporalUtil.Overflow overflow,
67+
public JSTemporalPlainDateObject calendarDateFromFields(TruffleString calendar, JSDynamicObject fields, TemporalUtil.Overflow overflow,
6868
@Cached JSToIntegerOrInfinityNode toIntegerOrInfinity,
6969
@Cached InlinedBranchProfile errorBranch) {
7070
JSContext context = getJSContext();
71-
JSObject fields = TemporalUtil.prepareTemporalFields(context, fieldsParam, TemporalUtil.listDMMCY, TemporalUtil.listYD);
72-
TemporalUtil.isoResolveMonth(context, fields, toIntegerOrInfinity);
71+
TemporalUtil.calendarResolveFields(context, calendar, fields, TemporalUtil.CalendarResolveFieldsType.DATE, toIntegerOrInfinity);
7372
ISODateRecord result = TemporalUtil.isoDateFromFields(fields, overflow);
7473

7574
return JSTemporalPlainDate.create(context, getRealm(), result.year(), result.month(), result.day(), calendar, this, errorBranch);

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/nodes/temporal/TemporalMonthDayFromFieldsNode.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,11 @@ protected TemporalMonthDayFromFieldsNode() {
6464
public abstract JSTemporalPlainMonthDayObject execute(TruffleString calendar, JSDynamicObject fields, TemporalUtil.Overflow overflow);
6565

6666
@Specialization
67-
protected JSTemporalPlainMonthDayObject monthDayFromFields(TruffleString calendar, JSDynamicObject fieldsParam, TemporalUtil.Overflow overflow,
67+
protected JSTemporalPlainMonthDayObject monthDayFromFields(TruffleString calendar, JSDynamicObject fields, TemporalUtil.Overflow overflow,
6868
@Cached JSToIntegerOrInfinityNode toIntOrInfinityNode,
6969
@Cached InlinedBranchProfile errorBranch) {
7070
JSContext context = getJSContext();
71-
JSDynamicObject fields = TemporalUtil.prepareTemporalFields(context, fieldsParam, TemporalUtil.listDMMCY, TemporalUtil.listD);
72-
TemporalUtil.isoResolveMonth(context, fields, toIntOrInfinityNode);
71+
TemporalUtil.calendarResolveFields(context, calendar, fields, TemporalUtil.CalendarResolveFieldsType.MONTH_DAY, toIntOrInfinityNode);
7372
ISODateRecord result = TemporalUtil.isoMonthDayFromFields(fields, overflow);
7473
return JSTemporalPlainMonthDay.create(context, getRealm(),
7574
result.month(), result.day(), calendar, result.year(), this, errorBranch);

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/nodes/temporal/TemporalYearMonthFromFieldsNode.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,11 @@ protected TemporalYearMonthFromFieldsNode() {
6464
public abstract JSTemporalPlainYearMonthObject execute(TruffleString calendar, JSDynamicObject fields, TemporalUtil.Overflow overflow);
6565

6666
@Specialization
67-
protected JSTemporalPlainYearMonthObject yearMonthFromFields(TruffleString calendar, JSDynamicObject fieldsParam, TemporalUtil.Overflow overflow,
67+
protected JSTemporalPlainYearMonthObject yearMonthFromFields(TruffleString calendar, JSDynamicObject fields, TemporalUtil.Overflow overflow,
6868
@Cached JSToIntegerOrInfinityNode toIntegerOrInfinity,
6969
@Cached InlinedBranchProfile errorBranch) {
7070
JSContext context = getJSContext();
71-
JSDynamicObject fields = TemporalUtil.prepareTemporalFields(context, fieldsParam, TemporalUtil.listMMCY, TemporalUtil.listY);
72-
TemporalUtil.isoResolveMonth(context, fields, toIntegerOrInfinity);
71+
TemporalUtil.calendarResolveFields(context, calendar, fields, TemporalUtil.CalendarResolveFieldsType.YEAR_MONTH, toIntegerOrInfinity);
7372
ISODateRecord result = TemporalUtil.isoYearMonthFromFields(fields, overflow);
7473
return JSTemporalPlainYearMonth.create(getJSContext(), getRealm(),
7574
result.year(), result.month(), calendar, result.day(), this, errorBranch);

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/runtime/util/TemporalUtil.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,7 +1277,7 @@ private static Overflow toOverflow(TruffleString result) {
12771277
throw Errors.shouldNotReachHereUnexpectedValue(result);
12781278
}
12791279

1280-
public static JSTemporalDateTimeRecord interpretTemporalDateTimeFields(TruffleString calendar, Object fields, Overflow overflow,
1280+
public static JSTemporalDateTimeRecord interpretTemporalDateTimeFields(TruffleString calendar, JSDynamicObject fields, Overflow overflow,
12811281
TemporalCalendarDateFromFieldsNode dateFromFieldsNode) {
12821282
JSTemporalDateTimeRecord timeResult = toTemporalTimeRecord(fields);
12831283
JSTemporalPlainDateObject date = dateFromFieldsNode.execute(calendar, fields, overflow);
@@ -3262,9 +3262,27 @@ public static boolean isoYearMonthWithinLimits(int year, int month) {
32623262
return true;
32633263
}
32643264

3265+
public enum CalendarResolveFieldsType {
3266+
DATE,
3267+
YEAR_MONTH,
3268+
MONTH_DAY
3269+
}
3270+
32653271
// 12.1.38
32663272
@TruffleBoundary
3267-
public static void isoResolveMonth(JSContext ctx, JSDynamicObject fields, JSToIntegerOrInfinityNode toIntegerOrInfinity) {
3273+
public static void calendarResolveFields(JSContext ctx, TruffleString calendar, JSDynamicObject fields, CalendarResolveFieldsType type, JSToIntegerOrInfinityNode toIntegerOrInfinity) {
3274+
if (type != CalendarResolveFieldsType.MONTH_DAY) {
3275+
Object year = JSObject.get(fields, YEAR);
3276+
if (year == Undefined.instance) {
3277+
throw Errors.createTypeError("No year present.");
3278+
}
3279+
}
3280+
if (type != CalendarResolveFieldsType.YEAR_MONTH) {
3281+
Object day = JSObject.get(fields, DAY);
3282+
if (day == Undefined.instance) {
3283+
throw Errors.createTypeError("No day present.");
3284+
}
3285+
}
32683286
Object month = JSObject.get(fields, MONTH);
32693287
Object monthCode = JSObject.get(fields, MONTH_CODE);
32703288
if (monthCode == Undefined.instance) {

0 commit comments

Comments
 (0)