Skip to content
  • barraclough@apple.com's avatar
    Yarr: if we're not using the output array, don't populate it! · f280e171
    barraclough@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=82519
    
    Reviewed by Sam Weinig.
    
    ../JavaScriptCore: 
    
    Add a new variant of the match method to RegExp that returns a MatchResult,
    and modify YarrJIT to be able to compile code that doesn't use an output vector.
    
    This is a 3% progression on v8-regexp.
    
    * JavaScriptCore.xcodeproj/project.pbxproj:
        - Moved MatchResult into its own header.
    * assembler/AbstractMacroAssembler.h:
        - Added missing include.
    * runtime/MatchResult.h: Added.
    (MatchResult::MatchResult):
    (MatchResult):
    (MatchResult::failed):
    (MatchResult::operator bool):
    (MatchResult::empty):
        - Moved MatchResult into its own header.
    * runtime/RegExp.cpp:
    (JSC::RegExp::compile):
    (JSC::RegExp::compileIfNecessary):
    (JSC::RegExp::match):
        - Changed due to execute & representation changes.
    (JSC::RegExp::compileMatchOnly):
    (JSC::RegExp::compileIfNecessaryMatchOnly):
        - Added helper to compile MatchOnly code.
    (JSC::RegExp::invalidateCode):
    (JSC::RegExp::matchCompareWithInterpreter):
    (JSC::RegExp::printTraceData):
        - Changed due representation changes.
    * runtime/RegExp.h:
    (RegExp):
    (JSC::RegExp::hasCode):
        - Made YarrCodeBlock a member.
    * runtime/RegExpConstructor.h:
    (RegExpConstructor):
    (JSC::RegExpConstructor::performMatch):
        - Added no-ovector form.
    * runtime/RegExpMatchesArray.cpp:
    (JSC::RegExpMatchesArray::reifyAllProperties):
        - Match now takes a reference to ovector, not a pointer.
    * runtime/RegExpObject.h:
    (JSC):
        - Moved MatchResult into its own header.
    * runtime/StringPrototype.cpp:
    (JSC::stringProtoFuncSplit):
        - Match now takes a reference to ovector, not a pointer.
    * testRegExp.cpp:
    (testOneRegExp):
        - Match now takes a reference to ovector, not a pointer.
    * yarr/YarrJIT.cpp:
    (Yarr):
    (YarrGenerator):
    (JSC::Yarr::YarrGenerator::initCallFrame):
    (JSC::Yarr::YarrGenerator::removeCallFrame):
    (JSC::Yarr::YarrGenerator::setSubpatternStart):
    (JSC::Yarr::YarrGenerator::setSubpatternEnd):
    (JSC::Yarr::YarrGenerator::clearSubpatternStart):
    (JSC::Yarr::YarrGenerator::setMatchStart):
    (JSC::Yarr::YarrGenerator::getMatchStart):
        - Added helper functions to intermediate access to output.
    (JSC::Yarr::YarrGenerator::generateDotStarEnclosure):
    (JSC::Yarr::YarrGenerator::generate):
    (JSC::Yarr::YarrGenerator::backtrack):
    (JSC::Yarr::YarrGenerator::generateEnter):
    (JSC::Yarr::YarrGenerator::compile):
        - Changed to use the new helpers, only generate subpatterns if IncludeSubpatterns.
    (JSC::Yarr::jitCompile):
        - Needs to template of MatchOnly or IncludeSubpatterns.
    * yarr/YarrJIT.h:
    (YarrCodeBlock):
    (JSC::Yarr::YarrCodeBlock::set8BitCode):
    (JSC::Yarr::YarrCodeBlock::set16BitCode):
    (JSC::Yarr::YarrCodeBlock::has8BitCodeMatchOnly):
    (JSC::Yarr::YarrCodeBlock::has16BitCodeMatchOnly):
    (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly):
    (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly):
    (JSC::Yarr::YarrCodeBlock::execute):
    (JSC::Yarr::YarrCodeBlock::clear):
        - Added a second set of CodeRefs, so that we can compile RexExps with/without subpattern matching.
    
    ../WebCore: 
    
    * ForwardingHeaders/runtime/MatchResult.h: Added.
    * ForwardingHeaders/yarr/YarrJIT.h: Added.
        - Added forwarding headers.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@112454 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    f280e171