Changeset 57608 in webkit for trunk/JavaScriptCore/yarr
- Timestamp:
- Apr 14, 2010, 2:38:44 PM (15 years ago)
- Location:
- trunk/JavaScriptCore/yarr
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/yarr/RegexCompiler.cpp
r53151 r57608 470 470 { 471 471 ASSERT(subpatternId); 472 m_pattern.m_shouldFallBack = true; 472 473 m_pattern.m_maxBackReference = std::max(m_pattern.m_maxBackReference, subpatternId); 473 474 … … 544 545 return; 545 546 } 547 548 if (max > 1 && term.type == PatternTerm::TypeParenthesesSubpattern) 549 m_pattern.m_shouldFallBack = true; 546 550 547 551 if (min == 0) -
trunk/JavaScriptCore/yarr/RegexJIT.cpp
r55500 r57608 1089 1089 1090 1090 case PatternTerm::TypeBackReference: 1091 m_generationFailed = true;1091 ASSERT_NOT_REACHED(); 1092 1092 break; 1093 1093 … … 1096 1096 1097 1097 case PatternTerm::TypeParenthesesSubpattern: 1098 if ((term.quantityCount == 1) && !term.parentheses.isCopy) 1099 generateParenthesesSingle(state); 1100 else 1101 m_generationFailed = true; 1098 ASSERT((term.quantityCount == 1) && !term.parentheses.isCopy); // must fallback to pcre before this point 1099 generateParenthesesSingle(state); 1102 1100 break; 1103 1101 … … 1352 1350 RegexGenerator(RegexPattern& pattern) 1353 1351 : m_pattern(pattern) 1354 , m_generationFailed(false)1355 1352 { 1356 1353 } … … 1382 1379 } 1383 1380 1384 bool generationFailed()1385 {1386 return m_generationFailed;1387 }1388 1389 1381 private: 1390 1382 RegexPattern& m_pattern; 1391 1383 Vector<AlternativeBacktrackRecord> m_backtrackRecords; 1392 bool m_generationFailed;1393 1384 }; 1394 1385 … … 1402 1393 numSubpatterns = pattern.m_numSubpatterns; 1403 1394 1404 RegexGenerator generator(pattern); 1405 generator.compile(globalData, jitObject); 1406 1407 if (generator.generationFailed()) { 1395 if (pattern.m_shouldFallBack) { 1408 1396 JSRegExpIgnoreCaseOption ignoreCaseOption = ignoreCase ? JSRegExpIgnoreCase : JSRegExpDoNotIgnoreCase; 1409 1397 JSRegExpMultilineOption multilineOption = multiline ? JSRegExpMultiline : JSRegExpSingleLine; 1410 1398 jitObject.setFallback(jsRegExpCompile(reinterpret_cast<const UChar*>(patternString.data()), patternString.size(), ignoreCaseOption, multilineOption, &numSubpatterns, &error)); 1399 } else { 1400 RegexGenerator generator(pattern); 1401 generator.compile(globalData, jitObject); 1411 1402 } 1412 1403 } -
trunk/JavaScriptCore/yarr/RegexJIT.h
r55633 r57608 67 67 void setFallback(JSRegExp* fallback) { m_fallback = fallback; } 68 68 69 bool operator!() { return !m_ref.m_code.executableAddress(); }69 bool operator!() { return (!m_ref.m_code.executableAddress() && !m_fallback); } 70 70 void set(MacroAssembler::CodeRef ref) { m_ref = ref; } 71 71 -
trunk/JavaScriptCore/yarr/RegexPattern.h
r55633 r57608 248 248 , m_numSubpatterns(0) 249 249 , m_maxBackReference(0) 250 , m_shouldFallBack(false) 250 251 , newlineCached(0) 251 252 , digitsCached(0) … … 269 270 m_maxBackReference = 0; 270 271 272 m_shouldFallBack = false; 273 271 274 newlineCached = 0; 272 275 digitsCached = 0; … … 335 338 unsigned m_numSubpatterns; 336 339 unsigned m_maxBackReference; 340 bool m_shouldFallBack; 337 341 PatternDisjunction* m_body; 338 342 Vector<PatternDisjunction*, 4> m_disjunctions;
Note:
See TracChangeset
for help on using the changeset viewer.