#include "config.h"
#ifdef SKIP_STATIC_CONSTRUCTORS_ON_GCC
#define ATOMICSTRING_HIDE_GLOBALS 1
#endif
#include "AtomicString.h"
#include "MainThread.h"
#include "NeverDestroyed.h"
#include "StaticConstructors.h"
#include "StringImpl.h"
#if USE(WEB_THREAD)
#include <pthread.h>
#endif
namespace WTF {
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, nullAtom)
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, emptyAtom)
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, starAtom)
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, xmlAtom)
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, xmlnsAtom)
NEVER_INLINE unsigned StringImpl::hashSlowCase() const
{
if (is8Bit())
setHash(StringHasher::computeHashAndMaskTop8Bits(m_data8, m_length));
else
setHash(StringHasher::computeHashAndMaskTop8Bits(m_data16, m_length));
return existingHash();
}
unsigned StringImpl::concurrentHash() const
{
unsigned hash;
if (is8Bit())
hash = StringHasher::computeHashAndMaskTop8Bits(m_data8, m_length);
else
hash = StringHasher::computeHashAndMaskTop8Bits(m_data16, m_length);
ASSERT(((hash << s_flagCount) >> s_flagCount) == hash);
return hash;
}
void AtomicString::init()
{
static bool initialized;
if (!initialized) {
ASSERT(isUIThread());
new (NotNull, (void*)&nullAtom) AtomicString;
new (NotNull, (void*)&emptyAtom) AtomicString("");
new (NotNull, (void*)&starAtom) AtomicString("*", AtomicString::ConstructFromLiteral);
new (NotNull, (void*)&xmlAtom) AtomicString("xml", AtomicString::ConstructFromLiteral);
new (NotNull, (void*)&xmlnsAtom) AtomicString("xmlns", AtomicString::ConstructFromLiteral);
initialized = true;
}
}
}