]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - profiler/CallIdentifier.h
JavaScriptCore-721.26.tar.gz
[apple/javascriptcore.git] / profiler / CallIdentifier.h
index 6ceef13641db355faa1c89c437edcd6d5748857e..f2d04fca91b32a565dd1f141f3de1a51a5a659d0 100644 (file)
 #define CallIdentifier_h
 
 #include <runtime/UString.h>
+#include "FastAllocBase.h"
 
 namespace JSC {
 
-    struct CallIdentifier {
+    struct CallIdentifier : public FastAllocBase {
         UString m_name;
         UString m_url;
         unsigned m_lineNumber;
@@ -43,7 +44,7 @@ namespace JSC {
 
         CallIdentifier(const UString& name, const UString& url, int lineNumber)
             : m_name(name)
-            , m_url(url)
+            , m_url(!url.isNull() ? url : "")
             , m_lineNumber(lineNumber)
         {
         }
@@ -51,32 +52,34 @@ namespace JSC {
         inline bool operator==(const CallIdentifier& ci) const { return ci.m_lineNumber == m_lineNumber && ci.m_name == m_name && ci.m_url == m_url; }
         inline bool operator!=(const CallIdentifier& ci) const { return !(*this == ci); }
 
+        struct Hash {
+            static unsigned hash(const CallIdentifier& key)
+            {
+                unsigned hashCodes[3] = {
+                    key.m_name.rep()->hash(),
+                    key.m_url.rep()->hash(),
+                    key.m_lineNumber
+                };
+                return UString::Rep::computeHash(reinterpret_cast<char*>(hashCodes), sizeof(hashCodes));
+            }
+
+            static bool equal(const CallIdentifier& a, const CallIdentifier& b) { return a == b; }
+            static const bool safeToCompareToEmptyOrDeleted = true;
+        };
+
+        unsigned hash() const { return Hash::hash(*this); }
+
 #ifndef NDEBUG
         operator const char*() const { return c_str(); }
-        const char* c_str() const { return m_name.UTF8String().c_str(); }
+        const char* c_str() const { return m_name.UTF8String().data(); }
 #endif
     };
 
-    struct CallIdentifierHash {
-        static unsigned hash(const CallIdentifier& key)
-        {
-            unsigned hashCodes[3] = {
-                key.m_name.rep()->hash(),
-                key.m_url.rep()->hash(),
-                key.m_lineNumber
-            };
-            return UString::Rep::computeHash(reinterpret_cast<char*>(hashCodes), sizeof(hashCodes));
-        }
-
-        static bool equal(const CallIdentifier& a, const CallIdentifier& b) { return a == b; }
-        static const bool safeToCompareToEmptyOrDeleted = true;
-    };
-
 } // namespace JSC
 
 namespace WTF {
 
-    template<> struct DefaultHash<JSC::CallIdentifier> { typedef JSC::CallIdentifierHash Hash; };
+    template<> struct DefaultHash<JSC::CallIdentifier> { typedef JSC::CallIdentifier::Hash Hash; };
 
     template<> struct HashTraits<JSC::CallIdentifier> : GenericHashTraits<JSC::CallIdentifier> {
         static void constructDeletedValue(JSC::CallIdentifier& slot)