+ // You must hold the lock until after you're done with the iterator.
+ Map::iterator find(const ConcurrentJITLocker&, StringImpl* key)
+ {
+ return m_map.find(key);
+ }
+
+ Map::iterator find(const GCSafeConcurrentJITLocker&, StringImpl* key)
+ {
+ return m_map.find(key);
+ }
+
+ SymbolTableEntry get(const ConcurrentJITLocker&, StringImpl* key)
+ {
+ return m_map.get(key);
+ }
+
+ SymbolTableEntry get(StringImpl* key)
+ {
+ ConcurrentJITLocker locker(m_lock);
+ return get(locker, key);
+ }
+
+ SymbolTableEntry inlineGet(const ConcurrentJITLocker&, StringImpl* key)
+ {
+ return m_map.inlineGet(key);
+ }
+
+ SymbolTableEntry inlineGet(StringImpl* key)
+ {
+ ConcurrentJITLocker locker(m_lock);
+ return inlineGet(locker, key);
+ }
+
+ Map::iterator begin(const ConcurrentJITLocker&)
+ {
+ return m_map.begin();
+ }
+
+ Map::iterator end(const ConcurrentJITLocker&)
+ {
+ return m_map.end();
+ }
+
+ Map::iterator end(const GCSafeConcurrentJITLocker&)
+ {
+ return m_map.end();
+ }
+
+ size_t size(const ConcurrentJITLocker&) const
+ {
+ return m_map.size();
+ }
+
+ size_t size() const
+ {
+ ConcurrentJITLocker locker(m_lock);
+ return size(locker);
+ }
+
+ Map::AddResult add(const ConcurrentJITLocker&, StringImpl* key, const SymbolTableEntry& entry)
+ {
+ return m_map.add(key, entry);
+ }
+
+ void add(StringImpl* key, const SymbolTableEntry& entry)
+ {
+ ConcurrentJITLocker locker(m_lock);
+ add(locker, key, entry);
+ }
+
+ Map::AddResult set(const ConcurrentJITLocker&, StringImpl* key, const SymbolTableEntry& entry)
+ {
+ return m_map.set(key, entry);
+ }
+
+ void set(StringImpl* key, const SymbolTableEntry& entry)
+ {
+ ConcurrentJITLocker locker(m_lock);
+ set(locker, key, entry);
+ }
+
+ bool contains(const ConcurrentJITLocker&, StringImpl* key)
+ {
+ return m_map.contains(key);
+ }
+
+ bool contains(StringImpl* key)
+ {
+ ConcurrentJITLocker locker(m_lock);
+ return contains(locker, key);
+ }
+