From afe34df3ccaee6ddf77fd7bed46472ffdc1599a3 Mon Sep 17 00:00:00 2001 From: Zilin Zhu Date: Mon, 15 Aug 2022 09:08:25 +0800 Subject: Add synthetic buffer module (#1076) * Add synthetic buffer module * rename Buffer.h to BufferModule.h --- src/bun.js/bindings/ZigGlobalObject.cpp | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp') diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index 54f79af54..52c25d545 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -37,6 +37,7 @@ #include "JavaScriptCore/JSLock.h" #include "JavaScriptCore/JSMap.h" #include "JavaScriptCore/JSModuleLoader.h" +#include "JavaScriptCore/JSModuleNamespaceObject.h" #include "JavaScriptCore/JSModuleRecord.h" #include "JavaScriptCore/JSNativeStdFunction.h" #include "JavaScriptCore/JSObject.h" @@ -149,6 +150,8 @@ using JSBuffer = WebCore::JSBuffer; #include "DOMJITHelpers.h" #include +#include "../modules/BufferModule.h" + // #include static bool has_loaded_jsc = false; @@ -1761,6 +1764,12 @@ void GlobalObject::finishCreation(VM& vm) Base::finishCreation(vm); ASSERT(inherits(info())); + // Change prototype from null to object for synthetic modules. + m_moduleNamespaceObjectStructure.initLater( + [] (const Initializer& init) { + init.set(JSModuleNamespaceObject::createStructure(init.vm, init.owner, init.owner->objectPrototype())); + }); + m_NapiClassStructure.initLater( [](LazyClassStructure::Initializer& init) { init.setStructure(Zig::NapiClass::createStructure(init.vm, init.global, init.global->functionPrototype())); @@ -2461,20 +2470,9 @@ static JSC_DEFINE_HOST_FUNCTION(functionFulfillModuleSync, } if (res.result.value.tag == SyntheticModuleType::Buffer) { - auto generateSource = [](JSC::JSGlobalObject* lexicalGlobalObject, JSC::Identifier moduleKey, Vector& exportNames, JSC::MarkedArgumentBuffer& exportValues) { - JSC::VM& vm = lexicalGlobalObject->vm(); - GlobalObject* globalObject = reinterpret_cast(lexicalGlobalObject); - - exportNames.append(JSC::Identifier::fromString(vm, "Buffer"_s)); - exportValues.append(WebCore::JSBuffer::getConstructor(vm, globalObject)); - - exportNames.append(JSC::Identifier::fromString(vm, "Blob"_s)); - exportValues.append(globalObject->getDirect(vm, JSC::Identifier::fromString(vm, "Blob"_s))); - }; - auto source = JSC::SourceCode( JSC::SyntheticSourceProvider::create( - WTFMove(generateSource), + generateBufferSourceCode, JSC::SourceOrigin(WTF::URL::fileURLWithFileSystemPath("node:buffer"_s)), WTFMove(moduleKey))); globalObject->moduleLoader()->provideFetch(globalObject, key, WTFMove(source)); @@ -2538,16 +2536,9 @@ JSC::JSInternalPromise* GlobalObject::moduleLoaderFetch(JSGlobalObject* globalOb globalObject->vm().drainMicrotasks(); return promise; - } else if (res.result.value.tag == 1024) { - auto generateSource = [](JSC::JSGlobalObject* lexicalGlobalObject, JSC::Identifier moduleKey, Vector& exportNames, JSC::MarkedArgumentBuffer& exportValues) { - JSC::VM& vm = lexicalGlobalObject->vm(); - GlobalObject* globalObject = reinterpret_cast(lexicalGlobalObject); - exportNames.append(JSC::Identifier::fromString(globalObject->vm(), "Buffer"_s)); - exportValues.append(WebCore::JSBuffer::getConstructor(vm, globalObject)); - }; - + } else if (res.result.value.tag == SyntheticModuleType::Buffer) { auto source = JSC::SourceCode( - JSC::SyntheticSourceProvider::create(WTFMove(generateSource), + JSC::SyntheticSourceProvider::create(generateBufferSourceCode, JSC::SourceOrigin(), WTFMove(moduleKey))); auto sourceCode = JSSourceCode::create(vm, WTFMove(source)); -- cgit v1.2.3