Source/JavaScriptCore: https://bugs.webkit.org/show_bug.cgi?id=60860
authorGavin Barraclough <barraclough@apple.com>
Mon, 16 May 2011 07:21:01 +0000 (07:21 +0000)
committerAdemar de Souza Reis Jr <ademar.reis@openbossa.org>
Fri, 5 Aug 2011 18:28:12 +0000 (15:28 -0300)
commitb54ce191891e524ec4d99d666cb9291b3a4a92bb
tree04c5da36854716a453a2257bbee3fc32c749733f
parent883ca7eae6dedfd2caddbaf8b95a51795aa13268
Source/JavaScriptCore: https://bugs.webkit.org/show_bug.cgi?id=60860
Simplify backtracking in YARR JIT

Reviewed by Geoff Garen & Michael Saboff.

YARR JIT currently performs a single pass of code generation over the pattern,
with special handling to allow the code generation for some backtracking code
out of line. We can simplify things by moving to a common mechanism whereby all
forwards matching code is generated in one pass, and all backtracking code is
generated in another. Backtracking code can be generated in reverse order, to
optimized the common fall-through case.

To make it easier to walk over the pattern, we can first convert to a more
byte-code like format before JIT generating. In time we should unify this with
the YARR interpreter to more closely unify the two.

* yarr/YarrJIT.cpp:
(JSC::Yarr::YarrGenerator::jumpIfNoAvailableInput):
(JSC::Yarr::YarrGenerator::YarrOp::YarrOp):
(JSC::Yarr::YarrGenerator::BacktrackingState::BacktrackingState):
(JSC::Yarr::YarrGenerator::BacktrackingState::append):
(JSC::Yarr::YarrGenerator::BacktrackingState::fallthrough):
(JSC::Yarr::YarrGenerator::BacktrackingState::link):
(JSC::Yarr::YarrGenerator::BacktrackingState::linkTo):
(JSC::Yarr::YarrGenerator::BacktrackingState::takeBacktracksToJumpList):
(JSC::Yarr::YarrGenerator::BacktrackingState::isEmpty):
(JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels):
(JSC::Yarr::YarrGenerator::BacktrackingState::ReturnAddressRecord::ReturnAddressRecord):
(JSC::Yarr::YarrGenerator::generateAssertionBOL):
(JSC::Yarr::YarrGenerator::backtrackAssertionBOL):
(JSC::Yarr::YarrGenerator::generateAssertionEOL):
(JSC::Yarr::YarrGenerator::backtrackAssertionEOL):
(JSC::Yarr::YarrGenerator::matchAssertionWordchar):
(JSC::Yarr::YarrGenerator::generateAssertionWordBoundary):
(JSC::Yarr::YarrGenerator::backtrackAssertionWordBoundary):
(JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
(JSC::Yarr::YarrGenerator::backtrackPatternCharacterOnce):
(JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
(JSC::Yarr::YarrGenerator::backtrackPatternCharacterFixed):
(JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
(JSC::Yarr::YarrGenerator::backtrackPatternCharacterGreedy):
(JSC::Yarr::YarrGenerator::generatePatternCharacterNonGreedy):
(JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):
(JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
(JSC::Yarr::YarrGenerator::backtrackCharacterClassOnce):
(JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
(JSC::Yarr::YarrGenerator::backtrackCharacterClassFixed):
(JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
(JSC::Yarr::YarrGenerator::backtrackCharacterClassGreedy):
(JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
(JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
(JSC::Yarr::YarrGenerator::generateTerm):
(JSC::Yarr::YarrGenerator::backtrackTerm):
(JSC::Yarr::YarrGenerator::generate):
(JSC::Yarr::YarrGenerator::backtrack):
(JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern):
(JSC::Yarr::YarrGenerator::opCompileParentheticalAssertion):
(JSC::Yarr::YarrGenerator::opCompileAlternative):
(JSC::Yarr::YarrGenerator::opCompileBody):
(JSC::Yarr::YarrGenerator::YarrGenerator):
(JSC::Yarr::YarrGenerator::compile):

LayoutTests: https://bugs.webkit.org/show_bug.cgi?id=60860
Add layout tests for some regular expressions that used to crash the compiler.

Reviewed by Geoff Garen & Michael Saboff.

* fast/regex/parentheses-expected.txt:
* fast/regex/script-tests/parentheses.js:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@86536 268f45cc-cd09-0410-ab3c-d52691b4dbfc
LayoutTests/ChangeLog
LayoutTests/fast/regex/parentheses-expected.txt
LayoutTests/fast/regex/script-tests/parentheses.js
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/yarr/YarrJIT.cpp