X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/ba379fdc102753d6be2c4d937058fe40257329fe..refs/heads/master:/profiler/CallIdentifier.h?ds=sidebyside diff --git a/profiler/CallIdentifier.h b/profiler/CallIdentifier.h index ba48c55..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,40 +27,48 @@ #ifndef CallIdentifier_h #define CallIdentifier_h -#include -#include "FastAllocBase.h" +#include +#include +#include namespace JSC { - struct CallIdentifier : public FastAllocBase { - UString m_name; - UString m_url; - unsigned m_lineNumber; - + struct CallIdentifier { + WTF_MAKE_FAST_ALLOCATED; + public: CallIdentifier() : m_lineNumber(0) + , m_columnNumber(0) { } - CallIdentifier(const UString& name, const UString& url, int lineNumber) - : m_name(name) - , m_url(url) + 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.rep()->hash(), - key.m_url.rep()->hash(), - key.m_lineNumber + unsigned hashCodes[4] = { + key.m_functionName.impl()->hash(), + key.m_url.impl()->hash(), + key.m_lineNumber, + key.m_columnNumber }; - return UString::Rep::computeHash(reinterpret_cast(hashCodes), sizeof(hashCodes)); + return StringHasher::hashMemory(hashCodes); } static bool equal(const CallIdentifier& a, const CallIdentifier& b) { return a == b; } @@ -71,8 +79,14 @@ namespace JSC { #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_functionName.utf8().data(); } #endif + + private: + String m_functionName; + String m_url; + unsigned m_lineNumber; + unsigned m_columnNumber; }; } // namespace JSC @@ -84,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 -