- uint32_t getResolveOperations(const Identifier& property)
- {
- if (m_dynamicScopeDepth)
- return m_codeBlock->addResolve();
- IdentifierResolveMap::AddResult result = m_resolveCacheMap.add(property.impl(), 0);
- if (result.isNewEntry)
- result.iterator->value = m_codeBlock->addResolve();
- return result.iterator->value;
- }
-
- uint32_t getResolveWithThisOperations(const Identifier& property)
- {
- if (m_dynamicScopeDepth)
- return m_codeBlock->addResolve();
- IdentifierResolveMap::AddResult result = m_resolveWithThisCacheMap.add(property.impl(), 0);
- if (result.isNewEntry)
- result.iterator->value = m_codeBlock->addResolve();
- return result.iterator->value;
- }
-
- uint32_t getResolveBaseOperations(IdentifierResolvePutMap& map, const Identifier& property, uint32_t& putToBaseOperation)
- {
- if (m_dynamicScopeDepth) {
- putToBaseOperation = m_codeBlock->addPutToBase();
- return m_codeBlock->addResolve();
- }
- ResolveCacheEntry entry = {-1, -1};
- IdentifierResolvePutMap::AddResult result = map.add(property.impl(), entry);
- if (result.isNewEntry)
- result.iterator->value.resolveOperations = m_codeBlock->addResolve();
- if (result.iterator->value.putOperations == -1)
- result.iterator->value.putOperations = getPutToBaseOperation(property);
- putToBaseOperation = result.iterator->value.putOperations;
- return result.iterator->value.resolveOperations;
- }
-
- uint32_t getResolveBaseOperations(const Identifier& property)
- {
- uint32_t scratch;
- return getResolveBaseOperations(m_resolveBaseMap, property, scratch);
- }
-
- uint32_t getResolveBaseForPutOperations(const Identifier& property, uint32_t& putToBaseOperation)
- {
- return getResolveBaseOperations(m_resolveBaseForPutMap, property, putToBaseOperation);
- }
-
- uint32_t getResolveWithBaseForPutOperations(const Identifier& property, uint32_t& putToBaseOperation)
- {
- return getResolveBaseOperations(m_resolveWithBaseForPutMap, property, putToBaseOperation);
- }
-
- uint32_t getPutToBaseOperation(const Identifier& property)
- {
- if (m_dynamicScopeDepth)
- return m_codeBlock->addPutToBase();
- IdentifierResolveMap::AddResult result = m_putToBaseMap.add(property.impl(), 0);
- if (result.isNewEntry)
- result.iterator->value = m_codeBlock->addPutToBase();
- return result.iterator->value;
- }
-
- IdentifierResolveMap m_putToBaseMap;
- IdentifierResolveMap m_resolveCacheMap;
- IdentifierResolveMap m_resolveWithThisCacheMap;
- IdentifierResolvePutMap m_resolveBaseMap;
- IdentifierResolvePutMap m_resolveBaseForPutMap;
- IdentifierResolvePutMap m_resolveWithBaseForPutMap;
-
- StaticPropertyAnalyzer m_staticPropertyAnalyzer;