Changeset 57608 in webkit for trunk/JavaScriptCore/yarr


Ignore:
Timestamp:
Apr 14, 2010, 2:38:44 PM (15 years ago)
Author:
[email protected]
Message:

2010-04-14 Peter Varga <[email protected]>

Reviewed by Geoffrey Garen.

Move the YARR JIT fallback detection from RegexJIT.cpp to
RegexCompiler.cpp.

https://bugs.webkit.org/show_bug.cgi?id=37571

  • yarr/RegexCompiler.cpp: (JSC::Yarr::RegexPatternConstructor::atomBackReference): (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
  • yarr/RegexJIT.cpp: (JSC::Yarr::RegexGenerator::generateTerm): (JSC::Yarr::RegexGenerator::RegexGenerator): (JSC::Yarr::jitCompileRegex):
  • yarr/RegexJIT.h: (JSC::Yarr::RegexCodeBlock::operator!):
  • yarr/RegexPattern.h: (JSC::Yarr::RegexPattern::RegexPattern): (JSC::Yarr::RegexPattern::reset):
Location:
trunk/JavaScriptCore/yarr
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/yarr/RegexCompiler.cpp

    r53151 r57608  
    470470    {
    471471        ASSERT(subpatternId);
     472        m_pattern.m_shouldFallBack = true;
    472473        m_pattern.m_maxBackReference = std::max(m_pattern.m_maxBackReference, subpatternId);
    473474
     
    544545            return;
    545546        }
     547
     548        if (max > 1 && term.type == PatternTerm::TypeParenthesesSubpattern)
     549            m_pattern.m_shouldFallBack = true;
    546550
    547551        if (min == 0)
  • trunk/JavaScriptCore/yarr/RegexJIT.cpp

    r55500 r57608  
    10891089
    10901090        case PatternTerm::TypeBackReference:
    1091             m_generationFailed = true;
     1091            ASSERT_NOT_REACHED();
    10921092            break;
    10931093
     
    10961096
    10971097        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);
    11021100            break;
    11031101
     
    13521350    RegexGenerator(RegexPattern& pattern)
    13531351        : m_pattern(pattern)
    1354         , m_generationFailed(false)
    13551352    {
    13561353    }
     
    13821379    }
    13831380
    1384     bool generationFailed()
    1385     {
    1386         return m_generationFailed;
    1387     }
    1388 
    13891381private:
    13901382    RegexPattern& m_pattern;
    13911383    Vector<AlternativeBacktrackRecord> m_backtrackRecords;
    1392     bool m_generationFailed;
    13931384};
    13941385
     
    14021393    numSubpatterns = pattern.m_numSubpatterns;
    14031394
    1404     RegexGenerator generator(pattern);
    1405     generator.compile(globalData, jitObject);
    1406 
    1407     if (generator.generationFailed()) {
     1395    if (pattern.m_shouldFallBack) {
    14081396        JSRegExpIgnoreCaseOption ignoreCaseOption = ignoreCase ? JSRegExpIgnoreCase : JSRegExpDoNotIgnoreCase;
    14091397        JSRegExpMultilineOption multilineOption = multiline ? JSRegExpMultiline : JSRegExpSingleLine;
    14101398        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);
    14111402    }
    14121403}
  • trunk/JavaScriptCore/yarr/RegexJIT.h

    r55633 r57608  
    6767    void setFallback(JSRegExp* fallback) { m_fallback = fallback; }
    6868
    69     bool operator!() { return !m_ref.m_code.executableAddress(); }
     69    bool operator!() { return (!m_ref.m_code.executableAddress() && !m_fallback); }
    7070    void set(MacroAssembler::CodeRef ref) { m_ref = ref; }
    7171
  • trunk/JavaScriptCore/yarr/RegexPattern.h

    r55633 r57608  
    248248        , m_numSubpatterns(0)
    249249        , m_maxBackReference(0)
     250        , m_shouldFallBack(false)
    250251        , newlineCached(0)
    251252        , digitsCached(0)
     
    269270        m_maxBackReference = 0;
    270271
     272        m_shouldFallBack = false;
     273
    271274        newlineCached = 0;
    272275        digitsCached = 0;
     
    335338    unsigned m_numSubpatterns;
    336339    unsigned m_maxBackReference;
     340    bool m_shouldFallBack;
    337341    PatternDisjunction* m_body;
    338342    Vector<PatternDisjunction*, 4> m_disjunctions;
Note: See TracChangeset for help on using the changeset viewer.