Ignore:
Timestamp:
Jan 30, 2011, 5:13:10 PM (14 years ago)
Author:
[email protected]
Message:

Convert markstack to a slot visitor API
https://bugs.webkit.org/show_bug.cgi?id=53219

rolling r77006 and r77020 back in.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/WeakGCMap.h

    r77044 r77098  
    4747
    4848public:
    49     typedef typename HashMap<KeyType, MappedType>::iterator iterator;
    50     typedef typename HashMap<KeyType, MappedType>::const_iterator const_iterator;
     49    typedef typename HashMap<KeyType, DeprecatedPtr<MappedType> >::iterator iterator;
     50    typedef typename HashMap<KeyType, DeprecatedPtr<MappedType> >::const_iterator const_iterator;
    5151   
    5252    bool isEmpty() { return m_map.isEmpty(); }
    5353    void clear() { m_map.clear(); }
    5454
    55     MappedType get(const KeyType& key) const;
    56     pair<iterator, bool> set(const KeyType&, const MappedType&);
    57     MappedType take(const KeyType& key);
     55    MappedType* get(const KeyType&) const;
     56    pair<iterator, bool> set(const KeyType&, MappedType*);
     57    MappedType* take(const KeyType&);
    5858
    5959    // These unchecked functions provide access to a value even if the value's
     
    6161    // during the GC mark phase, which begins by clearing all mark bits.
    6262
    63     MappedType uncheckedGet(const KeyType& key) const { return m_map.get(key); }
    64     bool uncheckedRemove(const KeyType&, const MappedType&);
     63    MappedType* uncheckedGet(const KeyType& key) const { return m_map.get(key).get(); }
     64    DeprecatedPtr<MappedType>* uncheckedGetSlot(const KeyType& key)
     65    {
     66        iterator iter = m_map.find(key);
     67        if (iter == m_map.end())
     68            return 0;
     69        return &iter->second;
     70    }
     71    bool uncheckedRemove(const KeyType&, MappedType*);
    6572
    6673    iterator uncheckedBegin() { return m_map.begin(); }
     
    7077    const_iterator uncheckedEnd() const { return m_map.end(); }
    7178
    72     bool isValid(iterator it) const { return Heap::isCellMarked(it->second); }
    73     bool isValid(const_iterator it) const { return Heap::isCellMarked(it->second); }
     79    bool isValid(iterator it) const { return Heap::isCellMarked(it->second.get()); }
     80    bool isValid(const_iterator it) const { return Heap::isCellMarked(it->second.get()); }
    7481
    7582private:
    76     HashMap<KeyType, MappedType> m_map;
     83    HashMap<KeyType, DeprecatedPtr<MappedType> > m_map;
    7784};
    7885
    7986template<typename KeyType, typename MappedType>
    80 inline MappedType WeakGCMap<KeyType, MappedType>::get(const KeyType& key) const
     87inline MappedType* WeakGCMap<KeyType, MappedType>::get(const KeyType& key) const
    8188{
    82     MappedType result = m_map.get(key);
    83     if (result == HashTraits<MappedType>::emptyValue())
     89    MappedType* result = m_map.get(key).get();
     90    if (result == HashTraits<MappedType*>::emptyValue())
    8491        return result;
    8592    if (!Heap::isCellMarked(result))
    86         return HashTraits<MappedType>::emptyValue();
     93        return HashTraits<MappedType*>::emptyValue();
    8794    return result;
    8895}
    8996
    9097template<typename KeyType, typename MappedType>
    91 MappedType WeakGCMap<KeyType, MappedType>::take(const KeyType& key)
     98MappedType* WeakGCMap<KeyType, MappedType>::take(const KeyType& key)
    9299{
    93     MappedType result = m_map.take(key);
    94     if (result == HashTraits<MappedType>::emptyValue())
     100    MappedType* result = m_map.take(key).get();
     101    if (result == HashTraits<MappedType*>::emptyValue())
    95102        return result;
    96103    if (!Heap::isCellMarked(result))
    97         return HashTraits<MappedType>::emptyValue();
     104        return HashTraits<MappedType*>::emptyValue();
    98105    return result;
    99106}
    100107
    101108template<typename KeyType, typename MappedType>
    102 pair<typename HashMap<KeyType, MappedType>::iterator, bool> WeakGCMap<KeyType, MappedType>::set(const KeyType& key, const MappedType& value)
     109pair<typename WeakGCMap<KeyType, MappedType>::iterator, bool> WeakGCMap<KeyType, MappedType>::set(const KeyType& key, MappedType* value)
    103110{
    104111    Heap::markCell(value); // If value is newly allocated, it's not marked, so mark it now.
    105112    pair<iterator, bool> result = m_map.add(key, value);
    106113    if (!result.second) { // pre-existing entry
    107         result.second = !Heap::isCellMarked(result.first->second);
     114        result.second = !Heap::isCellMarked(result.first->second.get());
    108115        result.first->second = value;
    109116    }
     
    112119
    113120template<typename KeyType, typename MappedType>
    114 bool WeakGCMap<KeyType, MappedType>::uncheckedRemove(const KeyType& key, const MappedType& value)
     121bool WeakGCMap<KeyType, MappedType>::uncheckedRemove(const KeyType& key, MappedType* value)
    115122{
    116123    iterator it = m_map.find(key);
    117124    if (it == m_map.end())
    118125        return false;
    119     if (it->second != value)
     126    if (it->second.get() != value)
    120127        return false;
    121128    m_map.remove(it);
Note: See TracChangeset for help on using the changeset viewer.