mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 12:12:45 +00:00 
			
		
		
		
	LibJS: Make DisambiguatePossibleInstants take a vector of NonullGCPtr
Instead of a raw pointer. Then deal with the fallout of making that change.
This commit is contained in:
		
							parent
							
								
									53a247dbe1
								
							
						
					
					
						commit
						aa9cdc2205
					
				
					 7 changed files with 19 additions and 19 deletions
				
			
		|  | @ -596,7 +596,7 @@ JS_DEFINE_NATIVE_FUNCTION(PlainDatePrototype::to_zoned_date_time) | |||
|     } | ||||
| 
 | ||||
|     // 7. Let instant be ? BuiltinTimeZoneGetInstantFor(timeZone, temporalDateTime, "compatible").
 | ||||
|     auto* instant = TRY(builtin_time_zone_get_instant_for(vm, time_zone, *temporal_date_time, "compatible"sv)); | ||||
|     auto instant = TRY(builtin_time_zone_get_instant_for(vm, time_zone, *temporal_date_time, "compatible"sv)); | ||||
| 
 | ||||
|     // 8. Return ! CreateTemporalZonedDateTime(instant.[[Nanoseconds]], timeZone, temporalDate.[[Calendar]]).
 | ||||
|     return MUST(create_temporal_zoned_date_time(vm, instant->nanoseconds(), *time_zone, temporal_date->calendar())); | ||||
|  |  | |||
|  | @ -674,7 +674,7 @@ JS_DEFINE_NATIVE_FUNCTION(PlainDateTimePrototype::to_zoned_date_time) | |||
|     auto disambiguation = TRY(to_temporal_disambiguation(vm, options)); | ||||
| 
 | ||||
|     // 6. Let instant be ? BuiltinTimeZoneGetInstantFor(timeZone, dateTime, disambiguation).
 | ||||
|     auto* instant = TRY(builtin_time_zone_get_instant_for(vm, time_zone, date_time, disambiguation)); | ||||
|     auto instant = TRY(builtin_time_zone_get_instant_for(vm, time_zone, date_time, disambiguation)); | ||||
| 
 | ||||
|     // 7. Return ! CreateTemporalZonedDateTime(instant.[[Nanoseconds]], timeZone, dateTime.[[Calendar]]).
 | ||||
|     return MUST(create_temporal_zoned_date_time(vm, instant->nanoseconds(), *time_zone, date_time->calendar())); | ||||
|  |  | |||
|  | @ -411,7 +411,7 @@ JS_DEFINE_NATIVE_FUNCTION(PlainTimePrototype::to_zoned_date_time) | |||
|     auto* temporal_date_time = TRY(create_temporal_date_time(vm, temporal_date->iso_year(), temporal_date->iso_month(), temporal_date->iso_day(), temporal_time->iso_hour(), temporal_time->iso_minute(), temporal_time->iso_second(), temporal_time->iso_millisecond(), temporal_time->iso_microsecond(), temporal_time->iso_nanosecond(), temporal_date->calendar())); | ||||
| 
 | ||||
|     // 11. Let instant be ? BuiltinTimeZoneGetInstantFor(timeZone, temporalDateTime, "compatible").
 | ||||
|     auto* instant = TRY(builtin_time_zone_get_instant_for(vm, time_zone, *temporal_date_time, "compatible"sv)); | ||||
|     auto instant = TRY(builtin_time_zone_get_instant_for(vm, time_zone, *temporal_date_time, "compatible"sv)); | ||||
| 
 | ||||
|     // 12. Return ! CreateTemporalZonedDateTime(instant.[[Nanoseconds]], timeZone, temporalDate.[[Calendar]]).
 | ||||
|     return MUST(create_temporal_zoned_date_time(vm, instant->nanoseconds(), *time_zone, temporal_date->calendar())); | ||||
|  |  | |||
|  | @ -384,7 +384,7 @@ ThrowCompletionOr<PlainDateTime*> builtin_time_zone_get_plain_date_time_for(VM& | |||
| } | ||||
| 
 | ||||
| // 11.6.11 BuiltinTimeZoneGetInstantFor ( timeZone, dateTime, disambiguation ), https://tc39.es/proposal-temporal/#sec-temporal-builtintimezonegetinstantfor
 | ||||
| ThrowCompletionOr<Instant*> builtin_time_zone_get_instant_for(VM& vm, Value time_zone, PlainDateTime& date_time, StringView disambiguation) | ||||
| ThrowCompletionOr<NonnullGCPtr<Instant>> builtin_time_zone_get_instant_for(VM& vm, Value time_zone, PlainDateTime& date_time, StringView disambiguation) | ||||
| { | ||||
|     // 1. Assert: dateTime has an [[InitializedTemporalDateTime]] internal slot.
 | ||||
| 
 | ||||
|  | @ -396,7 +396,7 @@ ThrowCompletionOr<Instant*> builtin_time_zone_get_instant_for(VM& vm, Value time | |||
| } | ||||
| 
 | ||||
| // 11.6.12 DisambiguatePossibleInstants ( possibleInstants, timeZone, dateTime, disambiguation ), https://tc39.es/proposal-temporal/#sec-temporal-disambiguatepossibleinstants
 | ||||
| ThrowCompletionOr<Instant*> disambiguate_possible_instants(VM& vm, MarkedVector<Instant*> const& possible_instants, Value time_zone, PlainDateTime& date_time, StringView disambiguation) | ||||
| ThrowCompletionOr<NonnullGCPtr<Instant>> disambiguate_possible_instants(VM& vm, MarkedVector<NonnullGCPtr<Instant>> const& possible_instants, Value time_zone, PlainDateTime& date_time, StringView disambiguation) | ||||
| { | ||||
|     // 1. Assert: dateTime has an [[InitializedTemporalDateTime]] internal slot.
 | ||||
| 
 | ||||
|  | @ -514,7 +514,7 @@ ThrowCompletionOr<Instant*> disambiguate_possible_instants(VM& vm, MarkedVector< | |||
| } | ||||
| 
 | ||||
| // 11.6.13 GetPossibleInstantsFor ( timeZone, dateTime ), https://tc39.es/proposal-temporal/#sec-temporal-getpossibleinstantsfor
 | ||||
| ThrowCompletionOr<MarkedVector<Instant*>> get_possible_instants_for(VM& vm, Value time_zone, PlainDateTime& date_time) | ||||
| ThrowCompletionOr<MarkedVector<NonnullGCPtr<Instant>>> get_possible_instants_for(VM& vm, Value time_zone, PlainDateTime& date_time) | ||||
| { | ||||
|     // 1. Assert: dateTime has an [[InitializedTemporalDateTime]] internal slot.
 | ||||
| 
 | ||||
|  | @ -525,7 +525,7 @@ ThrowCompletionOr<MarkedVector<Instant*>> get_possible_instants_for(VM& vm, Valu | |||
|     auto iterator = TRY(get_iterator(vm, possible_instants, IteratorHint::Sync)); | ||||
| 
 | ||||
|     // 4. Let list be a new empty List.
 | ||||
|     auto list = MarkedVector<Instant*> { vm.heap() }; | ||||
|     auto list = MarkedVector<NonnullGCPtr<Instant>> { vm.heap() }; | ||||
| 
 | ||||
|     // 5. Let next be true.
 | ||||
|     GCPtr<Object> next; | ||||
|  | @ -550,7 +550,7 @@ ThrowCompletionOr<MarkedVector<Instant*>> get_possible_instants_for(VM& vm, Valu | |||
|             } | ||||
| 
 | ||||
|             // iii. Append nextValue to the end of the List list.
 | ||||
|             list.append(static_cast<Instant*>(&next_value.as_object())); | ||||
|             list.append(verify_cast<Instant>(next_value.as_object())); | ||||
|         } | ||||
|     } while (next != nullptr); | ||||
| 
 | ||||
|  |  | |||
|  | @ -49,9 +49,9 @@ ThrowCompletionOr<Object*> to_temporal_time_zone(VM&, Value temporal_time_zone_l | |||
| ThrowCompletionOr<double> get_offset_nanoseconds_for(VM&, Value time_zone, Instant&); | ||||
| ThrowCompletionOr<String> builtin_time_zone_get_offset_string_for(VM&, Value time_zone, Instant&); | ||||
| ThrowCompletionOr<PlainDateTime*> builtin_time_zone_get_plain_date_time_for(VM&, Value time_zone, Instant&, Object& calendar); | ||||
| ThrowCompletionOr<Instant*> builtin_time_zone_get_instant_for(VM&, Value time_zone, PlainDateTime&, StringView disambiguation); | ||||
| ThrowCompletionOr<Instant*> disambiguate_possible_instants(VM&, MarkedVector<Instant*> const& possible_instants, Value time_zone, PlainDateTime&, StringView disambiguation); | ||||
| ThrowCompletionOr<MarkedVector<Instant*>> get_possible_instants_for(VM&, Value time_zone, PlainDateTime&); | ||||
| ThrowCompletionOr<NonnullGCPtr<Instant>> builtin_time_zone_get_instant_for(VM&, Value time_zone, PlainDateTime&, StringView disambiguation); | ||||
| ThrowCompletionOr<NonnullGCPtr<Instant>> disambiguate_possible_instants(VM&, MarkedVector<NonnullGCPtr<Instant>> const& possible_instants, Value time_zone, PlainDateTime&, StringView disambiguation); | ||||
| ThrowCompletionOr<MarkedVector<NonnullGCPtr<Instant>>> get_possible_instants_for(VM&, Value time_zone, PlainDateTime&); | ||||
| ThrowCompletionOr<bool> time_zone_equals(VM&, Object& one, Object& two); | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -52,7 +52,7 @@ ThrowCompletionOr<BigInt const*> interpret_iso_date_time_offset(VM& vm, i32 year | |||
|     // 3. If offsetBehaviour is wall or offsetOption is "ignore", then
 | ||||
|     if (offset_behavior == OffsetBehavior::Wall || offset_option == "ignore"sv) { | ||||
|         // a. Let instant be ? BuiltinTimeZoneGetInstantFor(timeZone, dateTime, disambiguation).
 | ||||
|         auto* instant = TRY(builtin_time_zone_get_instant_for(vm, time_zone, *date_time, disambiguation)); | ||||
|         auto instant = TRY(builtin_time_zone_get_instant_for(vm, time_zone, *date_time, disambiguation)); | ||||
| 
 | ||||
|         // b. Return instant.[[Nanoseconds]].
 | ||||
|         return &instant->nanoseconds(); | ||||
|  | @ -84,7 +84,7 @@ ThrowCompletionOr<BigInt const*> interpret_iso_date_time_offset(VM& vm, i32 year | |||
|     auto possible_instants = TRY(get_possible_instants_for(vm, time_zone, *date_time)); | ||||
| 
 | ||||
|     // 8. For each element candidate of possibleInstants, do
 | ||||
|     for (auto* candidate : possible_instants) { | ||||
|     for (auto candidate : possible_instants) { | ||||
|         // a. Let candidateNanoseconds be ? GetOffsetNanosecondsFor(timeZone, candidate).
 | ||||
|         auto candidate_nanoseconds = TRY(get_offset_nanoseconds_for(vm, time_zone, *candidate)); | ||||
| 
 | ||||
|  | @ -112,7 +112,7 @@ ThrowCompletionOr<BigInt const*> interpret_iso_date_time_offset(VM& vm, i32 year | |||
|         return vm.throw_completion<RangeError>(ErrorType::TemporalInvalidZonedDateTimeOffset); | ||||
| 
 | ||||
|     // 10. Let instant be ? DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation).
 | ||||
|     auto* instant = TRY(disambiguate_possible_instants(vm, possible_instants, time_zone, *date_time, disambiguation)); | ||||
|     auto instant = TRY(disambiguate_possible_instants(vm, possible_instants, time_zone, *date_time, disambiguation)); | ||||
| 
 | ||||
|     // 11. Return instant.[[Nanoseconds]].
 | ||||
|     return &instant->nanoseconds(); | ||||
|  | @ -392,7 +392,7 @@ ThrowCompletionOr<BigInt*> add_zoned_date_time(VM& vm, BigInt const& epoch_nanos | |||
|     auto* intermediate_date_time = TRY(create_temporal_date_time(vm, added_date->iso_year(), added_date->iso_month(), added_date->iso_day(), temporal_date_time->iso_hour(), temporal_date_time->iso_minute(), temporal_date_time->iso_second(), temporal_date_time->iso_millisecond(), temporal_date_time->iso_microsecond(), temporal_date_time->iso_nanosecond(), calendar)); | ||||
| 
 | ||||
|     // 10. Let intermediateInstant be ? BuiltinTimeZoneGetInstantFor(timeZone, intermediateDateTime, "compatible").
 | ||||
|     auto* intermediate_instant = TRY(builtin_time_zone_get_instant_for(vm, time_zone, *intermediate_date_time, "compatible"sv)); | ||||
|     auto intermediate_instant = TRY(builtin_time_zone_get_instant_for(vm, time_zone, *intermediate_date_time, "compatible"sv)); | ||||
| 
 | ||||
|     // 11. Return ? AddInstant(intermediateInstant.[[Nanoseconds]], hours, minutes, seconds, milliseconds, microseconds, nanoseconds).
 | ||||
|     return add_instant(vm, intermediate_instant->nanoseconds(), hours, minutes, seconds, milliseconds, microseconds, nanoseconds); | ||||
|  |  | |||
|  | @ -538,10 +538,10 @@ JS_DEFINE_NATIVE_FUNCTION(ZonedDateTimePrototype::hours_in_day_getter) | |||
|     auto* tomorrow = TRY(create_temporal_date_time(vm, tomorrow_fields.year, tomorrow_fields.month, tomorrow_fields.day, 0, 0, 0, 0, 0, 0, *iso_calendar)); | ||||
| 
 | ||||
|     // 13. Let todayInstant be ? BuiltinTimeZoneGetInstantFor(timeZone, today, "compatible").
 | ||||
|     auto* today_instant = TRY(builtin_time_zone_get_instant_for(vm, &time_zone, *today, "compatible"sv)); | ||||
|     auto today_instant = TRY(builtin_time_zone_get_instant_for(vm, &time_zone, *today, "compatible"sv)); | ||||
| 
 | ||||
|     // 14. Let tomorrowInstant be ? BuiltinTimeZoneGetInstantFor(timeZone, tomorrow, "compatible").
 | ||||
|     auto* tomorrow_instant = TRY(builtin_time_zone_get_instant_for(vm, &time_zone, *tomorrow, "compatible"sv)); | ||||
|     auto tomorrow_instant = TRY(builtin_time_zone_get_instant_for(vm, &time_zone, *tomorrow, "compatible"sv)); | ||||
| 
 | ||||
|     // 15. Let diffNs be tomorrowInstant.[[Nanoseconds]] - todayInstant.[[Nanoseconds]].
 | ||||
|     auto diff_ns = tomorrow_instant->nanoseconds().big_integer().minus(today_instant->nanoseconds().big_integer()); | ||||
|  | @ -1041,7 +1041,7 @@ JS_DEFINE_NATIVE_FUNCTION(ZonedDateTimePrototype::round) | |||
|     auto* dt_start = TRY(create_temporal_date_time(vm, temporal_date_time->iso_year(), temporal_date_time->iso_month(), temporal_date_time->iso_day(), 0, 0, 0, 0, 0, 0, *iso_calendar)); | ||||
| 
 | ||||
|     // 15. Let instantStart be ? BuiltinTimeZoneGetInstantFor(timeZone, dtStart, "compatible").
 | ||||
|     auto* instant_start = TRY(builtin_time_zone_get_instant_for(vm, &time_zone, *dt_start, "compatible"sv)); | ||||
|     auto instant_start = TRY(builtin_time_zone_get_instant_for(vm, &time_zone, *dt_start, "compatible"sv)); | ||||
| 
 | ||||
|     // 16. Let startNs be instantStart.[[Nanoseconds]].
 | ||||
|     auto& start_ns = instant_start->nanoseconds(); | ||||
|  | @ -1175,7 +1175,7 @@ JS_DEFINE_NATIVE_FUNCTION(ZonedDateTimePrototype::start_of_day) | |||
|     auto* start_date_time = TRY(create_temporal_date_time(vm, temporal_date_time->iso_year(), temporal_date_time->iso_month(), temporal_date_time->iso_day(), 0, 0, 0, 0, 0, 0, calendar)); | ||||
| 
 | ||||
|     // 8. Let startInstant be ? BuiltinTimeZoneGetInstantFor(timeZone, startDateTime, "compatible").
 | ||||
|     auto* start_instant = TRY(builtin_time_zone_get_instant_for(vm, &time_zone, *start_date_time, "compatible"sv)); | ||||
|     auto start_instant = TRY(builtin_time_zone_get_instant_for(vm, &time_zone, *start_date_time, "compatible"sv)); | ||||
| 
 | ||||
|     // 9. Return ! CreateTemporalZonedDateTime(startInstant.[[Nanoseconds]], timeZone, calendar).
 | ||||
|     return MUST(create_temporal_zoned_date_time(vm, start_instant->nanoseconds(), time_zone, calendar)); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Shannon Booth
						Shannon Booth