diff options
author | 2022-08-15 09:08:25 +0800 | |
---|---|---|
committer | 2022-08-14 18:08:25 -0700 | |
commit | afe34df3ccaee6ddf77fd7bed46472ffdc1599a3 (patch) | |
tree | f0520483a462ae781f35e06fda04bc8f773e6a62 | |
parent | 9af4c0420e3c930f4d01a77e9a97f75a62a87327 (diff) | |
download | bun-afe34df3ccaee6ddf77fd7bed46472ffdc1599a3.tar.gz bun-afe34df3ccaee6ddf77fd7bed46472ffdc1599a3.tar.zst bun-afe34df3ccaee6ddf77fd7bed46472ffdc1599a3.zip |
Add synthetic buffer module (#1076)
* Add synthetic buffer module
* rename Buffer.h to BufferModule.h
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 33 | ||||
-rw-r--r-- | src/bun.js/javascript.zig | 2 | ||||
-rw-r--r-- | src/bun.js/modules/BufferModule.h | 27 |
4 files changed, 44 insertions, 21 deletions
@@ -266,6 +266,7 @@ MAC_INCLUDE_DIRS := -I$(WEBKIT_RELEASE_DIR)/JavaScriptCore/PrivateHeaders \ -Isrc/bun.js/bindings/webcore \ -Isrc/bun.js/bindings/sqlite \ -Isrc/bun.js/builtins/cpp \ + -Isrc/bun.js/modules \ -I$(WEBKIT_DIR)/Source/bmalloc \ -I$(WEBKIT_DIR)/Source \ -I$(JSC_INCLUDE_DIR) @@ -276,6 +277,7 @@ LINUX_INCLUDE_DIRS := -I$(JSC_INCLUDE_DIR) \ -Isrc/bun.js/bindings/webcore \ -Isrc/bun.js/bindings/sqlite \ -Isrc/bun.js/builtins/cpp \ + -Isrc/bun.js/modules \ -I$(ZLIB_INCLUDE_DIR) @@ -1115,6 +1117,7 @@ jsc-copy-headers: cp $(WEBKIT_DIR)/Source/JavaScriptCore/runtime/LazyPropertyInlines.h $(WEBKIT_RELEASE_DIR)/JavaScriptCore/PrivateHeaders/JavaScriptCore/LazyPropertyInlines.h cp $(WEBKIT_DIR)/Source/JavaScriptCore/runtime/JSTypedArrayViewPrototype.h $(WEBKIT_RELEASE_DIR)/JavaScriptCore/PrivateHeaders/JavaScriptCore/JSTypedArrayViewPrototype.h cp $(WEBKIT_DIR)/Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.h $(WEBKIT_RELEASE_DIR)/JavaScriptCore/PrivateHeaders/JavaScriptCore/JSTypedArrayPrototypes.h + cp $(WEBKIT_DIR)/Source/JavaScriptCore/runtime/JSModuleNamespaceObject.h $(WEBKIT_RELEASE_DIR)/JavaScriptCore/PrivateHeaders/JavaScriptCore/JSModuleNamespaceObject.h cp $(WEBKIT_DIR)/Source/JavaScriptCore/jit/JIT.h $(WEBKIT_RELEASE_DIR)/JavaScriptCore/PrivateHeaders/JavaScriptCore/JIT.h cp $(WEBKIT_DIR)/Source/JavaScriptCore/bytecode/StructureStubInfo.h $(WEBKIT_RELEASE_DIR)/JavaScriptCore/PrivateHeaders/JavaScriptCore/StructureStubInfo.h cp $(WEBKIT_DIR)/Source/JavaScriptCore/bytecode/PolymorphicAccess.h $(WEBKIT_RELEASE_DIR)/JavaScriptCore/PrivateHeaders/JavaScriptCore/PolymorphicAccess.h 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 <JavaScriptCore/DFGAbstractHeap.h> +#include "../modules/BufferModule.h" + // #include <iostream> 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<Structure>& 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<JSC::Identifier, 4>& exportNames, JSC::MarkedArgumentBuffer& exportValues) { - JSC::VM& vm = lexicalGlobalObject->vm(); - GlobalObject* globalObject = reinterpret_cast<GlobalObject*>(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<JSC::Identifier, 4>& exportNames, JSC::MarkedArgumentBuffer& exportValues) { - JSC::VM& vm = lexicalGlobalObject->vm(); - GlobalObject* globalObject = reinterpret_cast<GlobalObject*>(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)); diff --git a/src/bun.js/javascript.zig b/src/bun.js/javascript.zig index 71394bfbf..d480bbac4 100644 --- a/src/bun.js/javascript.zig +++ b/src/bun.js/javascript.zig @@ -2759,6 +2759,7 @@ pub const HardcodedModule = enum { pub const Map = bun.ComptimeStringMap( HardcodedModule, .{ + .{ "buffer", HardcodedModule.@"node:buffer" }, .{ "bun:ffi", HardcodedModule.@"bun:ffi" }, .{ "bun:jsc", HardcodedModule.@"bun:jsc" }, .{ "bun:main", HardcodedModule.@"bun:main" }, @@ -2791,6 +2792,7 @@ pub const HardcodedModule = enum { pub const LinkerMap = bun.ComptimeStringMap( string, .{ + .{ "buffer", "node:buffer" }, .{ "bun", "bun" }, .{ "bun:ffi", "bun:ffi" }, .{ "bun:jsc", "bun:jsc" }, diff --git a/src/bun.js/modules/BufferModule.h b/src/bun.js/modules/BufferModule.h new file mode 100644 index 000000000..12d4c54c8 --- /dev/null +++ b/src/bun.js/modules/BufferModule.h @@ -0,0 +1,27 @@ +#include "../bindings/ZigGlobalObject.h" +#include "JavaScriptCore/JSGlobalObject.h" + +namespace Zig { + +inline void generateBufferSourceCode(JSC::JSGlobalObject* lexicalGlobalObject, JSC::Identifier moduleKey, Vector<JSC::Identifier, 4>& exportNames, JSC::MarkedArgumentBuffer& exportValues) { + JSC::VM& vm = lexicalGlobalObject->vm(); + GlobalObject* globalObject = reinterpret_cast<GlobalObject*>(lexicalGlobalObject); + + exportNames.append(JSC::Identifier::fromString(vm, "Buffer"_s)); + exportValues.append(WebCore::JSBuffer::getConstructor(vm, globalObject)); + + // substitute after JSBlob is implemented. + exportNames.append(JSC::Identifier::fromString(vm, "Blob"_s)); + exportValues.append(JSC::jsUndefined()); + + exportNames.append(JSC::Identifier::fromString(vm, "INSPECT_MAX_BYTES"_s)); + exportValues.append(JSC::jsNumber(50)); + + exportNames.append(JSC::Identifier::fromString(vm, "kMaxLength"_s)); + exportValues.append(JSC::jsNumber(4294967296LL)); + + exportNames.append(JSC::Identifier::fromString(vm, "kMaxLength"_s)); + exportValues.append(JSC::jsNumber(536870888)); +} + +} |