Changeset 143018 in webkit for trunk/Source/JavaScriptCore/yarr/YarrPattern.cpp
- Timestamp:
- Feb 15, 2013, 10:56:27 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/yarr/YarrPattern.cpp
r140594 r143018 176 176 } 177 177 178 CharacterClass*charClass()179 { 180 CharacterClass* characterClass = new CharacterClass(0);178 PassOwnPtr<CharacterClass> charClass() 179 { 180 OwnPtr<CharacterClass> characterClass = adoptPtr(new CharacterClass(0)); 181 181 182 182 characterClass->m_matches.swap(m_matches); … … 185 185 characterClass->m_rangesUnicode.swap(m_rangesUnicode); 186 186 187 return characterClass ;187 return characterClass.release(); 188 188 } 189 189 … … 275 275 , m_invertParentheticalAssertion(false) 276 276 { 277 m_pattern.m_body = new PatternDisjunction(); 278 m_alternative = m_pattern.m_body->addNewAlternative(); 279 m_pattern.m_disjunctions.append(m_pattern.m_body); 277 OwnPtr<PatternDisjunction> body = adoptPtr(new PatternDisjunction); 278 m_pattern.m_body = body.get(); 279 m_alternative = body->addNewAlternative(); 280 m_pattern.m_disjunctions.append(body.release()); 280 281 } 281 282 … … 289 290 m_characterClassConstructor.reset(); 290 291 291 m_pattern.m_body = new PatternDisjunction(); 292 m_alternative = m_pattern.m_body->addNewAlternative(); 293 m_pattern.m_disjunctions.append(m_pattern.m_body); 292 OwnPtr<PatternDisjunction> body = adoptPtr(new PatternDisjunction); 293 m_pattern.m_body = body.get(); 294 m_alternative = body->addNewAlternative(); 295 m_pattern.m_disjunctions.append(body.release()); 294 296 } 295 297 … … 328 330 329 331 m_characterClassConstructor.putUnicodeIgnoreCase(ch, info); 330 CharacterClass*newCharacterClass = m_characterClassConstructor.charClass();331 m_ pattern.m_userCharacterClasses.append(newCharacterClass);332 m_ alternative->m_terms.append(PatternTerm(newCharacterClass, false));332 OwnPtr<CharacterClass> newCharacterClass = m_characterClassConstructor.charClass(); 333 m_alternative->m_terms.append(PatternTerm(newCharacterClass.get(), false)); 334 m_pattern.m_userCharacterClasses.append(newCharacterClass.release()); 333 335 } 334 336 … … 390 392 void atomCharacterClassEnd() 391 393 { 392 CharacterClass*newCharacterClass = m_characterClassConstructor.charClass();393 m_ pattern.m_userCharacterClasses.append(newCharacterClass);394 m_ alternative->m_terms.append(PatternTerm(newCharacterClass, m_invertCharacterClass));394 OwnPtr<CharacterClass> newCharacterClass = m_characterClassConstructor.charClass(); 395 m_alternative->m_terms.append(PatternTerm(newCharacterClass.get(), m_invertCharacterClass)); 396 m_pattern.m_userCharacterClasses.append(newCharacterClass.release()); 395 397 } 396 398 … … 401 403 m_pattern.m_numSubpatterns++; 402 404 403 PatternDisjunction* parenthesesDisjunction = new PatternDisjunction(m_alternative); 404 m_pattern.m_disjunctions.append(parenthesesDisjunction); 405 m_alternative->m_terms.append(PatternTerm(PatternTerm::TypeParenthesesSubpattern, subpatternId, parenthesesDisjunction, capture, false)); 405 OwnPtr<PatternDisjunction> parenthesesDisjunction = adoptPtr(new PatternDisjunction(m_alternative)); 406 m_alternative->m_terms.append(PatternTerm(PatternTerm::TypeParenthesesSubpattern, subpatternId, parenthesesDisjunction.get(), capture, false)); 406 407 m_alternative = parenthesesDisjunction->addNewAlternative(); 408 m_pattern.m_disjunctions.append(parenthesesDisjunction.release()); 407 409 } 408 410 409 411 void atomParentheticalAssertionBegin(bool invert = false) 410 412 { 411 PatternDisjunction* parenthesesDisjunction = new PatternDisjunction(m_alternative); 412 m_pattern.m_disjunctions.append(parenthesesDisjunction); 413 m_alternative->m_terms.append(PatternTerm(PatternTerm::TypeParentheticalAssertion, m_pattern.m_numSubpatterns + 1, parenthesesDisjunction, false, invert)); 413 OwnPtr<PatternDisjunction> parenthesesDisjunction = adoptPtr(new PatternDisjunction(m_alternative)); 414 m_alternative->m_terms.append(PatternTerm(PatternTerm::TypeParentheticalAssertion, m_pattern.m_numSubpatterns + 1, parenthesesDisjunction.get(), false, invert)); 414 415 m_alternative = parenthesesDisjunction->addNewAlternative(); 415 416 m_invertParentheticalAssertion = invert; 417 m_pattern.m_disjunctions.append(parenthesesDisjunction.release()); 416 418 } 417 419 … … 478 480 PatternDisjunction* copyDisjunction(PatternDisjunction* disjunction, bool filterStartsWithBOL = false) 479 481 { 480 PatternDisjunction* newDisjunction = 0;482 OwnPtr<PatternDisjunction> newDisjunction; 481 483 for (unsigned alt = 0; alt < disjunction->m_alternatives.size(); ++alt) { 482 PatternAlternative* alternative = disjunction->m_alternatives[alt] ;484 PatternAlternative* alternative = disjunction->m_alternatives[alt].get(); 483 485 if (!filterStartsWithBOL || !alternative->m_startsWithBOL) { 484 486 if (!newDisjunction) { 485 newDisjunction = new PatternDisjunction();487 newDisjunction = adoptPtr(new PatternDisjunction()); 486 488 newDisjunction->m_parent = disjunction->m_parent; 487 489 } 488 490 PatternAlternative* newAlternative = newDisjunction->addNewAlternative(); 491 newAlternative->m_terms.reserveInitialCapacity(alternative->m_terms.size()); 489 492 for (unsigned i = 0; i < alternative->m_terms.size(); ++i) 490 493 newAlternative->m_terms.append(copyTerm(alternative->m_terms[i], filterStartsWithBOL)); … … 492 495 } 493 496 494 if (newDisjunction) 495 m_pattern.m_disjunctions.append(newDisjunction); 496 return newDisjunction; 497 if (!newDisjunction) 498 return 0; 499 500 PatternDisjunction* copiedDisjunction = newDisjunction.get(); 501 m_pattern.m_disjunctions.append(newDisjunction.release()); 502 return copiedDisjunction; 497 503 } 498 504 … … 656 662 657 663 for (unsigned alt = 0; alt < disjunction->m_alternatives.size(); ++alt) { 658 PatternAlternative* alternative = disjunction->m_alternatives[alt] ;664 PatternAlternative* alternative = disjunction->m_alternatives[alt].get(); 659 665 unsigned currentAlternativeCallFrameSize = setupAlternativeOffsets(alternative, initialCallFrameSize, initialInputPosition); 660 666 minimumInputSize = std::min(minimumInputSize, alternative->m_minimumSize); … … 691 697 return; 692 698 693 Vector< PatternAlternative*>& alternatives = m_pattern.m_body->m_alternatives;699 Vector<OwnPtr<PatternAlternative> >& alternatives = m_pattern.m_body->m_alternatives; 694 700 for (size_t i = 0; i < alternatives.size(); ++i) { 695 701 Vector<PatternTerm>& terms = alternatives[i]->m_terms; … … 726 732 // Move alternatives from loopDisjunction to disjunction 727 733 for (unsigned alt = 0; alt < loopDisjunction->m_alternatives.size(); ++alt) 728 disjunction->m_alternatives.append(loopDisjunction->m_alternatives[alt] );734 disjunction->m_alternatives.append(loopDisjunction->m_alternatives[alt].release()); 729 735 730 736 loopDisjunction->m_alternatives.clear(); … … 745 751 PatternDisjunction* nestedDisjunction = term.parentheses.disjunction; 746 752 for (unsigned alt = 0; alt < nestedDisjunction->m_alternatives.size(); ++alt) { 747 if (containsCapturingTerms(nestedDisjunction->m_alternatives[alt] , 0, nestedDisjunction->m_alternatives[alt]->m_terms.size() - 1))753 if (containsCapturingTerms(nestedDisjunction->m_alternatives[alt].get(), 0, nestedDisjunction->m_alternatives[alt]->m_terms.size() - 1)) 748 754 return true; 749 755 } … … 761 767 void optimizeDotStarWrappedExpressions() 762 768 { 763 Vector< PatternAlternative*>& alternatives = m_pattern.m_body->m_alternatives;769 Vector<OwnPtr<PatternAlternative> >& alternatives = m_pattern.m_body->m_alternatives; 764 770 if (alternatives.size() != 1) 765 771 return; 766 772 767 PatternAlternative* alternative = alternatives[0] ;773 PatternAlternative* alternative = alternatives[0].get(); 768 774 Vector<PatternTerm>& terms = alternative->m_terms; 769 775 if (terms.size() >= 3) {
Note:
See TracChangeset
for help on using the changeset viewer.