Ignore:
Timestamp:
Feb 15, 2013, 10:56:27 AM (12 years ago)
Author:
[email protected]
Message:

Yarr: Use OwnPtr to make pattern/disjunction/character-class ownership clearer.
<http://webkit.org/b/109218>

Reviewed by Benjamin Poulain.

  • Let classes that manage lifetime of other objects hold on to them with OwnPtr instead of raw pointers.
  • Placed some strategic Vector::shrinkToFit(), ::reserveInitialCapacity() and ::swap().

668 kB progression on Membuster3.

  • yarr/YarrInterpreter.cpp:

(JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
(JSC::Yarr::ByteCompiler::emitDisjunction):
(ByteCompiler):

  • yarr/YarrInterpreter.h:

(JSC::Yarr::BytecodePattern::BytecodePattern):
(BytecodePattern):

  • yarr/YarrJIT.cpp:

(JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern):
(JSC::Yarr::YarrGenerator::opCompileParentheticalAssertion):
(JSC::Yarr::YarrGenerator::opCompileBody):

  • yarr/YarrPattern.cpp:

(JSC::Yarr::CharacterClassConstructor::charClass):
(JSC::Yarr::YarrPatternConstructor::YarrPatternConstructor):
(JSC::Yarr::YarrPatternConstructor::reset):
(JSC::Yarr::YarrPatternConstructor::atomPatternCharacter):
(JSC::Yarr::YarrPatternConstructor::atomCharacterClassEnd):
(JSC::Yarr::YarrPatternConstructor::copyDisjunction):
(JSC::Yarr::YarrPatternConstructor::setupDisjunctionOffsets):
(JSC::Yarr::YarrPatternConstructor::checkForTerminalParentheses):
(JSC::Yarr::YarrPatternConstructor::optimizeBOL):
(JSC::Yarr::YarrPatternConstructor::containsCapturingTerms):
(JSC::Yarr::YarrPatternConstructor::optimizeDotStarWrappedExpressions):

  • yarr/YarrPattern.h:

(JSC::Yarr::PatternDisjunction::addNewAlternative):
(PatternDisjunction):
(YarrPattern):
(JSC::Yarr::YarrPattern::reset):
(JSC::Yarr::YarrPattern::newlineCharacterClass):
(JSC::Yarr::YarrPattern::digitsCharacterClass):
(JSC::Yarr::YarrPattern::spacesCharacterClass):
(JSC::Yarr::YarrPattern::wordcharCharacterClass):
(JSC::Yarr::YarrPattern::nondigitsCharacterClass):
(JSC::Yarr::YarrPattern::nonspacesCharacterClass):
(JSC::Yarr::YarrPattern::nonwordcharCharacterClass):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/yarr/YarrInterpreter.h

    r127191 r143018  
    338338    WTF_MAKE_FAST_ALLOCATED;
    339339public:
    340     BytecodePattern(PassOwnPtr<ByteDisjunction> body, Vector<ByteDisjunction*> allParenthesesInfo, YarrPattern& pattern, BumpPointerAllocator* allocator)
     340    BytecodePattern(PassOwnPtr<ByteDisjunction> body, Vector<OwnPtr<ByteDisjunction> >& parenthesesInfoToAdopt, YarrPattern& pattern, BumpPointerAllocator* allocator)
    341341        : m_body(body)
    342342        , m_ignoreCase(pattern.m_ignoreCase)
     
    344344        , m_allocator(allocator)
    345345    {
     346        m_body->terms.shrinkToFit();
     347
    346348        newlineCharacterClass = pattern.newlineCharacterClass();
    347349        wordcharCharacterClass = pattern.wordcharCharacterClass();
    348350
    349         m_allParenthesesInfo.append(allParenthesesInfo);
    350         m_userCharacterClasses.append(pattern.m_userCharacterClasses);
    351         // 'Steal' the YarrPattern's CharacterClasses!  We clear its
    352         // array, so that it won't delete them on destruction.  We'll
    353         // take responsibility for that.
    354         pattern.m_userCharacterClasses.clear();
    355     }
    356 
    357     ~BytecodePattern()
    358     {
    359         deleteAllValues(m_allParenthesesInfo);
    360         deleteAllValues(m_userCharacterClasses);
     351        m_allParenthesesInfo.swap(parenthesesInfoToAdopt);
     352        m_allParenthesesInfo.shrinkToFit();
     353
     354        m_userCharacterClasses.swap(pattern.m_userCharacterClasses);
     355        m_userCharacterClasses.shrinkToFit();
    361356    }
    362357
     
    372367
    373368private:
    374     Vector<ByteDisjunction*> m_allParenthesesInfo;
    375     Vector<CharacterClass*> m_userCharacterClasses;
     369    Vector<OwnPtr<ByteDisjunction> > m_allParenthesesInfo;
     370    Vector<OwnPtr<CharacterClass> > m_userCharacterClasses;
    376371};
    377372
Note: See TracChangeset for help on using the changeset viewer.