diff options
author | 2023-05-29 11:23:10 -0700 | |
---|---|---|
committer | 2023-05-29 11:23:10 -0700 | |
commit | e2de1f5c133ed3aac6fcea7e8e7c5fcd771d65f9 (patch) | |
tree | 219ad30067db8641999811b67744ce665f45dd46 /src/bun.js/bindings/ZigGlobalObject.cpp | |
parent | 2b04ef4fae088b6f39628da312643cf4c54921ad (diff) | |
download | bun-e2de1f5c133ed3aac6fcea7e8e7c5fcd771d65f9.tar.gz bun-e2de1f5c133ed3aac6fcea7e8e7c5fcd771d65f9.tar.zst bun-e2de1f5c133ed3aac6fcea7e8e7c5fcd771d65f9.zip |
Natively support CommonJS at runtime (#3104)
* Natively support CommonJS at runtime
* cleanup how getters are handled, add fast path
* more consistent with node
* use * As
* Remove thrown modules on exception
* Handle exception better
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp')
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index f0ff9cf16..2a6be49b2 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -177,6 +177,7 @@ namespace JSCastingHelpers = JSC::JSCastingHelpers; #include "CallSite.h" #include "CallSitePrototype.h" #include "DOMWrapperWorld-class.h" +#include "CommonJSModuleRecord.h" constexpr size_t DEFAULT_ERROR_STACK_TRACE_LIMIT = 10; @@ -2607,6 +2608,45 @@ void GlobalObject::finishCreation(VM& vm) init.set(result.toObject(globalObject)); }); + m_commonJSModuleObjectStructure.initLater( + [](const Initializer<Structure>& init) { + init.set(Bun::createCommonJSModuleStructure(reinterpret_cast<Zig::GlobalObject*>(init.owner))); + }); + + m_commonJSFunctionArgumentsStructure.initLater( + [](const Initializer<Structure>& init) { + auto* globalObject = reinterpret_cast<Zig::GlobalObject*>(init.owner); + JSC::Structure* structure = globalObject->structureCache().emptyObjectStructureForPrototype( + globalObject, + globalObject->objectPrototype(), + 3); + JSC::PropertyOffset offset; + auto& vm = globalObject->vm(); + + structure = structure->addPropertyTransition( + vm, + structure, + JSC::Identifier::fromString(vm, "module"_s), + 0, + offset); + + structure = structure->addPropertyTransition( + vm, + structure, + JSC::Identifier::fromString(vm, "exports"_s), + 0, + offset); + + structure = structure->addPropertyTransition( + vm, + structure, + JSC::Identifier::fromString(vm, "require"_s), + JSC::PropertyAttribute::Function | JSC::PropertyAttribute::Builtin | 0, + offset); + + init.set(structure); + }); + // Change prototype from null to object for synthetic modules. m_moduleNamespaceObjectStructure.initLater( [](const Initializer<Structure>& init) { @@ -3798,6 +3838,8 @@ void GlobalObject::visitChildrenImpl(JSCell* cell, Visitor& visitor) thisObject->m_bunSleepThenCallback.visit(visitor); thisObject->m_lazyTestModuleObject.visit(visitor); thisObject->m_lazyPreloadTestModuleObject.visit(visitor); + thisObject->m_commonJSModuleObjectStructure.visit(visitor); + thisObject->m_commonJSFunctionArgumentsStructure.visit(visitor); thisObject->m_cachedGlobalObjectStructure.visit(visitor); thisObject->m_cachedGlobalProxyStructure.visit(visitor); |