Skip to content

Commit b202355

Browse files
committed
Add dyn Any context and some small changes
1 parent b5192f7 commit b202355

File tree

9 files changed

+586
-317
lines changed

9 files changed

+586
-317
lines changed

boa_engine/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ boa_profiler.workspace = true
6262
boa_macros.workspace = true
6363
boa_ast.workspace = true
6464
boa_parser.workspace = true
65-
boa_temporal.workspace = true
65+
boa_temporal = { workspace = true, features = ["context"] }
6666
serde = { workspace = true, features = ["derive", "rc"] }
6767
serde_json.workspace = true
6868
rand = "0.8.5"

boa_engine/src/builtins/temporal/calendar/mod.rs

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ impl Calendar {
159159
create_temporal_calendar(slot, None, context)
160160
}
161161

162-
fn get_id(this: &JsValue, _: &[JsValue], _: &mut Context) -> JsResult<JsValue> {
162+
fn get_id(this: &JsValue, _: &[JsValue], context: &mut Context) -> JsResult<JsValue> {
163163
let o = this.as_object().ok_or_else(|| {
164164
JsNativeError::typ().with_message("this value of Calendar must be an object.")
165165
})?;
@@ -174,7 +174,7 @@ impl Calendar {
174174
CalendarSlot::Protocol(proto) => proto.clone(),
175175
};
176176

177-
Ok(JsString::from(protocol.identifier()?.as_str()).into())
177+
Ok(JsString::from(protocol.identifier(context)?.as_str()).into())
178178
}
179179

180180
/// 15.8.2.1 `Temporal.Calendar.prototype.dateFromFields ( fields [ , options ] )` - Supercedes 12.5.4
@@ -217,7 +217,7 @@ impl Calendar {
217217
]);
218218

219219
// 6. If calendar.[[Identifier]] is "iso8601", then
220-
let mut fields = if protocol.identifier()?.as_str() == "iso8601" {
220+
let mut fields = if protocol.identifier(context)?.as_str() == "iso8601" {
221221
// a. Set fields to ? PrepareTemporalFields(fields, relevantFieldNames, « "year", "day" »).
222222
let mut required_fields = Vec::from([js_string!("year"), js_string!("day")]);
223223
fields::prepare_temporal_fields(
@@ -257,7 +257,7 @@ impl Calendar {
257257
// a. Perform ? CalendarResolveFields(calendar.[[Identifier]], fields, date).
258258
// b. Let result be ? CalendarDateToISO(calendar.[[Identifier]], fields, overflow).
259259

260-
let result = protocol.date_from_fields(&mut fields, overflow)?;
260+
let result = protocol.date_from_fields(&mut fields, overflow, context)?;
261261

262262
create_temporal_date(result, None, context).map(Into::into)
263263
}
@@ -296,7 +296,7 @@ impl Calendar {
296296
]);
297297

298298
// 6. Set fields to ? PrepareTemporalFields(fields, « "month", "monthCode", "year" », « "year" »).
299-
let mut fields = if protocol.identifier()?.as_str() == "iso8601" {
299+
let mut fields = if protocol.identifier(context)?.as_str() == "iso8601" {
300300
// a. Set fields to ? PrepareTemporalFields(fields, relevantFieldNames, « "year" »).
301301
let mut required_fields = Vec::from([js_string!("year")]);
302302
fields::prepare_temporal_fields(
@@ -333,7 +333,7 @@ impl Calendar {
333333
let overflow = get_option::<ArithmeticOverflow>(&options, utf16!("overflow"), context)?
334334
.unwrap_or(ArithmeticOverflow::Constrain);
335335

336-
let result = protocol.year_month_from_fields(&mut fields, overflow)?;
336+
let result = protocol.year_month_from_fields(&mut fields, overflow, context)?;
337337

338338
create_temporal_year_month(result, None, context)
339339
}
@@ -377,7 +377,7 @@ impl Calendar {
377377
]);
378378

379379
// 6. If calendar.[[Identifier]] is "iso8601", then
380-
let mut fields = if protocol.identifier()?.as_str() == "iso8601" {
380+
let mut fields = if protocol.identifier(context)?.as_str() == "iso8601" {
381381
// a. Set fields to ? PrepareTemporalFields(fields, relevantFieldNames, « "day" »).
382382
let mut required_fields = Vec::from([js_string!("day")]);
383383
fields::prepare_temporal_fields(
@@ -409,7 +409,7 @@ impl Calendar {
409409
let overflow = get_option(&options, utf16!("overflow"), context)?
410410
.unwrap_or(ArithmeticOverflow::Constrain);
411411

412-
let result = protocol.month_day_from_fields(&mut fields, overflow)?;
412+
let result = protocol.month_day_from_fields(&mut fields, overflow, context)?;
413413

414414
create_temporal_month_day(result, None, context)
415415
}
@@ -451,7 +451,7 @@ impl Calendar {
451451
// 8. Let balanceResult be ? BalanceTimeDuration(duration.[[Days]], duration.[[Hours]], duration.[[Minutes]], duration.[[Seconds]], duration.[[Milliseconds]], duration.[[Microseconds]], duration.[[Nanoseconds]], "day").
452452
duration.balance_time_duration(TemporalUnit::Day)?;
453453

454-
let result = protocol.date_add(&date.inner, &duration, overflow)?;
454+
let result = protocol.date_add(&date.inner, &duration, overflow, context)?;
455455

456456
create_temporal_date(result, None, context).map(Into::into)
457457
}
@@ -493,7 +493,7 @@ impl Calendar {
493493
)?
494494
.unwrap_or(TemporalUnit::Day);
495495

496-
let result = protocol.date_until(&one.inner, &two.inner, largest_unit)?;
496+
let result = protocol.date_until(&one.inner, &two.inner, largest_unit, context)?;
497497

498498
create_temporal_duration(result, None, context).map(Into::into)
499499
}
@@ -516,7 +516,7 @@ impl Calendar {
516516
let date_like = to_calendar_date_like(args.get_or_undefined(0), context)?;
517517

518518
let result = protocol
519-
.era(&date_like)?
519+
.era(&date_like, context)?
520520
.map_or(JsValue::undefined(), |r| JsString::from(r.as_str()).into());
521521

522522
Ok(result)
@@ -540,7 +540,7 @@ impl Calendar {
540540
let date_like = to_calendar_date_like(args.get_or_undefined(0), context)?;
541541

542542
let result = protocol
543-
.era_year(&date_like)?
543+
.era_year(&date_like, context)?
544544
.map_or(JsValue::undefined(), JsValue::from);
545545

546546
Ok(result)
@@ -563,7 +563,7 @@ impl Calendar {
563563

564564
let date_like = to_calendar_date_like(args.get_or_undefined(0), context)?;
565565

566-
let result = protocol.year(&date_like)?;
566+
let result = protocol.year(&date_like, context)?;
567567

568568
Ok(result.into())
569569
}
@@ -590,7 +590,7 @@ impl Calendar {
590590
// 4. If Type(temporalDateLike) is not Object or temporalDateLike does not have an [[InitializedTemporalDate]], [[InitializedTemporalDateTime]], or [[InitializedTemporalYearMonth]] internal slot, then
591591
// 4.a. Set temporalDateLike to ? ToTemporalDate(temporalDateLike).
592592

593-
let result = protocol.month(&date_like)?;
593+
let result = protocol.month(&date_like, context)?;
594594

595595
Ok(result.into())
596596
}
@@ -612,7 +612,7 @@ impl Calendar {
612612

613613
let date_like = to_calendar_date_like(args.get_or_undefined(0), context)?;
614614

615-
let result = protocol.month_code(&date_like)?;
615+
let result = protocol.month_code(&date_like, context)?;
616616

617617
Ok(JsString::from(result.as_str()).into())
618618
}
@@ -634,7 +634,7 @@ impl Calendar {
634634

635635
let date_like = to_calendar_date_like(args.get_or_undefined(0), context)?;
636636

637-
let result = protocol.day(&date_like)?;
637+
let result = protocol.day(&date_like, context)?;
638638

639639
Ok(result.into())
640640
}
@@ -659,7 +659,7 @@ impl Calendar {
659659
// 3. Let temporalDate be ? ToTemporalDate(temporalDateLike).
660660
let date = temporal::plain_date::to_temporal_date(args.get_or_undefined(0), None, context)?;
661661

662-
let result = protocol.day_of_week(&CalendarDateLike::Date(date.inner.clone()))?;
662+
let result = protocol.day_of_week(&CalendarDateLike::Date(date.inner.clone()), context)?;
663663

664664
Ok(result.into())
665665
}
@@ -683,7 +683,7 @@ impl Calendar {
683683
// 3. Let temporalDate be ? ToTemporalDate(temporalDateLike).
684684
let date = temporal::plain_date::to_temporal_date(args.get_or_undefined(0), None, context)?;
685685

686-
let result = protocol.day_of_year(&CalendarDateLike::Date(date.inner.clone()))?;
686+
let result = protocol.day_of_year(&CalendarDateLike::Date(date.inner.clone()), context)?;
687687

688688
Ok(result.into())
689689
}
@@ -706,7 +706,7 @@ impl Calendar {
706706
// 3. Let temporalDate be ? ToTemporalDate(temporalDateLike).
707707
let date = temporal::plain_date::to_temporal_date(args.get_or_undefined(0), None, context)?;
708708

709-
let result = protocol.week_of_year(&CalendarDateLike::Date(date.inner.clone()))?;
709+
let result = protocol.week_of_year(&CalendarDateLike::Date(date.inner.clone()), context)?;
710710

711711
Ok(result.into())
712712
}
@@ -729,7 +729,7 @@ impl Calendar {
729729
// 3. Let temporalDate be ? ToTemporalDate(temporalDateLike).
730730
let date = temporal::plain_date::to_temporal_date(args.get_or_undefined(0), None, context)?;
731731

732-
let result = protocol.year_of_week(&CalendarDateLike::Date(date.inner.clone()))?;
732+
let result = protocol.year_of_week(&CalendarDateLike::Date(date.inner.clone()), context)?;
733733

734734
Ok(result.into())
735735
}
@@ -752,7 +752,7 @@ impl Calendar {
752752
// 3. Let temporalDate be ? ToTemporalDate(temporalDateLike).
753753
let date = temporal::plain_date::to_temporal_date(args.get_or_undefined(0), None, context)?;
754754

755-
let result = protocol.days_in_week(&CalendarDateLike::Date(date.inner.clone()))?;
755+
let result = protocol.days_in_week(&CalendarDateLike::Date(date.inner.clone()), context)?;
756756

757757
Ok(result.into())
758758
}
@@ -774,7 +774,7 @@ impl Calendar {
774774

775775
let date_like = to_calendar_date_like(args.get_or_undefined(0), context)?;
776776

777-
let result = protocol.days_in_month(&date_like)?;
777+
let result = protocol.days_in_month(&date_like, context)?;
778778

779779
Ok(result.into())
780780
}
@@ -795,7 +795,7 @@ impl Calendar {
795795
};
796796

797797
let date_like = to_calendar_date_like(args.get_or_undefined(0), context)?;
798-
let result = protocol.days_in_year(&date_like)?;
798+
let result = protocol.days_in_year(&date_like, context)?;
799799

800800
Ok(result.into())
801801
}
@@ -821,7 +821,7 @@ impl Calendar {
821821

822822
let date_like = to_calendar_date_like(args.get_or_undefined(0), context)?;
823823

824-
let result = protocol.months_in_year(&date_like)?;
824+
let result = protocol.months_in_year(&date_like, context)?;
825825

826826
Ok(result.into())
827827
}
@@ -843,7 +843,7 @@ impl Calendar {
843843

844844
let date_like = to_calendar_date_like(args.get_or_undefined(0), context)?;
845845

846-
let result = protocol.in_leap_year(&date_like)?;
846+
let result = protocol.in_leap_year(&date_like, context)?;
847847

848848
Ok(result.into())
849849
}
@@ -916,7 +916,7 @@ impl Calendar {
916916

917917
// 7. Let result be fieldNames.
918918
// 8. If calendar.[[Identifier]] is not "iso8601", then
919-
if protocol.identifier()?.as_str() != "iso8601" {
919+
if protocol.identifier(context)?.as_str() != "iso8601" {
920920
// a. NOTE: Every built-in calendar preserves all input field names in output.
921921
// b. Let extraFieldDescriptors be CalendarFieldDescriptors(calendar.[[Identifier]], fieldNames).
922922
let extended_fields =
@@ -1160,7 +1160,7 @@ pub(crate) fn to_temporal_calendar_slot_value(
11601160
}
11611161

11621162
// Types: Box<dyn CalendarProtocol> <- UserCalendar
1163-
let protocol = Box::new(CustomRuntimeCalendar::new(calendar_like, context));
1163+
let protocol = Box::new(CustomRuntimeCalendar::new(calendar_like));
11641164
// c. Return temporalCalendarLike.
11651165
return Ok(CalendarSlot::Protocol(protocol));
11661166
}

0 commit comments

Comments
 (0)