Browse Source

AK: Move StringImpl::operator== implementation into StringImpl

Nico Weber 4 years ago
parent
commit
cc765e14ca
3 changed files with 9 additions and 8 deletions
  1. 1 4
      AK/String.cpp
  2. 7 0
      AK/StringImpl.h
  3. 1 4
      Libraries/LibJS/Runtime/StringOrSymbol.h

+ 1 - 4
AK/String.cpp

@@ -60,10 +60,7 @@ bool String::operator==(const String& other) const
     if (!other.m_impl)
         return false;
 
-    if (length() != other.length())
-        return false;
-
-    return !memcmp(characters(), other.characters(), length());
+    return *m_impl == *other.m_impl;
 }
 
 bool String::operator==(const StringView& other) const

+ 7 - 0
AK/StringImpl.h

@@ -70,6 +70,13 @@ public:
         return characters()[i];
     }
 
+    bool operator==(const StringImpl& other) const
+    {
+        if (length() != other.length())
+            return false;
+        return !__builtin_memcmp(characters(), other.characters(), length());
+    }
+
     unsigned hash() const
     {
         if (!m_has_hash)

+ 1 - 4
Libraries/LibJS/Runtime/StringOrSymbol.h

@@ -30,7 +30,6 @@
 #include <LibJS/Runtime/PrimitiveString.h>
 #include <LibJS/Runtime/Symbol.h>
 #include <LibJS/Runtime/Value.h>
-#include <string.h>
 
 namespace JS {
 
@@ -132,9 +131,7 @@ public:
                 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());
+            return *this_impl == *other_impl;
         }
         if (is_symbol())
             return other.is_symbol() && as_symbol() == other.as_symbol();