Changeset 44174 in webkit for trunk/JavaScriptCore
- Timestamp:
- May 26, 2009, 8:22:47 PM (16 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r44171 r44174 1 2009-05-26 Oliver Hunt <[email protected]> 2 3 Reviewed by Gavin Barraclough. 4 5 <rdar://problem/6924033> REGRESSION: Assertion failure due to forward references 6 7 Add a pattern type for forward references to ensure that we don't confuse the 8 quantifier alternatives assertion. 9 10 * yarr/RegexCompiler.cpp: 11 (JSC::Yarr::RegexPatternConstructor::atomBackReference): 12 (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): 13 * yarr/RegexInterpreter.cpp: 14 (JSC::Yarr::ByteCompiler::emitDisjunction): 15 * yarr/RegexJIT.cpp: 16 (JSC::Yarr::RegexGenerator::generateTerm): 17 * yarr/RegexPattern.h: 18 (JSC::Yarr::PatternTerm::): 19 (JSC::Yarr::PatternTerm::PatternTerm): 20 (JSC::Yarr::PatternTerm::ForwardReference): 21 1 22 2009-05-26 Gavin Barraclough <[email protected]> 2 23 -
trunk/JavaScriptCore/yarr/RegexCompiler.cpp
r43110 r44174 472 472 m_pattern.m_maxBackReference = std::max(m_pattern.m_maxBackReference, subpatternId); 473 473 474 if (subpatternId > m_pattern.m_numSubpatterns) 474 if (subpatternId > m_pattern.m_numSubpatterns) { 475 m_alternative->m_terms.append(PatternTerm::ForwardReference()); 475 476 return; 477 } 476 478 477 479 PatternAlternative* currentAlternative = m_alternative; … … 483 485 ASSERT((term.type == PatternTerm::TypeParenthesesSubpattern) || (term.type == PatternTerm::TypeParentheticalAssertion)); 484 486 485 if ((term.type == PatternTerm::TypeParenthesesSubpattern) && term.invertOrCapture && (subpatternId == term.subpatternId)) 487 if ((term.type == PatternTerm::TypeParenthesesSubpattern) && term.invertOrCapture && (subpatternId == term.subpatternId)) { 488 m_alternative->m_terms.append(PatternTerm::ForwardReference()); 486 489 return; 490 } 487 491 } 488 492 … … 593 597 currentCallFrameSize += RegexStackSpaceForBackTrackInfoBackReference; 594 598 alternative->m_hasFixedSize = false; 599 break; 600 601 case PatternTerm::TypeForwardReference: 595 602 break; 596 603 -
trunk/JavaScriptCore/yarr/RegexInterpreter.cpp
r43901 r44174 1556 1556 case PatternTerm::TypeBackReference: 1557 1557 atomBackReference(term.subpatternId, term.inputPosition - currentCountAlreadyChecked, term.frameLocation, term.quantityCount, term.quantityType); 1558 break; 1559 1560 case PatternTerm::TypeForwardReference: 1558 1561 break; 1559 1562 -
trunk/JavaScriptCore/yarr/RegexJIT.cpp
r44030 r44174 1072 1072 break; 1073 1073 1074 case PatternTerm::TypeForwardReference: 1075 break; 1076 1074 1077 case PatternTerm::TypeParenthesesSubpattern: 1075 1078 if ((term.quantityCount == 1) && !term.parentheses.isCopy) -
trunk/JavaScriptCore/yarr/RegexPattern.h
r44169 r44174 79 79 TypeCharacterClass, 80 80 TypeBackReference, 81 TypeForwardReference, 81 82 TypeParenthesesSubpattern, 82 83 TypeParentheticalAssertion, … … 144 145 } 145 146 147 static PatternTerm ForwardReference() 148 { 149 return PatternTerm(TypeForwardReference); 150 } 151 146 152 static PatternTerm BOL() 147 153 {
Note:
See TracChangeset
for help on using the changeset viewer.