diff options
author | 2023-06-04 19:59:22 -0700 | |
---|---|---|
committer | 2023-06-04 19:59:22 -0700 | |
commit | 7dae4968475597bdc4662bba52f6ee3a6cae259f (patch) | |
tree | 9120cd1c3072314394a842cc67f169cb7b0440d8 | |
parent | 92b060c6e29927a67b71504e77f52a374bd53b92 (diff) | |
download | bun-7dae4968475597bdc4662bba52f6ee3a6cae259f.tar.gz bun-7dae4968475597bdc4662bba52f6ee3a6cae259f.tar.zst bun-7dae4968475597bdc4662bba52f6ee3a6cae259f.zip |
wip
-rw-r--r-- | .vscode/launch.json | 14 | ||||
-rw-r--r-- | src/bun.js/bindings/BunJSCModule.cpp | 37 | ||||
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 47 |
3 files changed, 44 insertions, 54 deletions
diff --git a/.vscode/launch.json b/.vscode/launch.json index ea8218179..b149b5f94 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -139,6 +139,20 @@ { "type": "lldb", "request": "launch", + "name": "bun run [Inspect]", + "program": "bun-debug", + "args": ["--inspect-brk", "${file}"], + "cwd": "${fileDirname}", + "env": { + "FORCE_COLOR": "1", + "BUN_DEBUG_QUIET_LOGS": "1" + }, + "initCommands": ["process handle -p false -s false -n false SIGHUP"], + "console": "internalConsole" + }, + { + "type": "lldb", + "request": "launch", "name": "bun run [file] (gc)", "program": "bun-debug", "args": ["run", "${file}"], diff --git a/src/bun.js/bindings/BunJSCModule.cpp b/src/bun.js/bindings/BunJSCModule.cpp index 5809a9813..6d6e9dc6f 100644 --- a/src/bun.js/bindings/BunJSCModule.cpp +++ b/src/bun.js/bindings/BunJSCModule.cpp @@ -34,6 +34,8 @@ using namespace JSC; using namespace WTF; +extern "C" bool JSGlobalObject__startRemoteInspector(JSC::JSGlobalObject* globalObject, const char* host, uint16_t port); + JSC_DECLARE_HOST_FUNCTION(functionStartRemoteDebugger); JSC_DEFINE_HOST_FUNCTION(functionStartRemoteDebugger, (JSGlobalObject * globalObject, CallFrame* callFrame)) { @@ -45,38 +47,13 @@ JSC_DEFINE_HOST_FUNCTION(functionStartRemoteDebugger, (JSGlobalObject * globalOb JSC::JSValue hostValue = callFrame->argument(0); JSC::JSValue portValue = callFrame->argument(1); - const char* host = defaultHost; - if (hostValue.isString()) { - - auto str = hostValue.toWTFString(globalObject); - if (!str.isEmpty()) - host = toCString(str).data(); - } else if (!hostValue.isUndefined()) { - throwVMError(globalObject, scope, createTypeError(globalObject, "host must be a string"_s)); - return JSC::JSValue::encode(JSC::jsUndefined()); - } - - uint16_t port = defaultPort; - if (portValue.isNumber()) { - auto port_int = portValue.toUInt32(globalObject); - if (!(port_int > 0 && port_int < 65536)) { - throwVMError(globalObject, scope, createRangeError(globalObject, "port must be between 0 and 65535"_s)); - return JSC::JSValue::encode(JSC::jsUndefined()); - } - port = port_int; - } else if (!portValue.isUndefined()) { - throwVMError(globalObject, scope, createTypeError(globalObject, "port must be a number between 0 and 65535"_s)); - return JSC::JSValue::encode(JSC::jsUndefined()); - } - globalObject->setInspectable(true); - auto& server = Inspector::RemoteInspectorServer::singleton(); - if (!server.start(reinterpret_cast<const char*>(host), port)) { - throwVMError(globalObject, scope, createError(globalObject, "Failed to start server \""_s + host + ":"_s + port + "\". Is port already in use?"_s)); - return JSC::JSValue::encode(JSC::jsUndefined()); - } + bool res = JSGlobalObject__startRemoteInspector( + globalObject, + hostValue.isUndefinedOrNull() ? defaultHost : hostValue.toWTFString(globalObject).utf8().data(), + portValue.isUndefinedOrNull() ? defaultPort : portValue.toUInt32(globalObject)); - RELEASE_AND_RETURN(scope, JSC::JSValue::encode(JSC::jsUndefined())); + RELEASE_AND_RETURN(scope, JSC::JSValue::encode(jsBoolean(res))); #else auto& vm = globalObject->vm(); auto scope = DECLARE_THROW_SCOPE(vm); diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index f14fed530..237e789e8 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -240,6 +240,29 @@ extern "C" void JSCInitialize(const char* envp[], size_t envc, void (*onCrash)(c } } +extern "C" bool JSGlobalObject__startRemoteInspector(Zig::GlobalObject* globalObject, const char* host, uint16_t port) +{ +#if !ENABLE(REMOTE_INSPECTOR) + return false; +#else + globalObject->setInspectable(true); + bool didSucceed = false; + + // This function calls immediately. + auto inspector = BunInspector::startWebSocketServer( + *globalObject->scriptExecutionContext(), + WTF::String::fromUTF8(host), + port, [port, &didSucceed](RefPtr<BunInspector> inspector, bool success) { + didSucceed = success; + + if (success) { + inspector->ref(); + } + }); + return didSucceed; +#endif +} + extern "C" void* Bun__getVM(); extern "C" JSC__JSGlobalObject* Zig__GlobalObject__create(JSClassRef* globalObjectClass, int count, @@ -261,7 +284,6 @@ extern "C" JSC__JSGlobalObject* Zig__GlobalObject__create(JSClassRef* globalObje if (count > 0) { globalObject->installAPIGlobals(globalObjectClass, count, vm); } - JSC::gcProtect(globalObject); vm.ref(); return globalObject; @@ -3760,29 +3782,6 @@ void GlobalObject::installAPIGlobals(JSClassRef* globals, int count, JSC::VM& vm extraStaticGlobals.releaseBuffer(); } -extern "C" bool JSGlobalObject__startRemoteInspector(Zig::GlobalObject* globalObject, unsigned char* host, uint16_t port) -{ -#if !ENABLE(REMOTE_INSPECTOR) - return false; -#else - globalObject->setInspectable(true); - bool didSucceed = false; - - // This function calls immediately. - auto inspector = BunInspector::startWebSocketServer( - *globalObject->scriptExecutionContext(), - WTF::String::fromUTF8(host), - port, [port, &didSucceed](RefPtr<BunInspector> inspector, bool success) { - didSucceed = success; - - if (success) { - inspector->ref(); - } - }); - return didSucceed; -#endif -} - template<typename Visitor> void GlobalObject::visitChildrenImpl(JSCell* cell, Visitor& visitor) { |