diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml new file mode 100644 index 0000000000..0bbeae1f96 --- /dev/null +++ b/.github/workflows/clang-format.yml @@ -0,0 +1,55 @@ +name: clang-format + +permissions: + contents: write + +on: + workflow_call: + workflow_dispatch: + pull_request: + paths: + - ".github/workflows/clang-format.yml" + - ".clang-format" + - "package.json" + - "scripts/**" + - "cmake/**" + - "src/**/*.{c,cpp,h,hpp}" + - "packages/**/*.{c,cpp,h,hpp}" + +env: + BUN_VERSION: "1.1.27" + LLVM_VERSION: "18.1.8" + LLVM_VERSION_MAJOR: "18" + +jobs: + clang-format: + name: clang-format + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + sparse-checkout: | + .github + .clang-format + package.json + scripts + cmake + src + packages + - name: Setup Bun + uses: ./.github/actions/setup-bun + with: + bun-version: ${{ env.BUN_VERSION }} + - name: Install LLVM + run: | + curl -fsSL https://apt.llvm.org/llvm.sh | sudo bash -s -- ${{ env.LLVM_VERSION_MAJOR }} all + sudo apt-get update + sudo apt-get install -y ninja-build ccache + - name: Format + run: | + bun run clang-format -DLLVM_VERSION=${{ env.LLVM_VERSION }} + - name: Commit + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: "`bun run clang-format`" diff --git a/.github/workflows/run-format.yml b/.github/workflows/run-format.yml index 49432e1381..8a5dc07706 100644 --- a/.github/workflows/run-format.yml +++ b/.github/workflows/run-format.yml @@ -47,9 +47,6 @@ jobs: - name: Format Zig run: | bun fmt:zig - - name: Format Cpp - run: | - bun fmt:cpp - name: Commit uses: stefanzweifel/git-auto-commit-action@v5 with: diff --git a/CMakeLists.txt b/CMakeLists.txt index 17be34f43a..57f8d0dd64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,3 +39,7 @@ include(SetupRust) # --- Targets --- include(BuildBun) + +# --- Analysis --- + +include(RunClangFormat) diff --git a/cmake/Globals.cmake b/cmake/Globals.cmake index 1dcb5e57fa..9c14fd57db 100644 --- a/cmake/Globals.cmake +++ b/cmake/Globals.cmake @@ -377,12 +377,12 @@ function(register_command) get_source_file_property(generated ${output} GENERATED) if(generated) list(REMOVE_ITEM CMD_EFFECTIVE_OUTPUTS ${output}) - list(APPEND CMD_EFFECTIVE_OUTPUTS ${output}.always_run) + list(APPEND CMD_EFFECTIVE_OUTPUTS ${output}.always_run_${CMD_TARGET}) endif() endforeach() if(CMD_ALWAYS_RUN) - list(APPEND CMD_EFFECTIVE_OUTPUTS ${CMD_CWD}/.always_run) + list(APPEND CMD_EFFECTIVE_OUTPUTS ${CMD_CWD}/.always_run_${CMD_TARGET}) endif() if(CMD_TARGET_PHASE) diff --git a/cmake/analysis/RunClangFormat.cmake b/cmake/analysis/RunClangFormat.cmake new file mode 100644 index 0000000000..ef33274255 --- /dev/null +++ b/cmake/analysis/RunClangFormat.cmake @@ -0,0 +1,37 @@ +find_command( + VARIABLE + CLANG_FORMAT_PROGRAM + COMMAND + clang-format + REQUIRED + OFF +) + +set(CLANG_FORMAT_SOURCES ${BUN_C_SOURCES} ${BUN_CXX_SOURCES}) + +register_command( + TARGET + clang-format-check + COMMENT + "Running clang-format" + COMMAND + ${CLANG_FORMAT_PROGRAM} + -Werror + --dry-run + --verbose + ${CLANG_FORMAT_SOURCES} + ALWAYS_RUN +) + +register_command( + TARGET + clang-format + COMMENT + "Fixing clang-format" + COMMAND + ${CLANG_FORMAT_PROGRAM} + -i # edits files in-place + --verbose + ${CLANG_FORMAT_SOURCES} + ALWAYS_RUN +) diff --git a/cmake/targets/BuildBun.cmake b/cmake/targets/BuildBun.cmake index 0e5554992e..8eb7a95dfa 100644 --- a/cmake/targets/BuildBun.cmake +++ b/cmake/targets/BuildBun.cmake @@ -577,6 +577,10 @@ file(GLOB BUN_C_SOURCES ${CONFIGURE_DEPENDS} ${BUN_USOCKETS_SOURCE}/src/crypto/*.c ) +if(WIN32) + list(APPEND BUN_C_SOURCES ${CWD}/src/bun.js/bindings/windows/musl-memmem.c) +endif() + register_repository( NAME picohttpparser @@ -588,15 +592,10 @@ register_repository( picohttpparser.c ) -list(APPEND BUN_C_SOURCES ${VENDOR_PATH}/picohttpparser/picohttpparser.c) - -if(WIN32) - list(APPEND BUN_C_SOURCES ${CWD}/src/bun.js/bindings/windows/musl-memmem.c) -endif() - list(APPEND BUN_CPP_SOURCES ${BUN_C_SOURCES} ${BUN_CXX_SOURCES} + ${VENDOR_PATH}/picohttpparser/picohttpparser.c ${BUN_ZIG_GENERATED_CLASSES_OUTPUTS} ${BUN_JS_SINK_OUTPUTS} ${BUN_JAVASCRIPT_OUTPUTS} diff --git a/package.json b/package.json index 99d6bc2585..41836d180d 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "bump": "bun ./scripts/bump.ts", "typecheck": "tsc --noEmit && cd test && bun run typecheck", "fmt": "prettier --config=.prettierrc-ci --write --cache './{.vscode,src,test,bench,packages/{bun-types,bun-inspector-*,bun-vscode,bun-debug-adapter-protocol}}/**/*.{mjs,ts,tsx,js,jsx}'", - "fmt:cpp": "clang-format -i src/bun.js/bindings/**/*.{cpp,h} --verbose", + "fmt:cpp": "bun run clang-format", "fmt:zig": "bun run zig:fmt", "lint": "eslint './**/*.d.ts' --cache", "lint:fix": "eslint './**/*.d.ts' --cache --fix", @@ -54,6 +54,8 @@ "zig:fmt": "bun run zig fmt src/*.zig src/*/*.zig src/*/*/*.zig src/*/*/*/*.zig", "zig:check": "bun run zig build check --summary new", "zig:check-all": "bun run zig build check-all --summary new", - "zig:check-windows": "bun run zig build check-windows --summary new" + "zig:check-windows": "bun run zig build check-windows --summary new", + "clang-format": "bun run build --target clang-format", + "clang-format:check": "bun run build --target clang-format-check" } } diff --git a/packages/bun-usockets/.clang-format b/packages/bun-usockets/.clang-format new file mode 100644 index 0000000000..e3845288a2 --- /dev/null +++ b/packages/bun-usockets/.clang-format @@ -0,0 +1 @@ +DisableFormat: true diff --git a/packages/bun-uws/.clang-format b/packages/bun-uws/.clang-format new file mode 100644 index 0000000000..e3845288a2 --- /dev/null +++ b/packages/bun-uws/.clang-format @@ -0,0 +1 @@ +DisableFormat: true diff --git a/src/bun.js/bindings/BunInspector.cpp b/src/bun.js/bindings/BunInspector.cpp index eb00870078..ef7a9a251d 100644 --- a/src/bun.js/bindings/BunInspector.cpp +++ b/src/bun.js/bindings/BunInspector.cpp @@ -120,19 +120,13 @@ static void addInspector(void* app, JSC::JSGlobalObject* globalObject) globalObject->setInspectable(true); *ws->getUserData() = new SSLBunInspectorConnection(ws, globalObject); SSLBunInspectorConnection* inspector = *ws->getUserData(); - inspector->onOpen(globalObject); - // - }, + inspector->onOpen(globalObject); }, .message = [](auto* ws, std::string_view message, uWS::OpCode opCode) { SSLBunInspectorConnection* inspector = *(SSLBunInspectorConnection**)ws->getUserData(); - inspector->onMessage(message); - // - }, + inspector->onMessage(message); }, .drain = [](auto* ws) { SSLBunInspectorConnection* inspector = *(SSLBunInspectorConnection**)ws->getUserData(); - inspector->drain(); - // - }, + inspector->drain(); }, .ping = [](auto* /*ws*/, std::string_view) { /* Not implemented yet */ }, .pong = [](auto* /*ws*/, std::string_view) { @@ -162,19 +156,13 @@ static void addInspector(void* app, JSC::JSGlobalObject* globalObject) globalObject->setInspectable(true); *ws->getUserData() = new BunInspectorConnectionNoSSL(ws, globalObject); BunInspectorConnectionNoSSL* inspector = *ws->getUserData(); - inspector->onOpen(globalObject); - // - }, + inspector->onOpen(globalObject); }, .message = [](auto* ws, std::string_view message, uWS::OpCode opCode) { - BunInspectorConnectionNoSSL* inspector = *(BunInspectorConnectionNoSSL**)ws->getUserData(); - inspector->onMessage(message); - // - }, + BunInspectorConnectionNoSSL* inspector = *(BunInspectorConnectionNoSSL**)ws->getUserData(); + inspector->onMessage(message); }, .drain = [](auto* ws) { - BunInspectorConnectionNoSSL* inspector = *(BunInspectorConnectionNoSSL**)ws->getUserData(); - inspector->drain(); - // - }, + BunInspectorConnectionNoSSL* inspector = *(BunInspectorConnectionNoSSL**)ws->getUserData(); + inspector->drain(); }, .ping = [](auto* /*ws*/, std::string_view) { /* Not implemented yet */ }, .pong = [](auto* /*ws*/, std::string_view) { @@ -190,7 +178,8 @@ static void addInspector(void* app, JSC::JSGlobalObject* globalObject) } } -extern "C" void Bun__addInspector(bool isSSL, void* app, JSC::JSGlobalObject* globalObject) +extern "C" void +Bun__addInspector(bool isSSL, void* app, JSC::JSGlobalObject* globalObject) { if (isSSL) { addInspector((uWS::TemplatedApp*)app, globalObject); diff --git a/src/bun.js/bindings/BunObject.cpp b/src/bun.js/bindings/BunObject.cpp index 43f5b4e47e..9d0629aa23 100644 --- a/src/bun.js/bindings/BunObject.cpp +++ b/src/bun.js/bindings/BunObject.cpp @@ -320,7 +320,8 @@ static JSValue constructBunShell(VM& vm, JSObject* bunObject) // This value currently depends on a zig feature flag extern "C" JSC::EncodedJSValue Bun__getTemporaryDevServer(JSC::JSGlobalObject* bunObject); -static JSValue constructBunKit(VM& vm, JSObject* bunObject) { +static JSValue constructBunKit(VM& vm, JSObject* bunObject) +{ return JSC::JSValue::decode(Bun__getTemporaryDevServer(bunObject->globalObject())); } diff --git a/src/bun.js/bindings/BunProcess.cpp b/src/bun.js/bindings/BunProcess.cpp index fb60334058..354036653d 100644 --- a/src/bun.js/bindings/BunProcess.cpp +++ b/src/bun.js/bindings/BunProcess.cpp @@ -382,7 +382,7 @@ JSC_DEFINE_HOST_FUNCTION(Process_functionDlopen, return JSValue::encode(jsUndefined()); } - JSC::EncodedJSValue (*napi_register_module_v1)(JSC::JSGlobalObject* globalObject, + JSC::EncodedJSValue (*napi_register_module_v1)(JSC::JSGlobalObject * globalObject, JSC::EncodedJSValue exports); #if OS(WINDOWS) #define dlsym GetProcAddress @@ -702,82 +702,82 @@ static void loadSignalNumberMap() signalNameToNumberMap->add(signalNames[9], SIGKILL); signalNameToNumberMap->add(signalNames[15], SIGTERM); #else - signalNameToNumberMap->add(signalNames[0], SIGHUP); - signalNameToNumberMap->add(signalNames[1], SIGINT); - signalNameToNumberMap->add(signalNames[2], SIGQUIT); - signalNameToNumberMap->add(signalNames[3], SIGILL); + signalNameToNumberMap->add(signalNames[0], SIGHUP); + signalNameToNumberMap->add(signalNames[1], SIGINT); + signalNameToNumberMap->add(signalNames[2], SIGQUIT); + signalNameToNumberMap->add(signalNames[3], SIGILL); #ifdef SIGTRAP - signalNameToNumberMap->add(signalNames[4], SIGTRAP); + signalNameToNumberMap->add(signalNames[4], SIGTRAP); #endif - signalNameToNumberMap->add(signalNames[5], SIGABRT); + signalNameToNumberMap->add(signalNames[5], SIGABRT); #ifdef SIGIOT - signalNameToNumberMap->add(signalNames[6], SIGIOT); + signalNameToNumberMap->add(signalNames[6], SIGIOT); #endif #ifdef SIGBUS - signalNameToNumberMap->add(signalNames[7], SIGBUS); + signalNameToNumberMap->add(signalNames[7], SIGBUS); #endif - signalNameToNumberMap->add(signalNames[8], SIGFPE); - signalNameToNumberMap->add(signalNames[9], SIGKILL); + signalNameToNumberMap->add(signalNames[8], SIGFPE); + signalNameToNumberMap->add(signalNames[9], SIGKILL); #ifdef SIGUSR1 - signalNameToNumberMap->add(signalNames[10], SIGUSR1); + signalNameToNumberMap->add(signalNames[10], SIGUSR1); #endif - signalNameToNumberMap->add(signalNames[11], SIGSEGV); + signalNameToNumberMap->add(signalNames[11], SIGSEGV); #ifdef SIGUSR2 - signalNameToNumberMap->add(signalNames[12], SIGUSR2); + signalNameToNumberMap->add(signalNames[12], SIGUSR2); #endif #ifdef SIGPIPE - signalNameToNumberMap->add(signalNames[13], SIGPIPE); + signalNameToNumberMap->add(signalNames[13], SIGPIPE); #endif #ifdef SIGALRM - signalNameToNumberMap->add(signalNames[14], SIGALRM); + signalNameToNumberMap->add(signalNames[14], SIGALRM); #endif - signalNameToNumberMap->add(signalNames[15], SIGTERM); + signalNameToNumberMap->add(signalNames[15], SIGTERM); #ifdef SIGCHLD - signalNameToNumberMap->add(signalNames[16], SIGCHLD); + signalNameToNumberMap->add(signalNames[16], SIGCHLD); #endif #ifdef SIGCONT - signalNameToNumberMap->add(signalNames[17], SIGCONT); + signalNameToNumberMap->add(signalNames[17], SIGCONT); #endif #ifdef SIGSTOP - signalNameToNumberMap->add(signalNames[18], SIGSTOP); + signalNameToNumberMap->add(signalNames[18], SIGSTOP); #endif #ifdef SIGTSTP - signalNameToNumberMap->add(signalNames[19], SIGTSTP); + signalNameToNumberMap->add(signalNames[19], SIGTSTP); #endif #ifdef SIGTTIN - signalNameToNumberMap->add(signalNames[20], SIGTTIN); + signalNameToNumberMap->add(signalNames[20], SIGTTIN); #endif #ifdef SIGTTOU - signalNameToNumberMap->add(signalNames[21], SIGTTOU); + signalNameToNumberMap->add(signalNames[21], SIGTTOU); #endif #ifdef SIGURG - signalNameToNumberMap->add(signalNames[22], SIGURG); + signalNameToNumberMap->add(signalNames[22], SIGURG); #endif #ifdef SIGXCPU - signalNameToNumberMap->add(signalNames[23], SIGXCPU); + signalNameToNumberMap->add(signalNames[23], SIGXCPU); #endif #ifdef SIGXFSZ - signalNameToNumberMap->add(signalNames[24], SIGXFSZ); + signalNameToNumberMap->add(signalNames[24], SIGXFSZ); #endif #ifdef SIGVTALRM - signalNameToNumberMap->add(signalNames[25], SIGVTALRM); + signalNameToNumberMap->add(signalNames[25], SIGVTALRM); #endif #ifdef SIGPROF - signalNameToNumberMap->add(signalNames[26], SIGPROF); + signalNameToNumberMap->add(signalNames[26], SIGPROF); #endif - signalNameToNumberMap->add(signalNames[27], SIGWINCH); + signalNameToNumberMap->add(signalNames[27], SIGWINCH); #ifdef SIGIO - signalNameToNumberMap->add(signalNames[28], SIGIO); + signalNameToNumberMap->add(signalNames[28], SIGIO); #endif #ifdef SIGINFO - signalNameToNumberMap->add(signalNames[29], SIGINFO); + signalNameToNumberMap->add(signalNames[29], SIGINFO); #endif #ifndef SIGINFO - signalNameToNumberMap->add(signalNames[29], 255); + signalNameToNumberMap->add(signalNames[29], 255); #endif #ifdef SIGSYS - signalNameToNumberMap->add(signalNames[30], SIGSYS); + signalNameToNumberMap->add(signalNames[30], SIGSYS); #endif #endif }); diff --git a/src/bun.js/bindings/bindings.cpp b/src/bun.js/bindings/bindings.cpp index 5ef057876a..5abf324d24 100644 --- a/src/bun.js/bindings/bindings.cpp +++ b/src/bun.js/bindings/bindings.cpp @@ -4883,7 +4883,7 @@ extern "C" void JSC__VM__getAPILock(JSC::VM* vm) vm->apiLock().lock(); } -extern "C" void JSC__VM__releaseAPILock(JSC::VM* vm) +extern "C" void JSC__VM__releaseAPILock(JSC::VM* vm) { // https://github.com/WebKit/WebKit/blob/6cb5017d237ef7cb898582a22f05acca22322845/Source/JavaScriptCore/runtime/JSLock.cpp#L72 RefPtr apiLock(&vm->apiLock()); diff --git a/src/bun.js/modules/BunObjectModule.cpp b/src/bun.js/modules/BunObjectModule.cpp index 57367dfb11..910614ce3f 100644 --- a/src/bun.js/modules/BunObjectModule.cpp +++ b/src/bun.js/modules/BunObjectModule.cpp @@ -11,7 +11,8 @@ void generateNativeModule_BunObject(JSC::JSGlobalObject *lexicalGlobalObject, JSC::MarkedArgumentBuffer &exportValues) { // FIXME: this does not add each property as a top level export JSC::VM &vm = lexicalGlobalObject->vm(); - Zig::GlobalObject *globalObject = jsCast(lexicalGlobalObject); + Zig::GlobalObject *globalObject = + jsCast(lexicalGlobalObject); JSObject *object = globalObject->bunObject(); diff --git a/src/io/io_darwin.cpp b/src/io/io_darwin.cpp index 3f4744454c..00cc31dd75 100644 --- a/src/io/io_darwin.cpp +++ b/src/io/io_darwin.cpp @@ -18,24 +18,25 @@ extern "C" mach_port_t io_darwin_create_machport(uint64_t wakeup, int32_t fd, kern_return_t kr = mach_port_allocate(self, MACH_PORT_RIGHT_RECEIVE, &port); if (UNLIKELY(kr != KERN_SUCCESS)) { - return 0; + return 0; } // Insert a send right into the port since we also use this to send kr = mach_port_insert_right(self, port, port, MACH_MSG_TYPE_MAKE_SEND); if (UNLIKELY(kr != KERN_SUCCESS)) { - return 0; + return 0; } // Modify the port queue size to be 1 because we are only // using it for notifications and not for any other purpose. - mach_port_limits_t limits = { .mpl_qlimit = 1 }; - kr = mach_port_set_attributes(self, port, MACH_PORT_LIMITS_INFO, (mach_port_info_t)&limits, MACH_PORT_LIMITS_INFO_COUNT); - - if (UNLIKELY(kr != KERN_SUCCESS)) { - return 0; - } + mach_port_limits_t limits = {.mpl_qlimit = 1}; + kr = mach_port_set_attributes(self, port, MACH_PORT_LIMITS_INFO, + (mach_port_info_t)&limits, + MACH_PORT_LIMITS_INFO_COUNT); + if (UNLIKELY(kr != KERN_SUCCESS)) { + return 0; + } // Configure the event to directly receive the Mach message as part of the // kevent64() call. @@ -85,37 +86,32 @@ extern "C" bool io_darwin_schedule_wakeup(mach_port_t waker) { .msgh_id = 0, }; - mach_msg_return_t kr = mach_msg( - &msg, - MACH_SEND_MSG | MACH_SEND_TIMEOUT, - msg.msgh_size, - 0, - MACH_PORT_NULL, - 0, // Fail instantly if the port is full - MACH_PORT_NULL - ); - - switch (kr) { - case MACH_MSG_SUCCESS: { - return true; - } - - // This means that the send would've blocked because the - // queue is full. We assume success because the port is full. - case MACH_SEND_TIMED_OUT: { - return true; - } + mach_msg_return_t kr = mach_msg(&msg, MACH_SEND_MSG | MACH_SEND_TIMEOUT, + msg.msgh_size, 0, MACH_PORT_NULL, + 0, // Fail instantly if the port is full + MACH_PORT_NULL); - // No space means it will wake up. - case MACH_SEND_NO_BUFFER: { - return true; - } + switch (kr) { + case MACH_MSG_SUCCESS: { + return true; + } - default: { - ASSERT_NOT_REACHED_WITH_MESSAGE("mach_msg failed with %x", kr); - return false; - } - } + // This means that the send would've blocked because the + // queue is full. We assume success because the port is full. + case MACH_SEND_TIMED_OUT: { + return true; + } + + // No space means it will wake up. + case MACH_SEND_NO_BUFFER: { + return true; + } + + default: { + ASSERT_NOT_REACHED_WITH_MESSAGE("mach_msg failed with %x", kr); + return false; + } + } } #else diff --git a/src/kit/KitDevGlobalObject.cpp b/src/kit/KitDevGlobalObject.cpp index e797f3f03b..7e3aee0977 100644 --- a/src/kit/KitDevGlobalObject.cpp +++ b/src/kit/KitDevGlobalObject.cpp @@ -1,82 +1,89 @@ #include "KitDevGlobalObject.h" -#include "JavaScriptCore/GlobalObjectMethodTable.h" #include "JSNextTickQueue.h" +#include "JavaScriptCore/GlobalObjectMethodTable.h" #include "headers-handwritten.h" namespace Kit { -#define INHERIT_HOOK_METHOD(name) Zig::GlobalObject::s_globalObjectMethodTable. name +#define INHERIT_HOOK_METHOD(name) \ + Zig::GlobalObject::s_globalObjectMethodTable.name -const JSC::GlobalObjectMethodTable DevGlobalObject::s_globalObjectMethodTable = { - INHERIT_HOOK_METHOD(supportsRichSourceInfo), - INHERIT_HOOK_METHOD(shouldInterruptScript), - INHERIT_HOOK_METHOD(javaScriptRuntimeFlags), - INHERIT_HOOK_METHOD(queueMicrotaskToEventLoop), - INHERIT_HOOK_METHOD(shouldInterruptScriptBeforeTimeout), - INHERIT_HOOK_METHOD(moduleLoaderImportModule), - INHERIT_HOOK_METHOD(moduleLoaderResolve), - INHERIT_HOOK_METHOD(moduleLoaderFetch), - INHERIT_HOOK_METHOD(moduleLoaderCreateImportMetaProperties), - INHERIT_HOOK_METHOD(moduleLoaderEvaluate), - INHERIT_HOOK_METHOD(promiseRejectionTracker), - INHERIT_HOOK_METHOD(reportUncaughtExceptionAtEventLoop), - INHERIT_HOOK_METHOD(currentScriptExecutionOwner), - INHERIT_HOOK_METHOD(scriptExecutionStatus), - INHERIT_HOOK_METHOD(reportViolationForUnsafeEval), - INHERIT_HOOK_METHOD(defaultLanguage), - INHERIT_HOOK_METHOD(compileStreaming), - INHERIT_HOOK_METHOD(instantiateStreaming), - INHERIT_HOOK_METHOD(deriveShadowRealmGlobalObject), - INHERIT_HOOK_METHOD(codeForEval), - INHERIT_HOOK_METHOD(canCompileStrings), +const JSC::GlobalObjectMethodTable DevGlobalObject::s_globalObjectMethodTable = + { + INHERIT_HOOK_METHOD(supportsRichSourceInfo), + INHERIT_HOOK_METHOD(shouldInterruptScript), + INHERIT_HOOK_METHOD(javaScriptRuntimeFlags), + INHERIT_HOOK_METHOD(queueMicrotaskToEventLoop), + INHERIT_HOOK_METHOD(shouldInterruptScriptBeforeTimeout), + INHERIT_HOOK_METHOD(moduleLoaderImportModule), + INHERIT_HOOK_METHOD(moduleLoaderResolve), + INHERIT_HOOK_METHOD(moduleLoaderFetch), + INHERIT_HOOK_METHOD(moduleLoaderCreateImportMetaProperties), + INHERIT_HOOK_METHOD(moduleLoaderEvaluate), + INHERIT_HOOK_METHOD(promiseRejectionTracker), + INHERIT_HOOK_METHOD(reportUncaughtExceptionAtEventLoop), + INHERIT_HOOK_METHOD(currentScriptExecutionOwner), + INHERIT_HOOK_METHOD(scriptExecutionStatus), + INHERIT_HOOK_METHOD(reportViolationForUnsafeEval), + INHERIT_HOOK_METHOD(defaultLanguage), + INHERIT_HOOK_METHOD(compileStreaming), + INHERIT_HOOK_METHOD(instantiateStreaming), + INHERIT_HOOK_METHOD(deriveShadowRealmGlobalObject), + INHERIT_HOOK_METHOD(codeForEval), + INHERIT_HOOK_METHOD(canCompileStrings), }; -DevGlobalObject* DevGlobalObject::create(JSC::VM& vm, JSC::Structure* structure, const JSC::GlobalObjectMethodTable* methodTable) -{ - DevGlobalObject* ptr = new (NotNull, JSC::allocateCell(vm)) DevGlobalObject(vm, structure, methodTable); - ptr->finishCreation(vm); - return ptr; +DevGlobalObject * +DevGlobalObject::create(JSC::VM &vm, JSC::Structure *structure, + const JSC::GlobalObjectMethodTable *methodTable) { + DevGlobalObject *ptr = new (NotNull, JSC::allocateCell(vm)) + DevGlobalObject(vm, structure, methodTable); + ptr->finishCreation(vm); + return ptr; } void DevGlobalObject::finishCreation(JSC::VM &vm) { - Base::finishCreation(vm); - ASSERT(inherits(info())); + Base::finishCreation(vm); + ASSERT(inherits(info())); } -extern "C" BunVirtualMachine* Bun__getVM(); +extern "C" BunVirtualMachine *Bun__getVM(); // A lot of this function is taken from 'Zig__GlobalObject__create' -extern "C" DevGlobalObject* KitCreateDevGlobal(DevServer* owner, void* console) { - JSC::VM& vm = JSC::VM::create(JSC::HeapType::Large).leakRef(); - vm.heap.acquireAccess(); - JSC::JSLockHolder locker(vm); - BunVirtualMachine* bunVM = Bun__getVM(); - WebCore::JSVMClientData::create(&vm, bunVM); +extern "C" DevGlobalObject *KitCreateDevGlobal(DevServer *owner, + void *console) { + JSC::VM &vm = JSC::VM::create(JSC::HeapType::Large).leakRef(); + vm.heap.acquireAccess(); + JSC::JSLockHolder locker(vm); + BunVirtualMachine *bunVM = Bun__getVM(); + WebCore::JSVMClientData::create(&vm, bunVM); - JSC::Structure* structure = DevGlobalObject::createStructure(vm); - DevGlobalObject* global = DevGlobalObject::create(vm, structure, &DevGlobalObject::s_globalObjectMethodTable); - if (!global) - BUN_PANIC("Failed to create DevGlobalObject"); + JSC::Structure *structure = DevGlobalObject::createStructure(vm); + DevGlobalObject *global = DevGlobalObject::create( + vm, structure, &DevGlobalObject::s_globalObjectMethodTable); + if (!global) + BUN_PANIC("Failed to create DevGlobalObject"); - global->m_devServer = owner; - global->m_bunVM = bunVM; + global->m_devServer = owner; + global->m_bunVM = bunVM; - JSC::gcProtect(global); + JSC::gcProtect(global); - global->setConsole(console); - global->setStackTraceLimit(10); // Node.js defaults to 10 + global->setConsole(console); + global->setStackTraceLimit(10); // Node.js defaults to 10 - // vm.setOnComputeErrorInfo(computeErrorInfoWrapper); - vm.setOnEachMicrotaskTick([global](JSC::VM& vm) -> void { - if (auto nextTickQueue = global->m_nextTickQueue.get()) { - global->resetOnEachMicrotaskTick(); - Bun::JSNextTickQueue* queue = jsCast(nextTickQueue); - queue->drain(vm, global); - return; - } - }); + // vm.setOnComputeErrorInfo(computeErrorInfoWrapper); + vm.setOnEachMicrotaskTick([global](JSC::VM &vm) -> void { + if (auto nextTickQueue = global->m_nextTickQueue.get()) { + global->resetOnEachMicrotaskTick(); + Bun::JSNextTickQueue *queue = + jsCast(nextTickQueue); + queue->drain(vm, global); + return; + } + }); - return global; + return global; } }; // namespace Kit