mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 09:02:43 +00:00 
			
		
		
		
	 fa692ae3f6
			
		
	
	
		fa692ae3f6
		
	
	
	
	
		
			
			Similar to 'Calendar Methods Record', this is part of a refactor to the temporal spec which will need much work for all of the corresponding AOs to be updated to use. Put in a new header file to prevent circular include problems when using this new record.
		
			
				
	
	
		
			44 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2024, Shannon Booth <shannon@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/String.h>
 | |
| #include <LibJS/Forward.h>
 | |
| #include <LibJS/Heap/GCPtr.h>
 | |
| 
 | |
| namespace JS::Temporal {
 | |
| 
 | |
| // 11.5.1 Time Zone Methods Records, https://tc39.es/proposal-temporal/#sec-temporal-time-zone-methods-records
 | |
| struct TimeZoneMethods {
 | |
|     // The time zone object, or a string indicating a built-in time zone.
 | |
|     Variant<String, NonnullGCPtr<Object>> receiver; // [[Reciever]]
 | |
| 
 | |
|     // The time zone's getOffsetNanosecondsFor method. For a built-in time zone this is always %Temporal.TimeZone.prototype.getOffsetNanosecondsFor%.
 | |
|     GCPtr<FunctionObject> get_offset_nanoseconds_for; // [[GetOffsetNanosecondsFor]]
 | |
| 
 | |
|     // The time zone's getPossibleInstantsFor method. For a built-in time zone this is always %Temporal.TimeZone.prototype.getPossibleInstantsFor%.
 | |
|     GCPtr<FunctionObject> get_possible_instants_for; // [[GetPossibleInstantsFor]]
 | |
| };
 | |
| 
 | |
| #define JS_ENUMERATE_TIME_ZONE_METHODS                                                           \
 | |
|     __JS_ENUMERATE(GetOffsetNanosecondsFor, getOffsetNanosecondsFor, get_offset_nanoseconds_for) \
 | |
|     __JS_ENUMERATE(GetPossibleInstantsFor, getPossibleInstantsFor, get_possible_instants_for)
 | |
| 
 | |
| enum class TimeZoneMethod {
 | |
| #define __JS_ENUMERATE(PascalName, camelName, snake_name) \
 | |
|     PascalName,
 | |
|     JS_ENUMERATE_TIME_ZONE_METHODS
 | |
| #undef __JS_ENUMERATE
 | |
| };
 | |
| 
 | |
| ThrowCompletionOr<void> time_zone_methods_record_lookup(VM&, TimeZoneMethods&, TimeZoneMethod);
 | |
| ThrowCompletionOr<TimeZoneMethods> create_time_zone_methods_record(VM&, Variant<String, NonnullGCPtr<Object>> time_zone, ReadonlySpan<TimeZoneMethod>);
 | |
| bool time_zone_methods_record_has_looked_up(TimeZoneMethods const&, TimeZoneMethod);
 | |
| bool time_zone_methods_record_is_builtin(TimeZoneMethods const&);
 | |
| ThrowCompletionOr<Value> time_zone_methods_record_call(VM&, TimeZoneMethods const&, TimeZoneMethod, ReadonlySpan<Value> arguments);
 | |
| 
 | |
| }
 |