LibJS: Avoid creating a temporary String in StringOrSymbol::operator==

This commit is contained in:
Andreas Kling 2020-10-04 17:33:58 +02:00
parent d542049596
commit 3d053f244f
Notes: sideshowbarker 2024-07-19 02:03:43 +09:00

View file

@ -29,6 +29,7 @@
#include <LibJS/Runtime/PrimitiveString.h>
#include <LibJS/Runtime/Symbol.h>
#include <LibJS/Runtime/Value.h>
#include <string.h>
namespace JS {
@ -118,8 +119,15 @@ public:
ALWAYS_INLINE bool operator==(const StringOrSymbol& other) const
{
if (is_string())
return other.is_string() && as_string() == other.as_string();
if (is_string()) {
if (!other.is_string())
return false;
auto* this_impl = static_cast<const StringImpl*>(m_ptr);
auto* other_impl = static_cast<const StringImpl*>(other.m_ptr);
if (this_impl->length() != other_impl->length())
return false;
return !memcmp(this_impl->characters(), other_impl->characters(), this_impl->length());
}
if (is_symbol())
return other.is_symbol() && as_symbol() == other.as_symbol();
return true;