Ignore:
Timestamp:
Dec 6, 2019, 9:48:08 PM (6 years ago)
Author:
[email protected]
Message:

[JSC] Put JSModuleNamespaceObject in IsoSubspace
https://bugs.webkit.org/show_bug.cgi?id=204973

Reviewed by Mark Lam.

We found that we do not need to embed AbstractModuleRecord vector inside JSModuleNamespaceObject: we can just put it
in ExportEntry. So we can make it non-variable-sized cell. Further, this patch puts it in IsoSubspace.

  • runtime/CellSize.h:

(JSC::isDynamicallySizedType):
(JSC::cellSize):

  • runtime/JSModuleNamespaceObject.cpp:

(JSC::JSModuleNamespaceObject::finishCreation):
(JSC::JSModuleNamespaceObject::visitChildren):
(JSC::JSModuleNamespaceObject::getOwnPropertySlotCommon):

  • runtime/JSModuleNamespaceObject.h:
  • runtime/VM.cpp:

(JSC::VM::VM):

  • runtime/VM.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/JSModuleNamespaceObject.cpp

    r251425 r253240  
    6060
    6161    m_moduleRecord.set(vm, this, moduleRecord);
     62    m_names.reserveCapacity(resolutions.size());
    6263    {
    63         unsigned moduleRecordOffset = 0;
    64         m_names.reserveCapacity(resolutions.size());
     64        auto locker = holdLock(cellLock());
    6565        for (const auto& pair : resolutions) {
    66             moduleRecordAt(moduleRecordOffset).set(vm, this, pair.second.moduleRecord);
    6766            m_names.append(pair.first);
    68             m_exports.add(pair.first.impl(), ExportEntry {
    69                 pair.second.localName,
    70                 moduleRecordOffset
    71             });
    72             ++moduleRecordOffset;
     67            auto addResult = m_exports.add(pair.first.impl(), ExportEntry());
     68            addResult.iterator->value.localName = pair.second.localName;
     69            addResult.iterator->value.moduleRecord.set(vm, this, pair.second.moduleRecord);
    7370        }
    7471    }
     
    9693    Base::visitChildren(thisObject, visitor);
    9794    visitor.append(thisObject->m_moduleRecord);
    98     for (unsigned i = 0; i < thisObject->m_names.size(); ++i)
    99         visitor.appendHidden(thisObject->moduleRecordAt(i));
     95    {
     96        auto locker = holdLock(thisObject->cellLock());
     97        for (auto& pair : thisObject->m_exports)
     98            visitor.appendHidden(pair.value.moduleRecord);
     99    }
    100100}
    101101
     
    137137    case PropertySlot::InternalMethodType::GetOwnProperty:
    138138    case PropertySlot::InternalMethodType::Get: {
    139         JSModuleEnvironment* environment = moduleRecordAt(exportEntry.moduleRecordOffset)->moduleEnvironment();
     139        JSModuleEnvironment* environment = exportEntry.moduleRecord->moduleEnvironment();
    140140        ScopeOffset scopeOffset;
    141141        JSValue value = getValue(environment, exportEntry.localName, scopeOffset);
Note: See TracChangeset for help on using the changeset viewer.