X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/14957cd040308e3eeec43d26bae5d76da13fcd85..cb9aa2694aba0ae4f946ed34b8e0f6c99c1cfe44:/profiler/CallIdentifier.h diff --git a/profiler/CallIdentifier.h b/profiler/CallIdentifier.h index 1ba5ec6..691fc62 100644 --- a/profiler/CallIdentifier.h +++ b/profiler/CallIdentifier.h @@ -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 @@ -27,41 +27,46 @@ #ifndef CallIdentifier_h #define CallIdentifier_h -#include #include #include +#include namespace JSC { struct CallIdentifier { WTF_MAKE_FAST_ALLOCATED; public: - UString m_name; - UString m_url; - unsigned m_lineNumber; - CallIdentifier() : m_lineNumber(0) + , m_columnNumber(0) { } - CallIdentifier(const UString& name, const UString& 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(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 : GenericHashTraits { static void constructDeletedValue(JSC::CallIdentifier& slot) { - new (&slot) JSC::CallIdentifier(JSC::UString(), JSC::UString(), std::numeric_limits::max()); + new (NotNull, &slot) JSC::CallIdentifier(String(), String(), std::numeric_limits::max(), std::numeric_limits::max()); } + static bool isDeletedValue(const JSC::CallIdentifier& value) { - return value.m_name.isNull() && value.m_url.isNull() && value.m_lineNumber == std::numeric_limits::max(); + return value.functionName().isNull() && value.url().isNull() && value.lineNumber() == std::numeric_limits::max() && value.columnNumber() == std::numeric_limits::max(); } }; } // namespace WTF #endif // CallIdentifier_h -