]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - profiler/CallIdentifier.h
JavaScriptCore-7600.1.4.11.8.tar.gz
[apple/javascriptcore.git] / profiler / CallIdentifier.h
index bf9f904b0b9cec41da0d3f601e74781c01cfc6ae..691fc625086700151c9847ba82423d5d70fe9754 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2008, 2014 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -36,32 +36,37 @@ namespace JSC {
     struct CallIdentifier {
         WTF_MAKE_FAST_ALLOCATED;
     public:
-        String m_name;
-        String m_url;
-        unsigned m_lineNumber;
-
         CallIdentifier()
             : m_lineNumber(0)
+            , m_columnNumber(0)
         {
         }
 
-        CallIdentifier(const String& name, const String& url, int lineNumber)
-            : m_name(name)
+        CallIdentifier(const String& functionName, const String& url, unsigned lineNumber, unsigned columnNumber)
+            : m_functionName(functionName)
             , m_url(!url.isNull() ? url : "")
             , m_lineNumber(lineNumber)
+            , m_columnNumber(columnNumber)
         {
         }
 
-        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); }
+        const String& functionName() const { return m_functionName; }
+
+        const String& url() const { return m_url; }
+        unsigned lineNumber() const { return m_lineNumber; }
+        unsigned columnNumber() const { return m_columnNumber; }
+
+        inline bool operator==(const CallIdentifier& other) const { return other.m_lineNumber == m_lineNumber && other.m_columnNumber == m_columnNumber && other.m_functionName == m_functionName && other.m_url == m_url; }
+        inline bool operator!=(const CallIdentifier& other) const { return !(*this == other); }
 
         struct Hash {
             static unsigned hash(const CallIdentifier& key)
             {
-                unsigned hashCodes[3] = {
-                    key.m_name.impl()->hash(),
+                unsigned hashCodes[4] = {
+                    key.m_functionName.impl()->hash(),
                     key.m_url.impl()->hash(),
-                    key.m_lineNumber
+                    key.m_lineNumber,
+                    key.m_columnNumber
                 };
                 return StringHasher::hashMemory<sizeof(hashCodes)>(hashCodes);
             }
@@ -74,8 +79,14 @@ namespace JSC {
 
 #ifndef NDEBUG
         operator const char*() const { return c_str(); }
-        const char* c_str() const { return m_name.utf8().data(); }
+        const char* c_str() const { return m_functionName.utf8().data(); }
 #endif
+
+    private:
+        String m_functionName;
+        String m_url;
+        unsigned m_lineNumber;
+        unsigned m_columnNumber;
     };
 
 } // namespace JSC
@@ -87,15 +98,15 @@ namespace WTF {
     template<> struct HashTraits<JSC::CallIdentifier> : GenericHashTraits<JSC::CallIdentifier> {
         static void constructDeletedValue(JSC::CallIdentifier& slot)
         {
-            new (NotNull, &slot) JSC::CallIdentifier(String(), String(), std::numeric_limits<unsigned>::max());
+            new (NotNull, &slot) JSC::CallIdentifier(String(), String(), std::numeric_limits<unsigned>::max(), std::numeric_limits<unsigned>::max());
         }
+
         static bool isDeletedValue(const JSC::CallIdentifier& value)
         {
-            return value.m_name.isNull() && value.m_url.isNull() && value.m_lineNumber == std::numeric_limits<unsigned>::max();
+            return value.functionName().isNull() && value.url().isNull() && value.lineNumber() == std::numeric_limits<unsigned>::max() && value.columnNumber() == std::numeric_limits<unsigned>::max();
         }
     };
 
 } // namespace WTF
 
 #endif  // CallIdentifier_h
-