#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 {
StringImpl* StringImpl::empty()
{
static NeverDestroyed<StringImpl> emptyString(ConstructEmptyString);
return &emptyString.get();
}
unsigned StringImpl::hashAndFlagsForEmptyUnique()
{
static unsigned s_nextHashAndFlagsForEmptyUnique = BufferInternal | s_hashFlag8BitBuffer | s_hashFlagIsAtomic;
s_nextHashAndFlagsForEmptyUnique += 1 << s_flagCount;
s_nextHashAndFlagsForEmptyUnique |= 1 << 31;
return s_nextHashAndFlagsForEmptyUnique;
}
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, nullAtom)
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, emptyAtom)
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, textAtom)
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, commentAtom)
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, starAtom)
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, xmlAtom)
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, xmlnsAtom)
WTF_EXPORTDATA DEFINE_GLOBAL(AtomicString, xlinkAtom)
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();
}
void AtomicString::init()
{
static bool initialized;
if (!initialized) {
ASSERT(isUIThread());
new (NotNull, (void*)&nullAtom) AtomicString;
new (NotNull, (void*)&emptyAtom) AtomicString("");
new (NotNull, (void*)&textAtom) AtomicString("#text", AtomicString::ConstructFromLiteral);
new (NotNull, (void*)&commentAtom) AtomicString("#comment", AtomicString::ConstructFromLiteral);
new (NotNull, (void*)&starAtom) AtomicString("*", AtomicString::ConstructFromLiteral);
new (NotNull, (void*)&xmlAtom) AtomicString("xml", AtomicString::ConstructFromLiteral);
new (NotNull, (void*)&xmlnsAtom) AtomicString("xmlns", AtomicString::ConstructFromLiteral);
new (NotNull, (void*)&xlinkAtom) AtomicString("xlink", AtomicString::ConstructFromLiteral);
initialized = true;
}
}
}