mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-10-31 13:20:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | ||
|  * Copyright (c) 2021, Idan Horowitz <idan.horowitz@serenityos.org>
 | ||
|  * Copyright (c) 2021-2023, Linus Groh <linusg@serenityos.org>
 | ||
|  * Copyright (c) 2024, Tim Flynn <trflynn89@ladybird.org>
 | ||
|  *
 | ||
|  * SPDX-License-Identifier: BSD-2-Clause
 | ||
|  */
 | ||
| 
 | ||
| #pragma once
 | ||
| 
 | ||
| #include <AK/Variant.h>
 | ||
| #include <LibJS/Forward.h>
 | ||
| #include <LibJS/Runtime/Completion.h>
 | ||
| #include <LibJS/Runtime/VM.h>
 | ||
| #include <LibJS/Runtime/ValueInlines.h>
 | ||
| 
 | ||
| namespace JS::Temporal {
 | ||
| 
 | ||
| // 13.39 ToIntegerIfIntegral ( argument ), https://tc39.es/proposal-temporal/#sec-tointegerifintegral
 | ||
| template<typename... Args>
 | ||
| ThrowCompletionOr<double> to_integer_if_integral(VM& vm, Value argument, ErrorType error_type, Args&&... args)
 | ||
| {
 | ||
|     // 1. Let number be ? ToNumber(argument).
 | ||
|     auto number = TRY(argument.to_number(vm));
 | ||
| 
 | ||
|     // 2. If number is not an integral Number, throw a RangeError exception.
 | ||
|     if (!number.is_integral_number())
 | ||
|         return vm.throw_completion<RangeError>(error_type, forward<Args>(args)...);
 | ||
| 
 | ||
|     // 3. Return ℝ(number).
 | ||
|     return number.as_double();
 | ||
| }
 | ||
| 
 | ||
| enum class OptionType {
 | ||
|     Boolean,
 | ||
|     String,
 | ||
| };
 | ||
| 
 | ||
| struct DefaultRequired { };
 | ||
| using OptionDefault = Variant<DefaultRequired, Empty, bool, StringView, double>;
 | ||
| 
 | ||
| ThrowCompletionOr<Object*> get_options_object(VM&, Value options);
 | ||
| ThrowCompletionOr<Value> get_option(VM&, Object const& options, PropertyKey const& property, OptionType type, ReadonlySpan<StringView> values, OptionDefault const&);
 | ||
| 
 | ||
| template<size_t Size>
 | ||
| ThrowCompletionOr<Value> get_option(VM& vm, Object const& options, PropertyKey const& property, OptionType type, StringView const (&values)[Size], OptionDefault const& default_)
 | ||
| {
 | ||
|     return get_option(vm, options, property, type, ReadonlySpan<StringView> { values }, default_);
 | ||
| }
 | ||
| 
 | ||
| }
 | 
