diff options
Diffstat (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp')
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index eeccb6650..84cef9452 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -46,6 +46,7 @@ #include "JavaScriptCore/JSString.h" #include "JavaScriptCore/JSValueInternal.h" #include "JavaScriptCore/JSVirtualMachineInternal.h" +#include "JavaScriptCore/JSWeakMap.h" #include "JavaScriptCore/ObjectConstructor.h" #include "JavaScriptCore/OptionsList.h" #include "JavaScriptCore/ParserError.h" @@ -105,6 +106,7 @@ #include "ReadableStreamBuiltins.h" #include "BunJSCModule.h" #include "ModuleLoader.h" +#include "NodeVMScript.h" #include "ZigGeneratedClasses.h" #include "JavaScriptCore/DateInstance.h" @@ -1209,6 +1211,7 @@ JSC: static NeverDestroyed<const String> noopString(MAKE_STATIC_STRING_IMPL("noop")); static NeverDestroyed<const String> createImportMeta(MAKE_STATIC_STRING_IMPL("createImportMeta")); static NeverDestroyed<const String> masqueradesAsUndefined(MAKE_STATIC_STRING_IMPL("masqueradesAsUndefined")); + static NeverDestroyed<const String> vmString(MAKE_STATIC_STRING_IMPL("vm")); JSC::JSValue moduleName = callFrame->argument(0); if (moduleName.isNumber()) { @@ -1292,6 +1295,20 @@ JSC: return JSValue::encode(InternalFunction::createFunctionThatMasqueradesAsUndefined(vm, globalObject, 0, String(), functionCallNotImplemented)); } + if (string == vmString) { + auto* obj = constructEmptyObject(globalObject); + obj->putDirect( + vm, JSC::PropertyName(JSC::Identifier::fromString(vm, "Script"_s)), + reinterpret_cast<Zig::GlobalObject*>(globalObject)->NodeVMScript(), 0); + obj->putDirect( + vm, JSC::PropertyName(JSC::Identifier::fromString(vm, "createContext"_s)), + JSC::JSFunction::create(vm, globalObject, 0, "createContext"_s, vmModule_createContext, ImplementationVisibility::Public), 0); + obj->putDirect( + vm, JSC::PropertyName(JSC::Identifier::fromString(vm, "isContext"_s)), + JSC::JSFunction::create(vm, globalObject, 0, "isContext"_s, vmModule_isContext, ImplementationVisibility::Public), 0); + return JSValue::encode(obj); + } + if (UNLIKELY(string == noopString)) { auto* obj = constructEmptyObject(globalObject); obj->putDirectCustomAccessor(vm, JSC::PropertyName(JSC::Identifier::fromString(vm, "getterSetter"_s)), JSC::CustomGetterSetter::create(vm, noop_getter, noop_setter), 0); @@ -2579,6 +2596,11 @@ void GlobalObject::finishCreation(VM& vm) init.set(dnsObject); }); + m_vmModuleContextMap.initLater( + [](const Initializer<JSWeakMap>& init) { + init.set(JSWeakMap::create(init.vm, init.owner->weakMapStructure())); + }); + m_JSBufferSubclassStructure.initLater( [](const Initializer<Structure>& init) { auto* globalObject = reinterpret_cast<Zig::GlobalObject*>(init.owner); @@ -2849,6 +2871,19 @@ void GlobalObject::finishCreation(VM& vm) init.setStructure(Zig::JSFFIFunction::createStructure(init.vm, init.global, init.global->functionPrototype())); }); + m_NodeVMScriptClassStructure.initLater( + [](LazyClassStructure::Initializer& init) { + auto prototype = NodeVMScript::createPrototype(init.vm, init.global); + auto* structure = NodeVMScript::createStructure(init.vm, init.global, prototype); + auto* constructorStructure = NodeVMScriptConstructor::createStructure( + init.vm, init.global, init.global->m_functionPrototype.get()); + auto* constructor = NodeVMScriptConstructor::create( + init.vm, init.global, constructorStructure, prototype); + init.setPrototype(prototype); + init.setStructure(structure); + init.setConstructor(constructor); + }); + addBuiltinGlobals(vm); #if ENABLE(REMOTE_INSPECTOR) @@ -3672,6 +3707,7 @@ void GlobalObject::visitChildrenImpl(JSCell* cell, Visitor& visitor) thisObject->m_JSStringDecoderClassStructure.visit(visitor); thisObject->m_NapiClassStructure.visit(visitor); thisObject->m_JSBufferClassStructure.visit(visitor); + thisObject->m_NodeVMScriptClassStructure.visit(visitor); thisObject->m_pendingVirtualModuleResultStructure.visit(visitor); thisObject->m_performMicrotaskFunction.visit(visitor); @@ -3696,6 +3732,7 @@ void GlobalObject::visitChildrenImpl(JSCell* cell, Visitor& visitor) thisObject->m_requireResolveFunctionStructure.visit(visitor); thisObject->m_resolveFunctionPrototype.visit(visitor); thisObject->m_dnsObject.visit(visitor); + thisObject->m_vmModuleContextMap.visit(visitor); thisObject->m_bunSleepThenCallback.visit(visitor); for (auto& barrier : thisObject->m_thenables) { |