diff options
Diffstat (limited to 'Source/JavaScriptCore/runtime/SmallStrings.h')
-rw-r--r-- | Source/JavaScriptCore/runtime/SmallStrings.h | 118 |
1 files changed, 40 insertions, 78 deletions
diff --git a/Source/JavaScriptCore/runtime/SmallStrings.h b/Source/JavaScriptCore/runtime/SmallStrings.h index b90394edb..0e8646a71 100644 --- a/Source/JavaScriptCore/runtime/SmallStrings.h +++ b/Source/JavaScriptCore/runtime/SmallStrings.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008, 2009, 2015 Apple Inc. All Rights Reserved. + * Copyright (C) 2008, 2009 Apple Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -26,9 +26,9 @@ #ifndef SmallStrings_h #define SmallStrings_h -#include "TypeofType.h" #include "WriteBarrier.h" #include <wtf/Noncopyable.h> +#include <wtf/OwnPtr.h> #define JSC_COMMON_STRINGS_EACH_NAME(macro) \ macro(boolean) \ @@ -39,7 +39,6 @@ macro(object) \ macro(undefined) \ macro(string) \ - macro(symbol) \ macro(true) namespace WTF { @@ -48,97 +47,60 @@ class StringImpl; namespace JSC { -class VM; -class JSString; -class SmallStringsStorage; -class SlotVisitor; + class HeapRootVisitor; + class VM; + class JSString; + class SmallStringsStorage; + class SlotVisitor; -static const unsigned maxSingleCharacterString = 0xFF; + static const unsigned maxSingleCharacterString = 0xFF; -class SmallStrings { - WTF_MAKE_NONCOPYABLE(SmallStrings); -public: - SmallStrings(); - ~SmallStrings(); + class SmallStrings { + WTF_MAKE_NONCOPYABLE(SmallStrings); + public: + SmallStrings(); + ~SmallStrings(); - JSString* emptyString() - { - return m_emptyString; - } + JSString* emptyString() + { + return m_emptyString; + } - JSString* singleCharacterString(unsigned char character) - { - return m_singleCharacterStrings[character]; - } + JSString* singleCharacterString(unsigned char character) + { + return m_singleCharacterStrings[character]; + } - JS_EXPORT_PRIVATE WTF::StringImpl* singleCharacterStringRep(unsigned char character); + JS_EXPORT_PRIVATE WTF::StringImpl* singleCharacterStringRep(unsigned char character); - JSString** singleCharacterStrings() { return &m_singleCharacterStrings[0]; } + JSString** singleCharacterStrings() { return &m_singleCharacterStrings[0]; } - void initializeCommonStrings(VM&); - void visitStrongReferences(SlotVisitor&); + void initializeCommonStrings(VM&); + void visitStrongReferences(SlotVisitor&); #define JSC_COMMON_STRINGS_ACCESSOR_DEFINITION(name) \ - JSString* name##String() const \ - { \ - return m_##name; \ - } - JSC_COMMON_STRINGS_EACH_NAME(JSC_COMMON_STRINGS_ACCESSOR_DEFINITION) -#undef JSC_COMMON_STRINGS_ACCESSOR_DEFINITION - - JSString* typeString(TypeofType type) const - { - switch (type) { - case TypeofType::Undefined: - return undefinedString(); - case TypeofType::Boolean: - return booleanString(); - case TypeofType::Number: - return numberString(); - case TypeofType::String: - return stringString(); - case TypeofType::Symbol: - return symbolString(); - case TypeofType::Object: - return objectString(); - case TypeofType::Function: - return functionString(); + JSString* name##String() const \ + { \ + return m_##name; \ } - - RELEASE_ASSERT_NOT_REACHED(); - return nullptr; - } - - JSString* objectStringStart() const { return m_objectStringStart; } - JSString* nullObjectString() const { return m_nullObjectString; } - JSString* undefinedObjectString() const { return m_undefinedObjectString; } - - bool needsToBeVisited(HeapOperation collectionType) const - { - if (collectionType == FullCollection) - return true; - return m_needsToBeVisited; - } + JSC_COMMON_STRINGS_EACH_NAME(JSC_COMMON_STRINGS_ACCESSOR_DEFINITION) +#undef JSC_COMMON_STRINGS_ACCESSOR_DEFINITION -private: - static const unsigned singleCharacterStringCount = maxSingleCharacterString + 1; + private: + static const unsigned singleCharacterStringCount = maxSingleCharacterString + 1; - void createEmptyString(VM*); - void createSingleCharacterString(VM*, unsigned char); + JS_EXPORT_PRIVATE void createEmptyString(VM*); + JS_EXPORT_PRIVATE void createSingleCharacterString(VM*, unsigned char); - void initialize(VM*, JSString*&, const char* value); + void initialize(VM* vm, JSString*& string, const char* value) const; - JSString* m_emptyString; + JSString* m_emptyString; #define JSC_COMMON_STRINGS_ATTRIBUTE_DECLARATION(name) JSString* m_##name; - JSC_COMMON_STRINGS_EACH_NAME(JSC_COMMON_STRINGS_ATTRIBUTE_DECLARATION) + JSC_COMMON_STRINGS_EACH_NAME(JSC_COMMON_STRINGS_ATTRIBUTE_DECLARATION) #undef JSC_COMMON_STRINGS_ATTRIBUTE_DECLARATION - JSString* m_objectStringStart; - JSString* m_nullObjectString; - JSString* m_undefinedObjectString; - JSString* m_singleCharacterStrings[singleCharacterStringCount]; - std::unique_ptr<SmallStringsStorage> m_storage; - bool m_needsToBeVisited; -}; + JSString* m_singleCharacterStrings[singleCharacterStringCount]; + OwnPtr<SmallStringsStorage> m_storage; + }; } // namespace JSC |