mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-11-04 15:20:58 +00:00 
			
		
		
		
	These functions all have a very common case that can be dealt with a very simple inline check, often avoiding the need to call an out-of-line function. This patch moves the common case to inline functions in a new ValueInlines.h header (necessary due to header dependency issues..) 8% speed-up on the entire Kraken benchmark :^)
		
			
				
	
	
		
			48 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (c) 2023, Andreas Kling <kling@serenityos.org>
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: BSD-2-Clause
 | 
						|
 */
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <LibJS/Runtime/Completion.h>
 | 
						|
#include <LibJS/Runtime/Value.h>
 | 
						|
 | 
						|
namespace JS {
 | 
						|
 | 
						|
inline bool Value::to_boolean() const
 | 
						|
{
 | 
						|
    // OPTIMIZATION: Fast path for when this value is already a boolean.
 | 
						|
    if (is_boolean())
 | 
						|
        return as_bool();
 | 
						|
 | 
						|
    return to_boolean_slow_case();
 | 
						|
}
 | 
						|
 | 
						|
inline ThrowCompletionOr<Value> Value::to_number(VM& vm) const
 | 
						|
{
 | 
						|
    // OPTIMIZATION: Fast path for when this value is already a number.
 | 
						|
    if (is_number())
 | 
						|
        return *this;
 | 
						|
 | 
						|
    return to_number_slow_case(vm);
 | 
						|
}
 | 
						|
 | 
						|
inline ThrowCompletionOr<Value> Value::to_numeric(VM& vm) const
 | 
						|
{
 | 
						|
    // OPTIMIZATION: Fast path for when this value is already a number.
 | 
						|
    if (is_number())
 | 
						|
        return *this;
 | 
						|
 | 
						|
    return to_numeric_slow_case(vm);
 | 
						|
}
 | 
						|
 | 
						|
inline ThrowCompletionOr<Value> Value::to_primitive(VM& vm, PreferredType preferred_type) const
 | 
						|
{
 | 
						|
    if (!is_object())
 | 
						|
        return *this;
 | 
						|
    return to_primitive_slow_case(vm, preferred_type);
 | 
						|
}
 | 
						|
 | 
						|
}
 |