mirror of
https://github.com/Samsung/escargot.git
synced 2026-06-22 10:01:50 +00:00
Fix get object inline cache bug
we must convert form of inline cache when find complex case(max index is greater than 1) of get object. Signed-off-by: Seonghyun Kim <sh8281.kim@samsung.com>
This commit is contained in:
parent
635c609330
commit
e6ff2808c8
1 changed files with 11 additions and 1 deletions
|
|
@ -2239,10 +2239,20 @@ NEVER_INLINE void ByteCodeInterpreter::getObjectPrecomputedCaseOperationCacheMis
|
|||
goto GiveUp;
|
||||
}
|
||||
|
||||
if (code->m_inlineCacheProtoTraverseMaxIndex == 0 && (cachedhiddenClassChain.size() - 1) != 0) {
|
||||
// convert simple case to complex case
|
||||
for (size_t i = 1; i < inlineCache->m_cache.size(); i++) {
|
||||
auto oldClass = inlineCache->m_cache[i].m_cachedhiddenClass;
|
||||
block->m_inlineCacheDataSize += sizeof(size_t);
|
||||
currentCodeSizeTotal += sizeof(size_t);
|
||||
inlineCache->m_cache[i].m_cachedhiddenClassChain = (ObjectStructure**)GC_MALLOC(sizeof(ObjectStructure*));
|
||||
inlineCache->m_cache[i].m_cachedhiddenClassChain[0] = oldClass;
|
||||
}
|
||||
}
|
||||
code->m_inlineCacheProtoTraverseMaxIndex = std::max(cachedhiddenClassChain.size() - 1, (size_t)code->m_inlineCacheProtoTraverseMaxIndex);
|
||||
|
||||
newItem.m_cachedhiddenClassChainLength = cachedhiddenClassChain.size();
|
||||
if (newItem.m_cachedhiddenClassChainLength == 1) {
|
||||
if (newItem.m_cachedhiddenClassChainLength == 1 && code->m_inlineCacheProtoTraverseMaxIndex == 0) {
|
||||
newItem.m_cachedhiddenClass = cachedhiddenClassChain[0];
|
||||
} else {
|
||||
block->m_inlineCacheDataSize += sizeof(size_t) * cachedhiddenClassChain.size();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue