Ignore:
Timestamp:
Jul 2, 2010, 2:34:43 PM (15 years ago)
Author:
[email protected]
Message:

[ Updated after rollout. ]

Patch by Renata Hodovan <[email protected]> on 2010-07-02
Reviewed by Oliver Hunt.

Merged RegExp constructor and RegExp::create methods.
Both functions are called with three parameters and check whether
flags (the third param) is given or not.
Avoid extra hash lookups in RegExpCache::create by passing a pre-computed
iterator parameter.
https://bugs.webkit.org/show_bug.cgi?id=41055

  • runtime/RegExp.cpp:

(JSC::RegExp::RegExp):

  • runtime/RegExp.h:
  • runtime/RegExpCache.cpp:

(JSC::RegExpCache::lookupOrCreate):
(JSC::RegExpCache::create):

  • runtime/RegExpCache.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/runtime/RegExpCache.cpp

    r61927 r62405  
    3535{
    3636    if (patternString.size() < maxCacheablePatternLength) {
    37         pair<HashMap<RegExpKey, RefPtr<RegExp> >::iterator, bool> result = m_cacheMap.add(RegExpKey(flags, patternString), 0);
     37        pair<RegExpCacheMap::iterator, bool> result = m_cacheMap.add(RegExpKey(flags, patternString), 0);
    3838        if (!result.second)
    3939            return result.first->second;
     40        else
     41            return create(patternString, flags, result.first);
    4042    }
    41     return create(patternString, flags);
     43    return create(patternString, flags, m_cacheMap.end());
    4244}
    4345
    44 PassRefPtr<RegExp> RegExpCache::create(const UString& patternString, const UString& flags)
     46PassRefPtr<RegExp> RegExpCache::create(const UString& patternString, const UString& flags, RegExpCacheMap::iterator iterator)
    4547{
    46     RefPtr<RegExp> regExp;
    47 
    48     if (!flags.isNull())
    49         regExp = RegExp::create(m_globalData, patternString, flags);
    50     else
    51         regExp = RegExp::create(m_globalData, patternString);
     48    RefPtr<RegExp> regExp = RegExp::create(m_globalData, patternString, flags);
    5249
    5350    if (patternString.size() >= maxCacheablePatternLength)
    5451        return regExp;
     52
     53    RegExpKey key = RegExpKey(flags, patternString);
     54    iterator->first = key;
     55    iterator->second = regExp;
    5556
    5657    ++m_nextKeyToEvict;
     
    6263        m_cacheMap.remove(RegExpKey(patternKeyArray[m_nextKeyToEvict].flagsValue, patternKeyArray[m_nextKeyToEvict].pattern));
    6364
    64     RegExpKey key = RegExpKey(flags, patternString);
    65     m_cacheMap.set(key, regExp);
    6665    patternKeyArray[m_nextKeyToEvict].flagsValue = key.flagsValue;
    6766    patternKeyArray[m_nextKeyToEvict].pattern = patternString.rep();
Note: See TracChangeset for help on using the changeset viewer.