diff options
author | 2022-09-06 20:59:18 -0700 | |
---|---|---|
committer | 2022-09-06 20:59:18 -0700 | |
commit | 6e9159a9adf94953f66c56fcb99f8c4e2187ef6a (patch) | |
tree | ea8a250f099fd59df633a444faf878f225b36c7f /src | |
parent | dda23a60766c23fcd4d8cb24b9d232820cc5aab9 (diff) | |
download | bun-6e9159a9adf94953f66c56fcb99f8c4e2187ef6a.tar.gz bun-6e9159a9adf94953f66c56fcb99f8c4e2187ef6a.tar.zst bun-6e9159a9adf94953f66c56fcb99f8c4e2187ef6a.zip |
workaround test failure
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/api/FFI.h | 10 | ||||
-rw-r--r-- | src/bun.js/api/ffi.zig | 62 | ||||
-rw-r--r-- | src/bun.js/bindings/JSFFIFunction.cpp | 15 | ||||
-rw-r--r-- | src/bun.js/bindings/JSFFIFunction.h | 2 | ||||
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.h | 11 | ||||
-rw-r--r-- | src/bun.js/bindings/bindings.zig | 29 | ||||
-rw-r--r-- | src/bun.js/node/node_os.zig | 36 | ||||
-rw-r--r-- | src/bun.js/webcore/streams.zig | 10 |
8 files changed, 103 insertions, 72 deletions
diff --git a/src/bun.js/api/FFI.h b/src/bun.js/api/FFI.h index bbe13bb5a..468f9a0fc 100644 --- a/src/bun.js/api/FFI.h +++ b/src/bun.js/api/FFI.h @@ -148,18 +148,12 @@ static bool JSVALUE_IS_NUMBER(EncodedJSValue val) { static void* JSVALUE_TO_PTR(EncodedJSValue val) { // must be a double - if (val.asInt64 == TagValueNull) - return 0; - return (void*)(val.asInt64 - DoubleEncodeOffset); + return val.asInt64 == TagValueNull ? 0 : (void*)(val.asInt64 - DoubleEncodeOffset); } static EncodedJSValue PTR_TO_JSVALUE(void* ptr) { EncodedJSValue val; - if (ptr == 0) { - val.asInt64 = TagValueNull; - return val; - } - val.asInt64 = (int64_t)ptr + DoubleEncodeOffset; + val.asInt64 = ptr == 0 ? TagValueNull : (int64_t)ptr + DoubleEncodeOffset; return val; } diff --git a/src/bun.js/api/ffi.zig b/src/bun.js/api/ffi.zig index 0f8bfe22e..30d5a7085 100644 --- a/src/bun.js/api/ffi.zig +++ b/src/bun.js/api/ffi.zig @@ -119,13 +119,13 @@ pub const FFI = struct { JSC.C.JSValueUnprotect(globalThis.ref(), js_callback.asObjectRef()); const message = ZigString.init(err.msg).toErrorInstance(globalThis); - func.deinit(allocator); + func.deinit(globalThis, allocator); return message; }, .pending => { JSC.C.JSValueUnprotect(globalThis.ref(), js_callback.asObjectRef()); - func.deinit(allocator); + func.deinit(globalThis, allocator); return ZigString.init("Failed to compile, but not sure why. Please report this bug").toErrorInstance(globalThis); }, .compiled => { @@ -136,7 +136,10 @@ pub const FFI = struct { } } - pub fn close(this: *FFI) JSValue { + pub fn close( + this: *FFI, + globalThis: *JSC.JSGlobalObject, + ) JSValue { JSC.markBinding(); if (this.closed) { return JSC.JSValue.jsUndefined(); @@ -150,7 +153,7 @@ pub const FFI = struct { const allocator = VirtualMachine.vm.allocator; for (this.functions.values()) |*val| { - val.deinit(allocator); + val.deinit(globalThis, allocator); } this.functions.deinit(allocator); @@ -353,7 +356,7 @@ pub const FFI = struct { } const res = ZigString.init(err.msg).toErrorInstance(global); - function.deinit(allocator); + function.deinit(global, allocator); symbols.clearAndFree(allocator); dylib.close(); return res; @@ -367,15 +370,16 @@ pub const FFI = struct { dylib.close(); return ZigString.init("Failed to compile (nothing happend!)").toErrorInstance(global); }, - .compiled => |compiled| { + .compiled => |*compiled| { const str = ZigString.init(std.mem.span(function_name)); const cb = JSC.NewFunction( global, &str, @intCast(u32, function.arg_types.items.len), compiled.ptr, + false, ); - + compiled.js_function = cb; obj.put(global, &str, cb); }, } @@ -413,9 +417,9 @@ pub const FFI = struct { return JSC.toInvalidArguments("Expected at least one symbol", .{}, global.ref()); } - var obj = JSC.JSValue.c(JSC.C.JSObjectMake(global.ref(), null, null)); - JSC.C.JSValueProtect(global.ref(), obj.asObjectRef()); - defer JSC.C.JSValueUnprotect(global.ref(), obj.asObjectRef()); + var obj = JSValue.createEmptyObject(global, if (symbols.count() < 64) symbols.count() else 0); + obj.ensureStillAlive(); + defer obj.ensureStillAlive(); for (symbols.values()) |*function| { const function_name = function.base_name.?; @@ -449,7 +453,7 @@ pub const FFI = struct { } const res = ZigString.init(err.msg).toErrorInstance(global); - function.deinit(allocator); + function.deinit(global, allocator); symbols.clearAndFree(allocator); return res; }, @@ -459,17 +463,21 @@ pub const FFI = struct { value.arg_types.clearAndFree(allocator); } symbols.clearAndFree(allocator); - return ZigString.init("Failed to compile (nothing happend!)").toErrorInstance(global); + return ZigString.static("Failed to compile (nothing happend!)").toErrorInstance(global); }, - .compiled => |compiled| { + .compiled => |*compiled| { + const name = &ZigString.init(std.mem.span(function_name)); + const cb = JSC.NewFunction( global, - &ZigString.init(std.mem.span(function_name)), + name, @intCast(u32, function.arg_types.items.len), compiled.ptr, + false, ); + compiled.js_function = cb; - obj.put(global, &ZigString.init(std.mem.span(function_name)), cb); + obj.put(global, name, cb); }, } } @@ -482,7 +490,7 @@ pub const FFI = struct { var close_object = JSC.JSValue.c(Class.make(global.ref(), lib)); - return JSC.JSValue.createObject2(global, &ZigString.init("close"), &ZigString.init("symbols"), close_object, obj); + return JSC.JSValue.createObject2(global, ZigString.static("close"), ZigString.static("symbols"), close_object, obj); } pub fn generateSymbolForFunction(global: *JSGlobalObject, allocator: std.mem.Allocator, value: JSC.JSValue, function: *Function) !?JSValue { JSC.markBinding(); @@ -491,7 +499,7 @@ pub const FFI = struct { if (value.get(global, "args")) |args| { if (args.isEmptyOrUndefinedOrNull() or !args.jsType().isArray()) { - return ZigString.init("Expected an object with \"args\" as an array").toErrorInstance(global); + return ZigString.static("Expected an object with \"args\" as an array").toErrorInstance(global); } var array = args.arrayIterator(global); @@ -500,7 +508,7 @@ pub const FFI = struct { while (array.next()) |val| { if (val.isEmptyOrUndefinedOrNull()) { abi_types.clearAndFree(allocator); - return ZigString.init("param must be a string (type name) or number").toErrorInstance(global); + return ZigString.static("param must be a string (type name) or number").toErrorInstance(global); } if (val.isAnyInt()) { @@ -512,14 +520,14 @@ pub const FFI = struct { }, else => { abi_types.clearAndFree(allocator); - return ZigString.init("invalid ABI type").toErrorInstance(global); + return ZigString.static("invalid ABI type").toErrorInstance(global); }, } } if (!val.jsType().isStringLike()) { abi_types.clearAndFree(allocator); - return ZigString.init("param must be a string (type name) or number").toErrorInstance(global); + return ZigString.static("param must be a string (type name) or number").toErrorInstance(global); } var type_name = val.toSlice(global, allocator); @@ -543,7 +551,7 @@ pub const FFI = struct { }, else => { abi_types.clearAndFree(allocator); - return ZigString.init("invalid ABI type").toErrorInstance(global); + return ZigString.static("invalid ABI type").toErrorInstance(global); }, } } @@ -620,7 +628,7 @@ pub const FFI = struct { pub var lib_dirZ: [*:0]const u8 = ""; - pub fn deinit(val: *Function, allocator: std.mem.Allocator) void { + pub fn deinit(val: *Function, globalThis: *JSC.JSGlobalObject, allocator: std.mem.Allocator) void { if (val.base_name) |base_name| { if (std.mem.span(base_name).len > 0) { allocator.free(bun.constStrToU8(std.mem.span(base_name))); @@ -636,8 +644,10 @@ pub const FFI = struct { if (val.step == .compiled) { // allocator.free(val.step.compiled.buf); - if (val.step.compiled.js_function) |js_function| { - JSC.C.JSValueUnprotect(@ptrCast(JSC.C.JSContextRef, val.step.compiled.js_context.?), @ptrCast(JSC.C.JSObjectRef, js_function)); + if (val.step.compiled.js_function != .zero) { + _ = globalThis; + // _ = JSC.untrackFunction(globalThis, val.step.compiled.js_function); + val.step.compiled.js_function = .zero; } } @@ -652,7 +662,7 @@ pub const FFI = struct { ptr: *anyopaque, fast_path_ptr: ?*anyopaque = null, buf: []u8, - js_function: ?*anyopaque = null, + js_function: JSValue = JSValue.zero, js_context: ?*anyopaque = null, }, failed: struct { @@ -956,7 +966,7 @@ pub const FFI = struct { .compiled = .{ .ptr = symbol, .buf = bytes, - .js_function = js_function, + .js_function = JSC.JSValue.fromPtr(js_function), .js_context = js_context, }, }; diff --git a/src/bun.js/bindings/JSFFIFunction.cpp b/src/bun.js/bindings/JSFFIFunction.cpp index 686cb0250..07fefac1f 100644 --- a/src/bun.js/bindings/JSFFIFunction.cpp +++ b/src/bun.js/bindings/JSFFIFunction.cpp @@ -36,17 +36,22 @@ #include "DOMJITIDLTypeFilter.h" #include "DOMJITHelpers.h" -extern "C" Zig::JSFFIFunction* Bun__CreateFFIFunction(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer) +extern "C" Zig::JSFFIFunction* Bun__CreateFFIFunction(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer, bool strong) { JSC::VM& vm = globalObject->vm(); Zig::JSFFIFunction* function = Zig::JSFFIFunction::create(vm, globalObject, argCount, symbolName != nullptr ? Zig::toStringCopy(*symbolName) : String(), functionPointer, JSC::NoIntrinsic); - // globalObject->trackFFIFunction(function); + if (strong) + globalObject->trackFFIFunction(function); return function; } -extern "C" JSC::EncodedJSValue Bun__CreateFFIFunctionValue(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer); -extern "C" JSC::EncodedJSValue Bun__CreateFFIFunctionValue(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer) +extern "C" void Bun__untrackFFIFunction(Zig::GlobalObject* globalObject, JSC::EncodedJSValue function) { - return JSC::JSValue::encode(JSC::JSValue(Bun__CreateFFIFunction(globalObject, symbolName, argCount, functionPointer))); + globalObject->untrackFFIFunction(JSC::jsCast<JSC::JSFunction*>(JSC::JSValue::decode(function))); +} +extern "C" JSC::EncodedJSValue Bun__CreateFFIFunctionValue(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer, bool strong); +extern "C" JSC::EncodedJSValue Bun__CreateFFIFunctionValue(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer, bool strong) +{ + return JSC::JSValue::encode(JSC::JSValue(Bun__CreateFFIFunction(globalObject, symbolName, argCount, functionPointer, strong))); } namespace Zig { diff --git a/src/bun.js/bindings/JSFFIFunction.h b/src/bun.js/bindings/JSFFIFunction.h index e30beb5ea..45257cf49 100644 --- a/src/bun.js/bindings/JSFFIFunction.h +++ b/src/bun.js/bindings/JSFFIFunction.h @@ -85,4 +85,4 @@ private: } // namespace JSC -extern "C" Zig::JSFFIFunction* Bun__CreateFFIFunction(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer); +extern "C" Zig::JSFFIFunction* Bun__CreateFFIFunction(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer, bool strong); diff --git a/src/bun.js/bindings/ZigGlobalObject.h b/src/bun.js/bindings/ZigGlobalObject.h index 300d5d60d..5e1c97178 100644 --- a/src/bun.js/bindings/ZigGlobalObject.h +++ b/src/bun.js/bindings/ZigGlobalObject.h @@ -327,6 +327,17 @@ public: { this->m_ffiFunctions.append(JSC::Strong<JSC::JSFunction> { vm(), function }); } + bool untrackFFIFunction(JSC::JSFunction* function) + { + for (size_t i = 0; i < this->m_ffiFunctions.size(); ++i) { + if (this->m_ffiFunctions[i].get() == function) { + this->m_ffiFunctions[i].clear(); + this->m_ffiFunctions.remove(i); + return true; + } + } + return false; + } BunPlugin::OnLoad onLoadPlugins[BunPluginTargetMax + 1] {}; BunPlugin::OnResolve onResolvePlugins[BunPluginTargetMax + 1] {}; diff --git a/src/bun.js/bindings/bindings.zig b/src/bun.js/bindings/bindings.zig index 2ab85c546..a8faef56c 100644 --- a/src/bun.js/bindings/bindings.zig +++ b/src/bun.js/bindings/bindings.zig @@ -1839,7 +1839,7 @@ pub const JSGlobalObject = extern struct { export_names[i] = ZigString.init(export_name); const function = @field(module, export_name).@"0"; const len = @field(module, export_name).@"1"; - export_values[i] = JSC.NewFunction(this, &export_names[i], len, function); + export_values[i] = JSC.NewFunction(this, &export_names[i], len, function, true); } createSyntheticModule_(this, &export_names, names.len, &export_values, names.len); @@ -3944,6 +3944,7 @@ const private = struct { symbolName: ?*const ZigString, argCount: u32, functionPointer: *const anyopaque, + strong: bool, ) *anyopaque; pub extern fn Bun__CreateFFIFunctionValue( @@ -3951,16 +3952,17 @@ const private = struct { symbolName: ?*const ZigString, argCount: u32, functionPointer: *const anyopaque, + strong: bool, ) JSValue; + + pub extern fn Bun__untrackFFIFunction( + globalObject: *JSGlobalObject, + function: JSValue, + ) bool; }; -pub fn NewFunctionPtr( - globalObject: *JSGlobalObject, - symbolName: ?*const ZigString, - argCount: u32, - functionPointer: anytype, -) *anyopaque { +pub fn NewFunctionPtr(globalObject: *JSGlobalObject, symbolName: ?*const ZigString, argCount: u32, functionPointer: anytype, strong: bool) *anyopaque { if (comptime JSC.is_bindgen) unreachable; - return private.Bun__CreateFFIFunction(globalObject, symbolName, argCount, @ptrCast(*const anyopaque, functionPointer)); + return private.Bun__CreateFFIFunction(globalObject, symbolName, argCount, @ptrCast(*const anyopaque, functionPointer), strong); } pub fn NewFunction( @@ -3968,9 +3970,18 @@ pub fn NewFunction( symbolName: ?*const ZigString, argCount: u32, functionPointer: anytype, + strong: bool, ) JSValue { if (comptime JSC.is_bindgen) unreachable; - return private.Bun__CreateFFIFunctionValue(globalObject, symbolName, argCount, @ptrCast(*const anyopaque, functionPointer)); + return private.Bun__CreateFFIFunctionValue(globalObject, symbolName, argCount, @ptrCast(*const anyopaque, functionPointer), strong); +} + +pub fn untrackFunction( + globalObject: *JSGlobalObject, + value: JSValue, +) bool { + if (comptime JSC.is_bindgen) unreachable; + return private.Bun__untrackFFIFunction(globalObject, value); } pub const ObjectPrototype = _JSCellStub("ObjectPrototype"); diff --git a/src/bun.js/node/node_os.zig b/src/bun.js/node/node_os.zig index 691b41393..752915fb3 100644 --- a/src/bun.js/node/node_os.zig +++ b/src/bun.js/node/node_os.zig @@ -18,24 +18,24 @@ pub const Os = struct { pub fn create(globalObject: *JSC.JSGlobalObject) callconv(.C) JSC.JSValue { const module = JSC.JSValue.createEmptyObject(globalObject, 20); - module.put(globalObject, JSC.ZigString.static("arch"), JSC.NewFunction(globalObject, JSC.ZigString.static("arch"), 0, arch)); - module.put(globalObject, JSC.ZigString.static("cpus"), JSC.NewFunction(globalObject, JSC.ZigString.static("cpus"), 0, cpus)); - module.put(globalObject, JSC.ZigString.static("endianness"), JSC.NewFunction(globalObject, JSC.ZigString.static("endianness"), 0, endianness)); - module.put(globalObject, JSC.ZigString.static("freemem"), JSC.NewFunction(globalObject, JSC.ZigString.static("freemem"), 0, freemem)); - module.put(globalObject, JSC.ZigString.static("getPriority"), JSC.NewFunction(globalObject, JSC.ZigString.static("getPriority"), 1, getPriority)); - module.put(globalObject, JSC.ZigString.static("homedir"), JSC.NewFunction(globalObject, JSC.ZigString.static("homedir"), 0, homedir)); - module.put(globalObject, JSC.ZigString.static("hostname"), JSC.NewFunction(globalObject, JSC.ZigString.static("hostname"), 0, hostname)); - module.put(globalObject, JSC.ZigString.static("loadavg"), JSC.NewFunction(globalObject, JSC.ZigString.static("loadavg"), 0, loadavg)); - module.put(globalObject, JSC.ZigString.static("networkInterfaces"), JSC.NewFunction(globalObject, JSC.ZigString.static("networkInterfaces"), 0, networkInterfaces)); - module.put(globalObject, JSC.ZigString.static("platform"), JSC.NewFunction(globalObject, JSC.ZigString.static("platform"), 0, platform)); - module.put(globalObject, JSC.ZigString.static("release"), JSC.NewFunction(globalObject, JSC.ZigString.static("release"), 0, release)); - module.put(globalObject, JSC.ZigString.static("setPriority"), JSC.NewFunction(globalObject, JSC.ZigString.static("setPriority"), 2, setPriority)); - module.put(globalObject, JSC.ZigString.static("tmpdir"), JSC.NewFunction(globalObject, JSC.ZigString.static("tmpdir"), 0, tmpdir)); - module.put(globalObject, JSC.ZigString.static("totalmem"), JSC.NewFunction(globalObject, JSC.ZigString.static("totalmem"), 0, totalmem)); - module.put(globalObject, JSC.ZigString.static("type"), JSC.NewFunction(globalObject, JSC.ZigString.static("type"), 0, Os.@"type")); - module.put(globalObject, JSC.ZigString.static("uptime"), JSC.NewFunction(globalObject, JSC.ZigString.static("uptime"), 0, uptime)); - module.put(globalObject, JSC.ZigString.static("userInfo"), JSC.NewFunction(globalObject, JSC.ZigString.static("userInfo"), 0, userInfo)); - module.put(globalObject, JSC.ZigString.static("version"), JSC.NewFunction(globalObject, JSC.ZigString.static("version"), 0, version)); + module.put(globalObject, JSC.ZigString.static("arch"), JSC.NewFunction(globalObject, JSC.ZigString.static("arch"), 0, arch, true)); + module.put(globalObject, JSC.ZigString.static("cpus"), JSC.NewFunction(globalObject, JSC.ZigString.static("cpus"), 0, cpus, true)); + module.put(globalObject, JSC.ZigString.static("endianness"), JSC.NewFunction(globalObject, JSC.ZigString.static("endianness"), 0, endianness, true)); + module.put(globalObject, JSC.ZigString.static("freemem"), JSC.NewFunction(globalObject, JSC.ZigString.static("freemem"), 0, freemem, true)); + module.put(globalObject, JSC.ZigString.static("getPriority"), JSC.NewFunction(globalObject, JSC.ZigString.static("getPriority"), 1, getPriority, true)); + module.put(globalObject, JSC.ZigString.static("homedir"), JSC.NewFunction(globalObject, JSC.ZigString.static("homedir"), 0, homedir, true)); + module.put(globalObject, JSC.ZigString.static("hostname"), JSC.NewFunction(globalObject, JSC.ZigString.static("hostname"), 0, hostname, true)); + module.put(globalObject, JSC.ZigString.static("loadavg"), JSC.NewFunction(globalObject, JSC.ZigString.static("loadavg"), 0, loadavg, true)); + module.put(globalObject, JSC.ZigString.static("networkInterfaces"), JSC.NewFunction(globalObject, JSC.ZigString.static("networkInterfaces"), 0, networkInterfaces, true)); + module.put(globalObject, JSC.ZigString.static("platform"), JSC.NewFunction(globalObject, JSC.ZigString.static("platform"), 0, platform, true)); + module.put(globalObject, JSC.ZigString.static("release"), JSC.NewFunction(globalObject, JSC.ZigString.static("release"), 0, release, true)); + module.put(globalObject, JSC.ZigString.static("setPriority"), JSC.NewFunction(globalObject, JSC.ZigString.static("setPriority"), 2, setPriority, true)); + module.put(globalObject, JSC.ZigString.static("tmpdir"), JSC.NewFunction(globalObject, JSC.ZigString.static("tmpdir"), 0, tmpdir, true)); + module.put(globalObject, JSC.ZigString.static("totalmem"), JSC.NewFunction(globalObject, JSC.ZigString.static("totalmem"), 0, totalmem, true)); + module.put(globalObject, JSC.ZigString.static("type"), JSC.NewFunction(globalObject, JSC.ZigString.static("type"), 0, Os.@"type", true)); + module.put(globalObject, JSC.ZigString.static("uptime"), JSC.NewFunction(globalObject, JSC.ZigString.static("uptime"), 0, uptime, true)); + module.put(globalObject, JSC.ZigString.static("userInfo"), JSC.NewFunction(globalObject, JSC.ZigString.static("userInfo"), 0, userInfo, true)); + module.put(globalObject, JSC.ZigString.static("version"), JSC.NewFunction(globalObject, JSC.ZigString.static("version"), 0, version, true)); module.put(globalObject, JSC.ZigString.static("devNull"), JSC.ZigString.init(devNull).withEncoding().toValue(globalObject)); module.put(globalObject, JSC.ZigString.static("EOL"), JSC.ZigString.init(EOL).withEncoding().toValue(globalObject)); diff --git a/src/bun.js/webcore/streams.zig b/src/bun.js/webcore/streams.zig index 32e6d9f19..242e3db49 100644 --- a/src/bun.js/webcore/streams.zig +++ b/src/bun.js/webcore/streams.zig @@ -2130,11 +2130,11 @@ pub fn ReadableStreamSource( } return JSC.JSArray.from(globalThis, &.{ - JSC.NewFunction(globalThis, null, 1, JSReadableStreamSource.pull), - JSC.NewFunction(globalThis, null, 1, JSReadableStreamSource.start), - JSC.NewFunction(globalThis, null, 1, JSReadableStreamSource.cancel), - JSC.NewFunction(globalThis, null, 1, JSReadableStreamSource.setClose), - JSC.NewFunction(globalThis, null, 1, JSReadableStreamSource.deinit), + JSC.NewFunction(globalThis, null, 1, JSReadableStreamSource.pull, true), + JSC.NewFunction(globalThis, null, 1, JSReadableStreamSource.start, true), + JSC.NewFunction(globalThis, null, 1, JSReadableStreamSource.cancel, true), + JSC.NewFunction(globalThis, null, 1, JSReadableStreamSource.setClose, true), + JSC.NewFunction(globalThis, null, 1, JSReadableStreamSource.deinit, true), }); } |