mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
Add synthetic buffer module (#1076)
* Add synthetic buffer module * rename Buffer.h to BufferModule.h
This commit is contained in:
3
Makefile
3
Makefile
@@ -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
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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" },
|
||||
|
||||
27
src/bun.js/modules/BufferModule.h
Normal file
27
src/bun.js/modules/BufferModule.h
Normal file
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user