-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Upgrade WebKit to 5c046702474d08edd6319a653919392e461d76ab #21606
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Updated WebKit version from 642e2252f6298387edb6d2f991a0408fd0320466 to 5c046702474d08edd6319a653919392e461d76ab - Fixed NodeVMSyntheticModule to use new SyntheticModuleRecord API - Replaced deprecated setModuleEnvironment with tryCreateWithExportNamesAndValues - The new API handles module environment creation internally, eliminating the need for manual setup 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
if (!moduleRecord) { | ||
// Fallback to old approach if new API fails | ||
moduleRecord = SyntheticModuleRecord::create(globalObject, vm, globalObject->syntheticModuleRecordStructure(), Identifier::fromString(vm, identifier())); | ||
|
||
for (const String& exportName : m_exportNames) { | ||
auto offset = exportSymbolTable->takeNextScopeOffset(NoLockingNecessary); | ||
Identifier exportIdentifier = Identifier::fromString(vm, exportName); | ||
moduleRecord->addExportEntry(SyntheticModuleRecord::ExportEntry::createLocal(exportIdentifier, exportIdentifier)); | ||
exportSymbolTable->set(NoLockingNecessary, exportIdentifier.releaseImpl().get(), SymbolTableEntry(VarOffset(offset))); | ||
for (const String& exportName : m_exportNames) { | ||
Identifier exportIdentifier = Identifier::fromString(vm, exportName); | ||
moduleRecord->addExportEntry(SyntheticModuleRecord::ExportEntry::createLocal(exportIdentifier, exportIdentifier)); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The fallback implementation is missing critical components from the original code. If tryCreateWithExportNamesAndValues()
fails, the current fallback creates a module record and adds export entries, but omits:
- Symbol table creation
- Module environment setup
- The
setModuleEnvironment()
call
For complete backward compatibility, the fallback should include the full original implementation:
// Fallback to old approach if new API fails
moduleRecord = SyntheticModuleRecord::create(globalObject, vm, globalObject->syntheticModuleRecordStructure(), Identifier::fromString(vm, identifier()));
SymbolTable* exportSymbolTable = SymbolTable::create(vm);
ScopeOffset offset = exportSymbolTable->takeNextScopeOffset(NoLockingNecessary);
exportSymbolTable->set(NoLockingNecessary, vm.propertyNames->starNamespacePrivateName.impl(), SymbolTableEntry(VarOffset(offset)));
for (const String& exportName : m_exportNames) {
auto offset = exportSymbolTable->takeNextScopeOffset(NoLockingNecessary);
Identifier exportIdentifier = Identifier::fromString(vm, exportName);
moduleRecord->addExportEntry(SyntheticModuleRecord::ExportEntry::createLocal(exportIdentifier, exportIdentifier));
exportSymbolTable->set(NoLockingNecessary, exportIdentifier.releaseImpl().get(), SymbolTableEntry(VarOffset(offset)));
}
JSModuleEnvironment* moduleEnvironment = JSModuleEnvironment::create(vm, globalObject, nullptr, exportSymbolTable, jsTDZValue(), moduleRecord);
moduleRecord->setModuleEnvironment(globalObject, moduleEnvironment);
if (!moduleRecord) { | |
// Fallback to old approach if new API fails | |
moduleRecord = SyntheticModuleRecord::create(globalObject, vm, globalObject->syntheticModuleRecordStructure(), Identifier::fromString(vm, identifier())); | |
for (const String& exportName : m_exportNames) { | |
auto offset = exportSymbolTable->takeNextScopeOffset(NoLockingNecessary); | |
Identifier exportIdentifier = Identifier::fromString(vm, exportName); | |
moduleRecord->addExportEntry(SyntheticModuleRecord::ExportEntry::createLocal(exportIdentifier, exportIdentifier)); | |
exportSymbolTable->set(NoLockingNecessary, exportIdentifier.releaseImpl().get(), SymbolTableEntry(VarOffset(offset))); | |
for (const String& exportName : m_exportNames) { | |
Identifier exportIdentifier = Identifier::fromString(vm, exportName); | |
moduleRecord->addExportEntry(SyntheticModuleRecord::ExportEntry::createLocal(exportIdentifier, exportIdentifier)); | |
} | |
if (!moduleRecord) { | |
// Fallback to old approach if new API fails | |
moduleRecord = SyntheticModuleRecord::create(globalObject, vm, globalObject->syntheticModuleRecordStructure(), Identifier::fromString(vm, identifier())); | |
SymbolTable* exportSymbolTable = SymbolTable::create(vm); | |
ScopeOffset offset = exportSymbolTable->takeNextScopeOffset(NoLockingNecessary); | |
exportSymbolTable->set(NoLockingNecessary, vm.propertyNames->starNamespacePrivateName.impl(), SymbolTableEntry(VarOffset(offset))); | |
for (const String& exportName : m_exportNames) { | |
auto offset = exportSymbolTable->takeNextScopeOffset(NoLockingNecessary); | |
Identifier exportIdentifier = Identifier::fromString(vm, exportName); | |
moduleRecord->addExportEntry(SyntheticModuleRecord::ExportEntry::createLocal(exportIdentifier, exportIdentifier)); | |
exportSymbolTable->set(NoLockingNecessary, exportIdentifier.releaseImpl().get(), SymbolTableEntry(VarOffset(offset))); | |
} | |
JSModuleEnvironment* moduleEnvironment = JSModuleEnvironment::create(vm, globalObject, nullptr, exportSymbolTable, jsTDZValue(), moduleRecord); | |
moduleRecord->setModuleEnvironment(globalObject, moduleEnvironment); |
Spotted by Diamond
Is this helpful? React 👍 or 👎 to let us know.
Summary
This PR upgrades Bun's WebKit dependency from version
642e2252f6298387edb6d2f991a0408fd0320466
to the latest version5c046702474d08edd6319a653919392e461d76ab
.Changes
WEBKIT_VERSION
incmake/tools/SetupWebKit.cmake
NodeVMSyntheticModule::createModuleRecord()
to use the new WebKit APIsetModuleEnvironment()
call withSyntheticModuleRecord::tryCreateWithExportNamesAndValues()
Technical Details
The WebKit upgrade introduced a breaking change where
AbstractModuleRecord::setModuleEnvironment()
became protected and is no longer accessible externally. The newSyntheticModuleRecord::tryCreateWithExportNamesAndValues()
API provides a cleaner approach that encapsulates the module environment setup.Testing
42 + 8
→50
)fetch
function available)🤖 Generated with Claude Code