X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/2d39b0e377c0896910ee49ae70082ba665faf986..refs/heads/master:/parser/ParserArena.h?ds=sidebyside diff --git a/parser/ParserArena.h b/parser/ParserArena.h index d8bc2cf..2a7d44d 100644 --- a/parser/ParserArena.h +++ b/parser/ParserArena.h @@ -34,7 +34,6 @@ namespace JSC { class ParserArenaDeletable; - class ParserArenaRefCounted; class IdentifierArena { WTF_MAKE_FAST_ALLOCATED; @@ -46,12 +45,11 @@ namespace JSC { template ALWAYS_INLINE const Identifier& makeIdentifier(VM*, const T* characters, size_t length); + ALWAYS_INLINE const Identifier& makeEmptyIdentifier(VM*); ALWAYS_INLINE const Identifier& makeIdentifierLCharFromUChar(VM*, const UChar* characters, size_t length); const Identifier& makeNumericIdentifier(VM*, double number); - bool isEmpty() const { return m_identifiers.isEmpty(); } - public: static const int MaximumCachableCharacter = 128; typedef SegmentedVector IdentifierVector; @@ -76,24 +74,29 @@ namespace JSC { if (!length) return vm->propertyNames->emptyIdentifier; if (characters[0] >= MaximumCachableCharacter) { - m_identifiers.append(Identifier(vm, characters, length)); + m_identifiers.append(Identifier::fromString(vm, characters, length)); return m_identifiers.last(); } if (length == 1) { if (Identifier* ident = m_shortIdentifiers[characters[0]]) return *ident; - m_identifiers.append(Identifier(vm, characters, length)); + m_identifiers.append(Identifier::fromString(vm, characters, length)); m_shortIdentifiers[characters[0]] = &m_identifiers.last(); return m_identifiers.last(); } Identifier* ident = m_recentIdentifiers[characters[0]]; if (ident && Identifier::equal(ident->impl(), characters, length)) return *ident; - m_identifiers.append(Identifier(vm, characters, length)); + m_identifiers.append(Identifier::fromString(vm, characters, length)); m_recentIdentifiers[characters[0]] = &m_identifiers.last(); return m_identifiers.last(); } + ALWAYS_INLINE const Identifier& IdentifierArena::makeEmptyIdentifier(VM* vm) + { + return vm->propertyNames->emptyIdentifier; + } + ALWAYS_INLINE const Identifier& IdentifierArena::makeIdentifierLCharFromUChar(VM* vm, const UChar* characters, size_t length) { if (!length) @@ -105,7 +108,7 @@ namespace JSC { if (length == 1) { if (Identifier* ident = m_shortIdentifiers[characters[0]]) return *ident; - m_identifiers.append(Identifier(vm, characters, length)); + m_identifiers.append(Identifier::fromString(vm, characters, length)); m_shortIdentifiers[characters[0]] = &m_identifiers.last(); return m_identifiers.last(); } @@ -119,7 +122,7 @@ namespace JSC { inline const Identifier& IdentifierArena::makeNumericIdentifier(VM* vm, double number) { - m_identifiers.append(Identifier(vm, String::numberToStringECMAScript(number))); + m_identifiers.append(Identifier::fromString(vm, String::numberToStringECMAScript(number))); return m_identifiers.last(); } @@ -136,7 +139,6 @@ namespace JSC { m_identifierArena.swap(otherArena.m_identifierArena); m_freeablePools.swap(otherArena.m_freeablePools); m_deletableObjects.swap(otherArena.m_deletableObjects); - m_refCountedObjects.swap(otherArena.m_refCountedObjects); } void* allocateFreeable(size_t size) @@ -159,18 +161,10 @@ namespace JSC { return deletable; } - void derefWithArena(PassRefPtr); - bool contains(ParserArenaRefCounted*) const; - ParserArenaRefCounted* last() const; - void removeLast(); - - bool isEmpty() const; - JS_EXPORT_PRIVATE void reset(); - IdentifierArena& identifierArena() { if (UNLIKELY (!m_identifierArena)) - m_identifierArena = adoptPtr(new IdentifierArena); + m_identifierArena = std::make_unique(); return *m_identifierArena; } @@ -189,10 +183,9 @@ namespace JSC { char* m_freeableMemory; char* m_freeablePoolEnd; - OwnPtr m_identifierArena; + std::unique_ptr m_identifierArena; Vector m_freeablePools; Vector m_deletableObjects; - Vector> m_refCountedObjects; }; }