diff options
| -rw-r--r-- | src/bun.js/bindings/JSSink.cpp | 664 | ||||
| -rw-r--r-- | src/bun.js/bindings/JSSink.h | 1227 | ||||
| -rw-r--r-- | src/bun.js/scripts/generate-jssink.js | 46 | 
3 files changed, 900 insertions, 1037 deletions
| diff --git a/src/bun.js/bindings/JSSink.cpp b/src/bun.js/bindings/JSSink.cpp index a342793f0..ed3b6a5ac 100644 --- a/src/bun.js/bindings/JSSink.cpp +++ b/src/bun.js/bindings/JSSink.cpp @@ -1,6 +1,6 @@  // AUTO-GENERATED FILE. DO NOT EDIT. -// Generated by 'make generate-sink' at 2022-11-13T22:44:00.280Z +// Generated by 'make generate-sink' at 2022-11-20T12:51:04.404Z  // To regenerate this file, run:  //  //   make generate-sink @@ -54,18 +54,12 @@  #include "JavaScriptCore/Weak.h"  #include "JavaScriptCore/WeakInlines.h" - -  namespace WebCore {  using namespace JSC; - - - - -JSC_DEFINE_HOST_FUNCTION(functionStartDirectStream, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(functionStartDirectStream, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -86,12 +80,10 @@ JSC_DEFINE_HOST_FUNCTION(functionStartDirectStream, (JSC::JSGlobalObject * lexic          onClose = JSC::jsUndefined();      } -    JSC::JSFunction *onPullFunction = JSC::jsDynamicCast<JSC::JSFunction*>(onPull); -    JSC::JSFunction *onCloseFunction = JSC::jsDynamicCast<JSC::JSFunction*>(onClose); - - +    JSC::JSFunction* onPullFunction = JSC::jsDynamicCast<JSC::JSFunction*>(onPull); +    JSC::JSFunction* onCloseFunction = JSC::jsDynamicCast<JSC::JSFunction*>(onClose); -     if (WebCore::JSReadableArrayBufferSinkController* ArrayBufferSinkController = JSC::jsDynamicCast<WebCore::JSReadableArrayBufferSinkController*>(callFrame->thisValue())) { +    if (WebCore::JSReadableArrayBufferSinkController* ArrayBufferSinkController = JSC::jsDynamicCast<WebCore::JSReadableArrayBufferSinkController*>(callFrame->thisValue())) {          if (ArrayBufferSinkController->wrapped() == nullptr) {              scope.throwException(globalObject, JSC::createTypeError(globalObject, "Cannot start stream with closed controller"_s));              return JSC::JSValue::encode(JSC::jsUndefined()); @@ -100,7 +92,6 @@ JSC_DEFINE_HOST_FUNCTION(functionStartDirectStream, (JSC::JSGlobalObject * lexic          ArrayBufferSinkController->start(globalObject, readableStream, onPullFunction, onCloseFunction);      } -      else if (WebCore::JSReadableFileSinkController* FileSinkController = JSC::jsDynamicCast<WebCore::JSReadableFileSinkController*>(callFrame->thisValue())) {          if (FileSinkController->wrapped() == nullptr) {              scope.throwException(globalObject, JSC::createTypeError(globalObject, "Cannot start stream with closed controller"_s)); @@ -110,7 +101,6 @@ JSC_DEFINE_HOST_FUNCTION(functionStartDirectStream, (JSC::JSGlobalObject * lexic          FileSinkController->start(globalObject, readableStream, onPullFunction, onCloseFunction);      } -      else if (WebCore::JSReadableHTTPResponseSinkController* HTTPResponseSinkController = JSC::jsDynamicCast<WebCore::JSReadableHTTPResponseSinkController*>(callFrame->thisValue())) {          if (HTTPResponseSinkController->wrapped() == nullptr) {              scope.throwException(globalObject, JSC::createTypeError(globalObject, "Cannot start stream with closed controller"_s)); @@ -120,7 +110,6 @@ JSC_DEFINE_HOST_FUNCTION(functionStartDirectStream, (JSC::JSGlobalObject * lexic          HTTPResponseSinkController->start(globalObject, readableStream, onPullFunction, onCloseFunction);      } -      else if (WebCore::JSReadableHTTPSResponseSinkController* HTTPSResponseSinkController = JSC::jsDynamicCast<WebCore::JSReadableHTTPSResponseSinkController*>(callFrame->thisValue())) {          if (HTTPSResponseSinkController->wrapped() == nullptr) {              scope.throwException(globalObject, JSC::createTypeError(globalObject, "Cannot start stream with closed controller"_s)); @@ -146,11 +135,10 @@ JSC_DEFINE_CUSTOM_GETTER(functionArrayBufferSink__getter, (JSC::JSGlobalObject *      return JSC::JSValue::encode(globalObject->ArrayBufferSink());  } -  JSC_DECLARE_HOST_FUNCTION(JSReadableArrayBufferSinkController__close); -JSC_DEFINE_HOST_FUNCTION(JSReadableArrayBufferSinkController__close, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(JSReadableArrayBufferSinkController__close, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -160,22 +148,20 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableArrayBufferSinkController__close, (JSC::JSGlo          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = controller->wrapped(); +    void* ptr = controller->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      }      controller->detach();      ArrayBufferSink__close(lexicalGlobalObject, ptr); -    // Release the controller right before close. -    controller->m_hasPendingActivity = false;      return JSC::JSValue::encode(JSC::jsUndefined());  }  JSC_DECLARE_HOST_FUNCTION(JSReadableArrayBufferSinkController__end); -JSC_DEFINE_HOST_FUNCTION(JSReadableArrayBufferSinkController__end, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(JSReadableArrayBufferSinkController__end, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -185,7 +171,7 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableArrayBufferSinkController__end, (JSC::JSGloba          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = controller->wrapped(); +    void* ptr = controller->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      } @@ -194,11 +180,10 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableArrayBufferSinkController__end, (JSC::JSGloba      return ArrayBufferSink__endWithSink(ptr, lexicalGlobalObject);  } -  JSC_DECLARE_HOST_FUNCTION(ArrayBufferSink__doClose); -JSC_DEFINE_HOST_FUNCTION(ArrayBufferSink__doClose, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(ArrayBufferSink__doClose, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -208,7 +193,7 @@ JSC_DEFINE_HOST_FUNCTION(ArrayBufferSink__doClose, (JSC::JSGlobalObject * lexica          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = sink->wrapped(); +    void* ptr = sink->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      } @@ -218,8 +203,6 @@ JSC_DEFINE_HOST_FUNCTION(ArrayBufferSink__doClose, (JSC::JSGlobalObject * lexica      return JSC::JSValue::encode(JSC::jsUndefined());  } - -  JSC_DEFINE_CUSTOM_GETTER(functionFileSink__getter, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::EncodedJSValue thisValue, JSC::PropertyName))  {      auto& vm = lexicalGlobalObject->vm(); @@ -228,11 +211,10 @@ JSC_DEFINE_CUSTOM_GETTER(functionFileSink__getter, (JSC::JSGlobalObject * lexica      return JSC::JSValue::encode(globalObject->FileSink());  } -  JSC_DECLARE_HOST_FUNCTION(JSReadableFileSinkController__close); -JSC_DEFINE_HOST_FUNCTION(JSReadableFileSinkController__close, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(JSReadableFileSinkController__close, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -242,22 +224,20 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableFileSinkController__close, (JSC::JSGlobalObje          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = controller->wrapped(); +    void* ptr = controller->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      }      controller->detach();      FileSink__close(lexicalGlobalObject, ptr); -    // Release the controller right before close. -    controller->m_hasPendingActivity = false;      return JSC::JSValue::encode(JSC::jsUndefined());  }  JSC_DECLARE_HOST_FUNCTION(JSReadableFileSinkController__end); -JSC_DEFINE_HOST_FUNCTION(JSReadableFileSinkController__end, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(JSReadableFileSinkController__end, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -267,7 +247,7 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableFileSinkController__end, (JSC::JSGlobalObject          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = controller->wrapped(); +    void* ptr = controller->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      } @@ -276,11 +256,10 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableFileSinkController__end, (JSC::JSGlobalObject      return FileSink__endWithSink(ptr, lexicalGlobalObject);  } -  JSC_DECLARE_HOST_FUNCTION(FileSink__doClose); -JSC_DEFINE_HOST_FUNCTION(FileSink__doClose, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(FileSink__doClose, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -290,7 +269,7 @@ JSC_DEFINE_HOST_FUNCTION(FileSink__doClose, (JSC::JSGlobalObject * lexicalGlobal          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = sink->wrapped(); +    void* ptr = sink->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      } @@ -300,8 +279,6 @@ JSC_DEFINE_HOST_FUNCTION(FileSink__doClose, (JSC::JSGlobalObject * lexicalGlobal      return JSC::JSValue::encode(JSC::jsUndefined());  } - -  JSC_DEFINE_CUSTOM_GETTER(functionHTTPResponseSink__getter, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::EncodedJSValue thisValue, JSC::PropertyName))  {      auto& vm = lexicalGlobalObject->vm(); @@ -310,11 +287,10 @@ JSC_DEFINE_CUSTOM_GETTER(functionHTTPResponseSink__getter, (JSC::JSGlobalObject      return JSC::JSValue::encode(globalObject->HTTPResponseSink());  } -  JSC_DECLARE_HOST_FUNCTION(JSReadableHTTPResponseSinkController__close); -JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPResponseSinkController__close, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPResponseSinkController__close, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -324,22 +300,20 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPResponseSinkController__close, (JSC::JSGl          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = controller->wrapped(); +    void* ptr = controller->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      }      controller->detach();      HTTPResponseSink__close(lexicalGlobalObject, ptr); -    // Release the controller right before close. -    controller->m_hasPendingActivity = false;      return JSC::JSValue::encode(JSC::jsUndefined());  }  JSC_DECLARE_HOST_FUNCTION(JSReadableHTTPResponseSinkController__end); -JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPResponseSinkController__end, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPResponseSinkController__end, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -349,7 +323,7 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPResponseSinkController__end, (JSC::JSGlob          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = controller->wrapped(); +    void* ptr = controller->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      } @@ -358,11 +332,10 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPResponseSinkController__end, (JSC::JSGlob      return HTTPResponseSink__endWithSink(ptr, lexicalGlobalObject);  } -  JSC_DECLARE_HOST_FUNCTION(HTTPResponseSink__doClose); -JSC_DEFINE_HOST_FUNCTION(HTTPResponseSink__doClose, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(HTTPResponseSink__doClose, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -372,7 +345,7 @@ JSC_DEFINE_HOST_FUNCTION(HTTPResponseSink__doClose, (JSC::JSGlobalObject * lexic          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = sink->wrapped(); +    void* ptr = sink->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      } @@ -382,8 +355,6 @@ JSC_DEFINE_HOST_FUNCTION(HTTPResponseSink__doClose, (JSC::JSGlobalObject * lexic      return JSC::JSValue::encode(JSC::jsUndefined());  } - -  JSC_DEFINE_CUSTOM_GETTER(functionHTTPSResponseSink__getter, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::EncodedJSValue thisValue, JSC::PropertyName))  {      auto& vm = lexicalGlobalObject->vm(); @@ -392,11 +363,10 @@ JSC_DEFINE_CUSTOM_GETTER(functionHTTPSResponseSink__getter, (JSC::JSGlobalObject      return JSC::JSValue::encode(globalObject->HTTPSResponseSink());  } -  JSC_DECLARE_HOST_FUNCTION(JSReadableHTTPSResponseSinkController__close); -JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPSResponseSinkController__close, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPSResponseSinkController__close, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -406,22 +376,20 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPSResponseSinkController__close, (JSC::JSG          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = controller->wrapped(); +    void* ptr = controller->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      }      controller->detach();      HTTPSResponseSink__close(lexicalGlobalObject, ptr); -    // Release the controller right before close. -    controller->m_hasPendingActivity = false;      return JSC::JSValue::encode(JSC::jsUndefined());  }  JSC_DECLARE_HOST_FUNCTION(JSReadableHTTPSResponseSinkController__end); -JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPSResponseSinkController__end, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPSResponseSinkController__end, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -431,7 +399,7 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPSResponseSinkController__end, (JSC::JSGlo          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = controller->wrapped(); +    void* ptr = controller->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      } @@ -440,11 +408,10 @@ JSC_DEFINE_HOST_FUNCTION(JSReadableHTTPSResponseSinkController__end, (JSC::JSGlo      return HTTPSResponseSink__endWithSink(ptr, lexicalGlobalObject);  } -  JSC_DECLARE_HOST_FUNCTION(HTTPSResponseSink__doClose); -JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame *callFrame)) +JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexicalGlobalObject, JSC::CallFrame* callFrame))  { -     +      auto& vm = lexicalGlobalObject->vm();      auto scope = DECLARE_THROW_SCOPE(vm);      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(lexicalGlobalObject); @@ -454,7 +421,7 @@ JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexi          return JSC::JSValue::encode(JSC::jsUndefined());      } -    void *ptr = sink->wrapped(); +    void* ptr = sink->wrapped();      if (ptr == nullptr) {          return JSC::JSValue::encode(JSC::jsUndefined());      } @@ -464,10 +431,8 @@ JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexi      return JSC::JSValue::encode(JSC::jsUndefined());  } - -  #include "JSSinkLookupTable.h" -   +  /* Source for JSArrayBufferSinkPrototypeTableValues.lut.h  @begin JSArrayBufferSinkPrototypeTable    close      ArrayBufferSink__doClose         ReadOnly|DontDelete|Function 0 @@ -478,7 +443,6 @@ JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexi  @end  */ -  /* Source for JSReadableArrayBufferSinkControllerPrototypeTableValues.lut.h  @begin JSReadableArrayBufferSinkControllerPrototypeTable    close        JSReadableArrayBufferSinkController__close      ReadOnly|DontDelete|Function 0 @@ -489,7 +453,6 @@ JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexi  @end  */ -    /* Source for JSFileSinkPrototypeTableValues.lut.h  @begin JSFileSinkPrototypeTable    close      FileSink__doClose         ReadOnly|DontDelete|Function 0 @@ -500,7 +463,6 @@ JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexi  @end  */ -  /* Source for JSReadableFileSinkControllerPrototypeTableValues.lut.h  @begin JSReadableFileSinkControllerPrototypeTable    close        JSReadableFileSinkController__close      ReadOnly|DontDelete|Function 0 @@ -511,7 +473,6 @@ JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexi  @end  */ -    /* Source for JSHTTPResponseSinkPrototypeTableValues.lut.h  @begin JSHTTPResponseSinkPrototypeTable    close      HTTPResponseSink__doClose         ReadOnly|DontDelete|Function 0 @@ -522,7 +483,6 @@ JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexi  @end  */ -  /* Source for JSReadableHTTPResponseSinkControllerPrototypeTableValues.lut.h  @begin JSReadableHTTPResponseSinkControllerPrototypeTable    close        JSReadableHTTPResponseSinkController__close      ReadOnly|DontDelete|Function 0 @@ -533,7 +493,6 @@ JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexi  @end  */ -    /* Source for JSHTTPSResponseSinkPrototypeTableValues.lut.h  @begin JSHTTPSResponseSinkPrototypeTable    close      HTTPSResponseSink__doClose         ReadOnly|DontDelete|Function 0 @@ -544,7 +503,6 @@ JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexi  @end  */ -  /* Source for JSReadableHTTPSResponseSinkControllerPrototypeTableValues.lut.h  @begin JSReadableHTTPSResponseSinkControllerPrototypeTable    close        JSReadableHTTPSResponseSinkController__close      ReadOnly|DontDelete|Function 0 @@ -555,7 +513,6 @@ JSC_DEFINE_HOST_FUNCTION(HTTPSResponseSink__doClose, (JSC::JSGlobalObject * lexi  @end  */ -    #pragma mark - ArrayBufferSink  class JSArrayBufferSinkPrototype final : public JSC::JSNonFinalObject { @@ -591,42 +548,41 @@ private:  STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSArrayBufferSinkPrototype, JSArrayBufferSinkPrototype::Base);  class JSReadableArrayBufferSinkControllerPrototype final : public JSC::JSNonFinalObject { -    public: -        using Base = JSC::JSNonFinalObject; -     -        static JSReadableArrayBufferSinkControllerPrototype* create(JSC::VM& vm, JSGlobalObject* globalObject, JSC::Structure* structure) -        { -            JSReadableArrayBufferSinkControllerPrototype* ptr = new (NotNull, JSC::allocateCell<JSReadableArrayBufferSinkControllerPrototype>(vm)) JSReadableArrayBufferSinkControllerPrototype(vm, globalObject, structure); -            ptr->finishCreation(vm, globalObject); -            return ptr; -        } -     -        DECLARE_INFO; -        template<typename CellType, JSC::SubspaceAccess> -        static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) -        { -            return &vm.plainObjectSpace(); -        } -        static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) -        { -            return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); -        } -     -    private: -        JSReadableArrayBufferSinkControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure) -            : Base(vm, structure) -        { -        } -     -        void finishCreation(JSC::VM&, JSC::JSGlobalObject*); -    }; -    STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSReadableArrayBufferSinkControllerPrototype, JSReadableArrayBufferSinkControllerPrototype::Base); +public: +    using Base = JSC::JSNonFinalObject; + +    static JSReadableArrayBufferSinkControllerPrototype* create(JSC::VM& vm, JSGlobalObject* globalObject, JSC::Structure* structure) +    { +        JSReadableArrayBufferSinkControllerPrototype* ptr = new (NotNull, JSC::allocateCell<JSReadableArrayBufferSinkControllerPrototype>(vm)) JSReadableArrayBufferSinkControllerPrototype(vm, globalObject, structure); +        ptr->finishCreation(vm, globalObject); +        return ptr; +    } + +    DECLARE_INFO; +    template<typename CellType, JSC::SubspaceAccess> +    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        return &vm.plainObjectSpace(); +    } +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } + +private: +    JSReadableArrayBufferSinkControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure) +        : Base(vm, structure) +    { +    } + +    void finishCreation(JSC::VM&, JSC::JSGlobalObject*); +}; +STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSReadableArrayBufferSinkControllerPrototype, JSReadableArrayBufferSinkControllerPrototype::Base);  const ClassInfo JSArrayBufferSinkPrototype::s_info = { "ArrayBufferSink"_s, &Base::s_info, &JSArrayBufferSinkPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSArrayBufferSinkPrototype) };  const ClassInfo JSArrayBufferSink::s_info = { "ArrayBufferSink"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSArrayBufferSink) };  const ClassInfo JSArrayBufferSinkConstructor::s_info = { "ArrayBufferSink"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSArrayBufferSinkConstructor) }; -  const ClassInfo JSReadableArrayBufferSinkControllerPrototype::s_info = { "ReadableArrayBufferSinkController"_s, &Base::s_info, &JSReadableArrayBufferSinkControllerPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSReadableArrayBufferSinkControllerPrototype) };  const ClassInfo JSReadableArrayBufferSinkController::s_info = { "ReadableArrayBufferSinkController"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSReadableArrayBufferSinkController) }; @@ -637,7 +593,6 @@ JSArrayBufferSink::~JSArrayBufferSink()      }  } -  JSReadableArrayBufferSinkController::~JSReadableArrayBufferSinkController()  {      if (m_sinkPtr) { @@ -655,7 +610,8 @@ JSObject* JSReadableArrayBufferSinkController::createPrototype(VM& vm, JSDOMGlob      return JSReadableArrayBufferSinkControllerPrototype::create(vm, &globalObject, JSReadableArrayBufferSinkControllerPrototype::createStructure(vm, &globalObject, globalObject.objectPrototype()));  } -void JSReadableArrayBufferSinkController::detach() { +void JSReadableArrayBufferSinkController::detach() +{      m_sinkPtr = nullptr;      m_onPull.clear(); @@ -664,18 +620,17 @@ void JSReadableArrayBufferSinkController::detach() {      m_onClose.clear();      if (readableStream && onClose) { -        JSC::JSGlobalObject *globalObject = this->globalObject(); +        JSC::JSGlobalObject* globalObject = this->globalObject();          auto callData = JSC::getCallData(onClose);          JSC::MarkedArgumentBuffer arguments;          arguments.append(readableStream);          arguments.append(jsUndefined());          JSC::call(globalObject, onClose, callData, JSC::jsUndefined(), arguments);      } -     +      m_weakReadableStream.clear();  } -  JSArrayBufferSinkConstructor* JSArrayBufferSinkConstructor::create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSObject* prototype)  {      JSArrayBufferSinkConstructor* ptr = new (NotNull, JSC::allocateCell<JSArrayBufferSinkConstructor>(vm)) JSArrayBufferSinkConstructor(vm, structure, ArrayBufferSink__construct); @@ -704,11 +659,11 @@ void JSArrayBufferSinkConstructor::finishCreation(VM& vm, JSC::JSGlobalObject* g      initializeProperties(vm, globalObject, prototype);  } -JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSArrayBufferSinkConstructor::construct(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callFrame) { +JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSArrayBufferSinkConstructor::construct(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callFrame) +{      return ArrayBufferSink__construct(globalObject, callFrame);  } -  void JSArrayBufferSinkConstructor::initializeProperties(VM& vm, JSC::JSGlobalObject* globalObject, JSObject* prototype)  {      putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum); @@ -745,7 +700,6 @@ void JSReadableArrayBufferSinkController::finishCreation(VM& vm)      ASSERT(inherits(info()));  } -  void JSArrayBufferSink::analyzeHeap(JSCell* cell, HeapAnalyzer& analyzer)  {      auto* thisObject = jsCast<JSArrayBufferSink*>(cell); @@ -768,7 +722,6 @@ void JSReadableArrayBufferSinkController::analyzeHeap(JSCell* cell, HeapAnalyzer      Base::analyzeHeap(cell, analyzer);  } -  template<typename Visitor>  void JSReadableArrayBufferSinkController::visitChildrenImpl(JSCell* cell, Visitor& visitor)  { @@ -777,13 +730,28 @@ void JSReadableArrayBufferSinkController::visitChildrenImpl(JSCell* cell, Visito      Base::visitChildren(thisObject, visitor);      visitor.append(thisObject->m_onPull);      visitor.append(thisObject->m_onClose); -    visitor.append(thisObject->m_weakReadableStream); +    void* ptr = thisObject->m_sinkPtr; +    if (ptr) +        visitor.addOpaqueRoot(ptr);  }  DEFINE_VISIT_CHILDREN(JSReadableArrayBufferSinkController); +template<typename Visitor> +void JSArrayBufferSink::visitChildrenImpl(JSCell* cell, Visitor& visitor) +{ +    JSArrayBufferSink* thisObject = jsCast<JSArrayBufferSink*>(cell); +    ASSERT_GC_OBJECT_INHERITS(thisObject, info()); +    Base::visitChildren(thisObject, visitor); +    void* ptr = thisObject->m_sinkPtr; +    if (ptr) +        visitor.addOpaqueRoot(ptr); +} -void JSReadableArrayBufferSinkController::start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose) { +DEFINE_VISIT_CHILDREN(JSArrayBufferSink); + +void JSReadableArrayBufferSinkController::start(JSC::JSGlobalObject* globalObject, JSC::JSValue readableStream, JSC::JSFunction* onPull, JSC::JSFunction* onClose) +{      this->m_weakReadableStream = JSC::Weak<JSC::JSObject>(readableStream.getObject());      this->m_onPull.set(globalObject->vm(), this, onPull);      this->m_onClose.set(globalObject->vm(), this, onClose); @@ -794,14 +762,11 @@ void JSArrayBufferSink::destroy(JSCell* cell)      static_cast<JSArrayBufferSink*>(cell)->JSArrayBufferSink::~JSArrayBufferSink();  } -  void JSReadableArrayBufferSinkController::destroy(JSCell* cell)  {      static_cast<JSReadableArrayBufferSinkController*>(cell)->JSReadableArrayBufferSinkController::~JSReadableArrayBufferSinkController();  } - -  #pragma mark - FileSink  class JSFileSinkPrototype final : public JSC::JSNonFinalObject { @@ -837,42 +802,41 @@ private:  STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSFileSinkPrototype, JSFileSinkPrototype::Base);  class JSReadableFileSinkControllerPrototype final : public JSC::JSNonFinalObject { -    public: -        using Base = JSC::JSNonFinalObject; -     -        static JSReadableFileSinkControllerPrototype* create(JSC::VM& vm, JSGlobalObject* globalObject, JSC::Structure* structure) -        { -            JSReadableFileSinkControllerPrototype* ptr = new (NotNull, JSC::allocateCell<JSReadableFileSinkControllerPrototype>(vm)) JSReadableFileSinkControllerPrototype(vm, globalObject, structure); -            ptr->finishCreation(vm, globalObject); -            return ptr; -        } -     -        DECLARE_INFO; -        template<typename CellType, JSC::SubspaceAccess> -        static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) -        { -            return &vm.plainObjectSpace(); -        } -        static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) -        { -            return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); -        } -     -    private: -        JSReadableFileSinkControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure) -            : Base(vm, structure) -        { -        } -     -        void finishCreation(JSC::VM&, JSC::JSGlobalObject*); -    }; -    STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSReadableFileSinkControllerPrototype, JSReadableFileSinkControllerPrototype::Base); +public: +    using Base = JSC::JSNonFinalObject; + +    static JSReadableFileSinkControllerPrototype* create(JSC::VM& vm, JSGlobalObject* globalObject, JSC::Structure* structure) +    { +        JSReadableFileSinkControllerPrototype* ptr = new (NotNull, JSC::allocateCell<JSReadableFileSinkControllerPrototype>(vm)) JSReadableFileSinkControllerPrototype(vm, globalObject, structure); +        ptr->finishCreation(vm, globalObject); +        return ptr; +    } + +    DECLARE_INFO; +    template<typename CellType, JSC::SubspaceAccess> +    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        return &vm.plainObjectSpace(); +    } +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } + +private: +    JSReadableFileSinkControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure) +        : Base(vm, structure) +    { +    } + +    void finishCreation(JSC::VM&, JSC::JSGlobalObject*); +}; +STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSReadableFileSinkControllerPrototype, JSReadableFileSinkControllerPrototype::Base);  const ClassInfo JSFileSinkPrototype::s_info = { "FileSink"_s, &Base::s_info, &JSFileSinkPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSFileSinkPrototype) };  const ClassInfo JSFileSink::s_info = { "FileSink"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSFileSink) };  const ClassInfo JSFileSinkConstructor::s_info = { "FileSink"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSFileSinkConstructor) }; -  const ClassInfo JSReadableFileSinkControllerPrototype::s_info = { "ReadableFileSinkController"_s, &Base::s_info, &JSReadableFileSinkControllerPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSReadableFileSinkControllerPrototype) };  const ClassInfo JSReadableFileSinkController::s_info = { "ReadableFileSinkController"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSReadableFileSinkController) }; @@ -883,7 +847,6 @@ JSFileSink::~JSFileSink()      }  } -  JSReadableFileSinkController::~JSReadableFileSinkController()  {      if (m_sinkPtr) { @@ -901,7 +864,8 @@ JSObject* JSReadableFileSinkController::createPrototype(VM& vm, JSDOMGlobalObjec      return JSReadableFileSinkControllerPrototype::create(vm, &globalObject, JSReadableFileSinkControllerPrototype::createStructure(vm, &globalObject, globalObject.objectPrototype()));  } -void JSReadableFileSinkController::detach() { +void JSReadableFileSinkController::detach() +{      m_sinkPtr = nullptr;      m_onPull.clear(); @@ -910,18 +874,17 @@ void JSReadableFileSinkController::detach() {      m_onClose.clear();      if (readableStream && onClose) { -        JSC::JSGlobalObject *globalObject = this->globalObject(); +        JSC::JSGlobalObject* globalObject = this->globalObject();          auto callData = JSC::getCallData(onClose);          JSC::MarkedArgumentBuffer arguments;          arguments.append(readableStream);          arguments.append(jsUndefined());          JSC::call(globalObject, onClose, callData, JSC::jsUndefined(), arguments);      } -     +      m_weakReadableStream.clear();  } -  JSFileSinkConstructor* JSFileSinkConstructor::create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSObject* prototype)  {      JSFileSinkConstructor* ptr = new (NotNull, JSC::allocateCell<JSFileSinkConstructor>(vm)) JSFileSinkConstructor(vm, structure, FileSink__construct); @@ -950,11 +913,11 @@ void JSFileSinkConstructor::finishCreation(VM& vm, JSC::JSGlobalObject* globalOb      initializeProperties(vm, globalObject, prototype);  } -JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSFileSinkConstructor::construct(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callFrame) { +JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSFileSinkConstructor::construct(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callFrame) +{      return FileSink__construct(globalObject, callFrame);  } -  void JSFileSinkConstructor::initializeProperties(VM& vm, JSC::JSGlobalObject* globalObject, JSObject* prototype)  {      putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum); @@ -991,7 +954,6 @@ void JSReadableFileSinkController::finishCreation(VM& vm)      ASSERT(inherits(info()));  } -  void JSFileSink::analyzeHeap(JSCell* cell, HeapAnalyzer& analyzer)  {      auto* thisObject = jsCast<JSFileSink*>(cell); @@ -1014,7 +976,6 @@ void JSReadableFileSinkController::analyzeHeap(JSCell* cell, HeapAnalyzer& analy      Base::analyzeHeap(cell, analyzer);  } -  template<typename Visitor>  void JSReadableFileSinkController::visitChildrenImpl(JSCell* cell, Visitor& visitor)  { @@ -1023,13 +984,28 @@ void JSReadableFileSinkController::visitChildrenImpl(JSCell* cell, Visitor& visi      Base::visitChildren(thisObject, visitor);      visitor.append(thisObject->m_onPull);      visitor.append(thisObject->m_onClose); -    visitor.append(thisObject->m_weakReadableStream); +    void* ptr = thisObject->m_sinkPtr; +    if (ptr) +        visitor.addOpaqueRoot(ptr);  }  DEFINE_VISIT_CHILDREN(JSReadableFileSinkController); +template<typename Visitor> +void JSFileSink::visitChildrenImpl(JSCell* cell, Visitor& visitor) +{ +    JSFileSink* thisObject = jsCast<JSFileSink*>(cell); +    ASSERT_GC_OBJECT_INHERITS(thisObject, info()); +    Base::visitChildren(thisObject, visitor); +    void* ptr = thisObject->m_sinkPtr; +    if (ptr) +        visitor.addOpaqueRoot(ptr); +} + +DEFINE_VISIT_CHILDREN(JSFileSink); -void JSReadableFileSinkController::start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose) { +void JSReadableFileSinkController::start(JSC::JSGlobalObject* globalObject, JSC::JSValue readableStream, JSC::JSFunction* onPull, JSC::JSFunction* onClose) +{      this->m_weakReadableStream = JSC::Weak<JSC::JSObject>(readableStream.getObject());      this->m_onPull.set(globalObject->vm(), this, onPull);      this->m_onClose.set(globalObject->vm(), this, onClose); @@ -1040,14 +1016,11 @@ void JSFileSink::destroy(JSCell* cell)      static_cast<JSFileSink*>(cell)->JSFileSink::~JSFileSink();  } -  void JSReadableFileSinkController::destroy(JSCell* cell)  {      static_cast<JSReadableFileSinkController*>(cell)->JSReadableFileSinkController::~JSReadableFileSinkController();  } - -  #pragma mark - HTTPResponseSink  class JSHTTPResponseSinkPrototype final : public JSC::JSNonFinalObject { @@ -1083,42 +1056,41 @@ private:  STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSHTTPResponseSinkPrototype, JSHTTPResponseSinkPrototype::Base);  class JSReadableHTTPResponseSinkControllerPrototype final : public JSC::JSNonFinalObject { -    public: -        using Base = JSC::JSNonFinalObject; -     -        static JSReadableHTTPResponseSinkControllerPrototype* create(JSC::VM& vm, JSGlobalObject* globalObject, JSC::Structure* structure) -        { -            JSReadableHTTPResponseSinkControllerPrototype* ptr = new (NotNull, JSC::allocateCell<JSReadableHTTPResponseSinkControllerPrototype>(vm)) JSReadableHTTPResponseSinkControllerPrototype(vm, globalObject, structure); -            ptr->finishCreation(vm, globalObject); -            return ptr; -        } -     -        DECLARE_INFO; -        template<typename CellType, JSC::SubspaceAccess> -        static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) -        { -            return &vm.plainObjectSpace(); -        } -        static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) -        { -            return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); -        } -     -    private: -        JSReadableHTTPResponseSinkControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure) -            : Base(vm, structure) -        { -        } -     -        void finishCreation(JSC::VM&, JSC::JSGlobalObject*); -    }; -    STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSReadableHTTPResponseSinkControllerPrototype, JSReadableHTTPResponseSinkControllerPrototype::Base); +public: +    using Base = JSC::JSNonFinalObject; + +    static JSReadableHTTPResponseSinkControllerPrototype* create(JSC::VM& vm, JSGlobalObject* globalObject, JSC::Structure* structure) +    { +        JSReadableHTTPResponseSinkControllerPrototype* ptr = new (NotNull, JSC::allocateCell<JSReadableHTTPResponseSinkControllerPrototype>(vm)) JSReadableHTTPResponseSinkControllerPrototype(vm, globalObject, structure); +        ptr->finishCreation(vm, globalObject); +        return ptr; +    } + +    DECLARE_INFO; +    template<typename CellType, JSC::SubspaceAccess> +    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        return &vm.plainObjectSpace(); +    } +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } + +private: +    JSReadableHTTPResponseSinkControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure) +        : Base(vm, structure) +    { +    } + +    void finishCreation(JSC::VM&, JSC::JSGlobalObject*); +}; +STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSReadableHTTPResponseSinkControllerPrototype, JSReadableHTTPResponseSinkControllerPrototype::Base);  const ClassInfo JSHTTPResponseSinkPrototype::s_info = { "HTTPResponseSink"_s, &Base::s_info, &JSHTTPResponseSinkPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSHTTPResponseSinkPrototype) };  const ClassInfo JSHTTPResponseSink::s_info = { "HTTPResponseSink"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSHTTPResponseSink) };  const ClassInfo JSHTTPResponseSinkConstructor::s_info = { "HTTPResponseSink"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSHTTPResponseSinkConstructor) }; -  const ClassInfo JSReadableHTTPResponseSinkControllerPrototype::s_info = { "ReadableHTTPResponseSinkController"_s, &Base::s_info, &JSReadableHTTPResponseSinkControllerPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSReadableHTTPResponseSinkControllerPrototype) };  const ClassInfo JSReadableHTTPResponseSinkController::s_info = { "ReadableHTTPResponseSinkController"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSReadableHTTPResponseSinkController) }; @@ -1129,7 +1101,6 @@ JSHTTPResponseSink::~JSHTTPResponseSink()      }  } -  JSReadableHTTPResponseSinkController::~JSReadableHTTPResponseSinkController()  {      if (m_sinkPtr) { @@ -1147,7 +1118,8 @@ JSObject* JSReadableHTTPResponseSinkController::createPrototype(VM& vm, JSDOMGlo      return JSReadableHTTPResponseSinkControllerPrototype::create(vm, &globalObject, JSReadableHTTPResponseSinkControllerPrototype::createStructure(vm, &globalObject, globalObject.objectPrototype()));  } -void JSReadableHTTPResponseSinkController::detach() { +void JSReadableHTTPResponseSinkController::detach() +{      m_sinkPtr = nullptr;      m_onPull.clear(); @@ -1156,18 +1128,17 @@ void JSReadableHTTPResponseSinkController::detach() {      m_onClose.clear();      if (readableStream && onClose) { -        JSC::JSGlobalObject *globalObject = this->globalObject(); +        JSC::JSGlobalObject* globalObject = this->globalObject();          auto callData = JSC::getCallData(onClose);          JSC::MarkedArgumentBuffer arguments;          arguments.append(readableStream);          arguments.append(jsUndefined());          JSC::call(globalObject, onClose, callData, JSC::jsUndefined(), arguments);      } -     +      m_weakReadableStream.clear();  } -  JSHTTPResponseSinkConstructor* JSHTTPResponseSinkConstructor::create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSObject* prototype)  {      JSHTTPResponseSinkConstructor* ptr = new (NotNull, JSC::allocateCell<JSHTTPResponseSinkConstructor>(vm)) JSHTTPResponseSinkConstructor(vm, structure, HTTPResponseSink__construct); @@ -1196,11 +1167,11 @@ void JSHTTPResponseSinkConstructor::finishCreation(VM& vm, JSC::JSGlobalObject*      initializeProperties(vm, globalObject, prototype);  } -JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSHTTPResponseSinkConstructor::construct(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callFrame) { +JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSHTTPResponseSinkConstructor::construct(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callFrame) +{      return HTTPResponseSink__construct(globalObject, callFrame);  } -  void JSHTTPResponseSinkConstructor::initializeProperties(VM& vm, JSC::JSGlobalObject* globalObject, JSObject* prototype)  {      putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum); @@ -1237,7 +1208,6 @@ void JSReadableHTTPResponseSinkController::finishCreation(VM& vm)      ASSERT(inherits(info()));  } -  void JSHTTPResponseSink::analyzeHeap(JSCell* cell, HeapAnalyzer& analyzer)  {      auto* thisObject = jsCast<JSHTTPResponseSink*>(cell); @@ -1260,7 +1230,6 @@ void JSReadableHTTPResponseSinkController::analyzeHeap(JSCell* cell, HeapAnalyze      Base::analyzeHeap(cell, analyzer);  } -  template<typename Visitor>  void JSReadableHTTPResponseSinkController::visitChildrenImpl(JSCell* cell, Visitor& visitor)  { @@ -1269,13 +1238,28 @@ void JSReadableHTTPResponseSinkController::visitChildrenImpl(JSCell* cell, Visit      Base::visitChildren(thisObject, visitor);      visitor.append(thisObject->m_onPull);      visitor.append(thisObject->m_onClose); -    visitor.append(thisObject->m_weakReadableStream); +    void* ptr = thisObject->m_sinkPtr; +    if (ptr) +        visitor.addOpaqueRoot(ptr);  }  DEFINE_VISIT_CHILDREN(JSReadableHTTPResponseSinkController); +template<typename Visitor> +void JSHTTPResponseSink::visitChildrenImpl(JSCell* cell, Visitor& visitor) +{ +    JSHTTPResponseSink* thisObject = jsCast<JSHTTPResponseSink*>(cell); +    ASSERT_GC_OBJECT_INHERITS(thisObject, info()); +    Base::visitChildren(thisObject, visitor); +    void* ptr = thisObject->m_sinkPtr; +    if (ptr) +        visitor.addOpaqueRoot(ptr); +} -void JSReadableHTTPResponseSinkController::start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose) { +DEFINE_VISIT_CHILDREN(JSHTTPResponseSink); + +void JSReadableHTTPResponseSinkController::start(JSC::JSGlobalObject* globalObject, JSC::JSValue readableStream, JSC::JSFunction* onPull, JSC::JSFunction* onClose) +{      this->m_weakReadableStream = JSC::Weak<JSC::JSObject>(readableStream.getObject());      this->m_onPull.set(globalObject->vm(), this, onPull);      this->m_onClose.set(globalObject->vm(), this, onClose); @@ -1286,14 +1270,11 @@ void JSHTTPResponseSink::destroy(JSCell* cell)      static_cast<JSHTTPResponseSink*>(cell)->JSHTTPResponseSink::~JSHTTPResponseSink();  } -  void JSReadableHTTPResponseSinkController::destroy(JSCell* cell)  {      static_cast<JSReadableHTTPResponseSinkController*>(cell)->JSReadableHTTPResponseSinkController::~JSReadableHTTPResponseSinkController();  } - -  #pragma mark - HTTPSResponseSink  class JSHTTPSResponseSinkPrototype final : public JSC::JSNonFinalObject { @@ -1329,42 +1310,41 @@ private:  STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSHTTPSResponseSinkPrototype, JSHTTPSResponseSinkPrototype::Base);  class JSReadableHTTPSResponseSinkControllerPrototype final : public JSC::JSNonFinalObject { -    public: -        using Base = JSC::JSNonFinalObject; -     -        static JSReadableHTTPSResponseSinkControllerPrototype* create(JSC::VM& vm, JSGlobalObject* globalObject, JSC::Structure* structure) -        { -            JSReadableHTTPSResponseSinkControllerPrototype* ptr = new (NotNull, JSC::allocateCell<JSReadableHTTPSResponseSinkControllerPrototype>(vm)) JSReadableHTTPSResponseSinkControllerPrototype(vm, globalObject, structure); -            ptr->finishCreation(vm, globalObject); -            return ptr; -        } -     -        DECLARE_INFO; -        template<typename CellType, JSC::SubspaceAccess> -        static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) -        { -            return &vm.plainObjectSpace(); -        } -        static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) -        { -            return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); -        } -     -    private: -        JSReadableHTTPSResponseSinkControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure) -            : Base(vm, structure) -        { -        } -     -        void finishCreation(JSC::VM&, JSC::JSGlobalObject*); -    }; -    STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSReadableHTTPSResponseSinkControllerPrototype, JSReadableHTTPSResponseSinkControllerPrototype::Base); +public: +    using Base = JSC::JSNonFinalObject; + +    static JSReadableHTTPSResponseSinkControllerPrototype* create(JSC::VM& vm, JSGlobalObject* globalObject, JSC::Structure* structure) +    { +        JSReadableHTTPSResponseSinkControllerPrototype* ptr = new (NotNull, JSC::allocateCell<JSReadableHTTPSResponseSinkControllerPrototype>(vm)) JSReadableHTTPSResponseSinkControllerPrototype(vm, globalObject, structure); +        ptr->finishCreation(vm, globalObject); +        return ptr; +    } + +    DECLARE_INFO; +    template<typename CellType, JSC::SubspaceAccess> +    static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        return &vm.plainObjectSpace(); +    } +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } + +private: +    JSReadableHTTPSResponseSinkControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure) +        : Base(vm, structure) +    { +    } + +    void finishCreation(JSC::VM&, JSC::JSGlobalObject*); +}; +STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(JSReadableHTTPSResponseSinkControllerPrototype, JSReadableHTTPSResponseSinkControllerPrototype::Base);  const ClassInfo JSHTTPSResponseSinkPrototype::s_info = { "HTTPSResponseSink"_s, &Base::s_info, &JSHTTPSResponseSinkPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSHTTPSResponseSinkPrototype) };  const ClassInfo JSHTTPSResponseSink::s_info = { "HTTPSResponseSink"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSHTTPSResponseSink) };  const ClassInfo JSHTTPSResponseSinkConstructor::s_info = { "HTTPSResponseSink"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSHTTPSResponseSinkConstructor) }; -  const ClassInfo JSReadableHTTPSResponseSinkControllerPrototype::s_info = { "ReadableHTTPSResponseSinkController"_s, &Base::s_info, &JSReadableHTTPSResponseSinkControllerPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSReadableHTTPSResponseSinkControllerPrototype) };  const ClassInfo JSReadableHTTPSResponseSinkController::s_info = { "ReadableHTTPSResponseSinkController"_s, &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSReadableHTTPSResponseSinkController) }; @@ -1375,7 +1355,6 @@ JSHTTPSResponseSink::~JSHTTPSResponseSink()      }  } -  JSReadableHTTPSResponseSinkController::~JSReadableHTTPSResponseSinkController()  {      if (m_sinkPtr) { @@ -1393,7 +1372,8 @@ JSObject* JSReadableHTTPSResponseSinkController::createPrototype(VM& vm, JSDOMGl      return JSReadableHTTPSResponseSinkControllerPrototype::create(vm, &globalObject, JSReadableHTTPSResponseSinkControllerPrototype::createStructure(vm, &globalObject, globalObject.objectPrototype()));  } -void JSReadableHTTPSResponseSinkController::detach() { +void JSReadableHTTPSResponseSinkController::detach() +{      m_sinkPtr = nullptr;      m_onPull.clear(); @@ -1402,18 +1382,17 @@ void JSReadableHTTPSResponseSinkController::detach() {      m_onClose.clear();      if (readableStream && onClose) { -        JSC::JSGlobalObject *globalObject = this->globalObject(); +        JSC::JSGlobalObject* globalObject = this->globalObject();          auto callData = JSC::getCallData(onClose);          JSC::MarkedArgumentBuffer arguments;          arguments.append(readableStream);          arguments.append(jsUndefined());          JSC::call(globalObject, onClose, callData, JSC::jsUndefined(), arguments);      } -     +      m_weakReadableStream.clear();  } -  JSHTTPSResponseSinkConstructor* JSHTTPSResponseSinkConstructor::create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSObject* prototype)  {      JSHTTPSResponseSinkConstructor* ptr = new (NotNull, JSC::allocateCell<JSHTTPSResponseSinkConstructor>(vm)) JSHTTPSResponseSinkConstructor(vm, structure, HTTPSResponseSink__construct); @@ -1442,11 +1421,11 @@ void JSHTTPSResponseSinkConstructor::finishCreation(VM& vm, JSC::JSGlobalObject*      initializeProperties(vm, globalObject, prototype);  } -JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSHTTPSResponseSinkConstructor::construct(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callFrame) { +JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES JSHTTPSResponseSinkConstructor::construct(JSC::JSGlobalObject* globalObject, JSC::CallFrame* callFrame) +{      return HTTPSResponseSink__construct(globalObject, callFrame);  } -  void JSHTTPSResponseSinkConstructor::initializeProperties(VM& vm, JSC::JSGlobalObject* globalObject, JSObject* prototype)  {      putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum); @@ -1483,7 +1462,6 @@ void JSReadableHTTPSResponseSinkController::finishCreation(VM& vm)      ASSERT(inherits(info()));  } -  void JSHTTPSResponseSink::analyzeHeap(JSCell* cell, HeapAnalyzer& analyzer)  {      auto* thisObject = jsCast<JSHTTPSResponseSink*>(cell); @@ -1506,7 +1484,6 @@ void JSReadableHTTPSResponseSinkController::analyzeHeap(JSCell* cell, HeapAnalyz      Base::analyzeHeap(cell, analyzer);  } -  template<typename Visitor>  void JSReadableHTTPSResponseSinkController::visitChildrenImpl(JSCell* cell, Visitor& visitor)  { @@ -1515,13 +1492,28 @@ void JSReadableHTTPSResponseSinkController::visitChildrenImpl(JSCell* cell, Visi      Base::visitChildren(thisObject, visitor);      visitor.append(thisObject->m_onPull);      visitor.append(thisObject->m_onClose); -    visitor.append(thisObject->m_weakReadableStream); +    void* ptr = thisObject->m_sinkPtr; +    if (ptr) +        visitor.addOpaqueRoot(ptr);  }  DEFINE_VISIT_CHILDREN(JSReadableHTTPSResponseSinkController); +template<typename Visitor> +void JSHTTPSResponseSink::visitChildrenImpl(JSCell* cell, Visitor& visitor) +{ +    JSHTTPSResponseSink* thisObject = jsCast<JSHTTPSResponseSink*>(cell); +    ASSERT_GC_OBJECT_INHERITS(thisObject, info()); +    Base::visitChildren(thisObject, visitor); +    void* ptr = thisObject->m_sinkPtr; +    if (ptr) +        visitor.addOpaqueRoot(ptr); +} + +DEFINE_VISIT_CHILDREN(JSHTTPSResponseSink); -void JSReadableHTTPSResponseSinkController::start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose) { +void JSReadableHTTPSResponseSinkController::start(JSC::JSGlobalObject* globalObject, JSC::JSValue readableStream, JSC::JSFunction* onPull, JSC::JSFunction* onClose) +{      this->m_weakReadableStream = JSC::Weak<JSC::JSObject>(readableStream.getObject());      this->m_onPull.set(globalObject->vm(), this, onPull);      this->m_onClose.set(globalObject->vm(), this, onClose); @@ -1532,18 +1524,15 @@ void JSHTTPSResponseSink::destroy(JSCell* cell)      static_cast<JSHTTPSResponseSink*>(cell)->JSHTTPSResponseSink::~JSHTTPSResponseSink();  } -  void JSReadableHTTPSResponseSinkController::destroy(JSCell* cell)  {      static_cast<JSReadableHTTPSResponseSinkController*>(cell)->JSReadableHTTPSResponseSinkController::~JSReadableHTTPSResponseSinkController();  } +JSObject* createJSSinkPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, SinkID sinkID) +{ +    switch (sinkID) { - -  JSObject* createJSSinkPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, SinkID sinkID) -  { -      switch (sinkID) { -          case ArrayBufferSink:          return JSArrayBufferSinkPrototype::create(vm, globalObject, JSArrayBufferSinkPrototype::createStructure(vm, globalObject, globalObject->objectPrototype())); @@ -1556,61 +1545,60 @@ void JSReadableHTTPSResponseSinkController::destroy(JSCell* cell)      case HTTPSResponseSink:          return JSHTTPSResponseSinkPrototype::create(vm, globalObject, JSHTTPSResponseSinkPrototype::createStructure(vm, globalObject, globalObject->objectPrototype())); -default:  -    RELEASE_ASSERT_NOT_REACHED(); +    default: +        RELEASE_ASSERT_NOT_REACHED();      }  }  JSObject* createJSSinkControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, SinkID sinkID)  {      switch (sinkID) { -   -  case ArrayBufferSink: -      return JSReadableArrayBufferSinkControllerPrototype::create(vm, globalObject, JSReadableArrayBufferSinkControllerPrototype::createStructure(vm, globalObject, globalObject->objectPrototype())); -  case FileSink: -      return JSReadableFileSinkControllerPrototype::create(vm, globalObject, JSReadableFileSinkControllerPrototype::createStructure(vm, globalObject, globalObject->objectPrototype())); +    case ArrayBufferSink: +        return JSReadableArrayBufferSinkControllerPrototype::create(vm, globalObject, JSReadableArrayBufferSinkControllerPrototype::createStructure(vm, globalObject, globalObject->objectPrototype())); -  case HTTPResponseSink: -      return JSReadableHTTPResponseSinkControllerPrototype::create(vm, globalObject, JSReadableHTTPResponseSinkControllerPrototype::createStructure(vm, globalObject, globalObject->objectPrototype())); +    case FileSink: +        return JSReadableFileSinkControllerPrototype::create(vm, globalObject, JSReadableFileSinkControllerPrototype::createStructure(vm, globalObject, globalObject->objectPrototype())); + +    case HTTPResponseSink: +        return JSReadableHTTPResponseSinkControllerPrototype::create(vm, globalObject, JSReadableHTTPResponseSinkControllerPrototype::createStructure(vm, globalObject, globalObject->objectPrototype())); -  case HTTPSResponseSink: -      return JSReadableHTTPSResponseSinkControllerPrototype::create(vm, globalObject, JSReadableHTTPSResponseSinkControllerPrototype::createStructure(vm, globalObject, globalObject->objectPrototype())); +    case HTTPSResponseSink: +        return JSReadableHTTPSResponseSinkControllerPrototype::create(vm, globalObject, JSReadableHTTPSResponseSinkControllerPrototype::createStructure(vm, globalObject, globalObject->objectPrototype())); -default:  -  RELEASE_ASSERT_NOT_REACHED(); -  } +    default: +        RELEASE_ASSERT_NOT_REACHED(); +    }  }  Structure* createJSSinkControllerStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, SinkID sinkID)  {      switch (sinkID) { -   -  case ArrayBufferSink: { -    auto* prototype = createJSSinkControllerPrototype(vm, globalObject, sinkID); -    return JSReadableArrayBufferSinkController::createStructure(vm, globalObject, prototype); -  } - -  case FileSink: { -    auto* prototype = createJSSinkControllerPrototype(vm, globalObject, sinkID); -    return JSReadableFileSinkController::createStructure(vm, globalObject, prototype); -  } - -  case HTTPResponseSink: { -    auto* prototype = createJSSinkControllerPrototype(vm, globalObject, sinkID); -    return JSReadableHTTPResponseSinkController::createStructure(vm, globalObject, prototype); -  } - -  case HTTPSResponseSink: { -    auto* prototype = createJSSinkControllerPrototype(vm, globalObject, sinkID); -    return JSReadableHTTPSResponseSinkController::createStructure(vm, globalObject, prototype); -  } - -default: -    RELEASE_ASSERT_NOT_REACHED(); -  } + +    case ArrayBufferSink: { +        auto* prototype = createJSSinkControllerPrototype(vm, globalObject, sinkID); +        return JSReadableArrayBufferSinkController::createStructure(vm, globalObject, prototype); +    } + +    case FileSink: { +        auto* prototype = createJSSinkControllerPrototype(vm, globalObject, sinkID); +        return JSReadableFileSinkController::createStructure(vm, globalObject, prototype); +    } + +    case HTTPResponseSink: { +        auto* prototype = createJSSinkControllerPrototype(vm, globalObject, sinkID); +        return JSReadableHTTPResponseSinkController::createStructure(vm, globalObject, prototype); +    } + +    case HTTPSResponseSink: { +        auto* prototype = createJSSinkControllerPrototype(vm, globalObject, sinkID); +        return JSReadableHTTPSResponseSinkController::createStructure(vm, globalObject, prototype); +    } + +    default: +        RELEASE_ASSERT_NOT_REACHED(); +    }  }  } // namespace WebCore -  extern "C" JSC__JSValue ArrayBufferSink__createObject(JSC__JSGlobalObject* arg0, void* sinkPtr)  {      auto& vm = arg0->vm(); @@ -1638,7 +1626,6 @@ extern "C" void ArrayBufferSink__detachPtr(JSC__JSValue JSValue0)          sink->detach();          return;      } -              if (auto* controller = JSC::jsDynamicCast<WebCore::JSReadableArrayBufferSinkController*>(JSC::JSValue::decode(JSValue0))) {          controller->detach(); @@ -1646,13 +1633,13 @@ extern "C" void ArrayBufferSink__detachPtr(JSC__JSValue JSValue0)      }  } -extern "C" JSC__JSValue ArrayBufferSink__assignToStream(JSC__JSGlobalObject* arg0, JSC__JSValue stream, void* sinkPtr, void **controllerValue) +extern "C" JSC__JSValue ArrayBufferSink__assignToStream(JSC__JSGlobalObject* arg0, JSC__JSValue stream, void* sinkPtr, void** controllerValue)  {      auto& vm = arg0->vm();      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(arg0);      JSC::Structure* structure = WebCore::getDOMStructure<WebCore::JSReadableArrayBufferSinkController>(vm, *globalObject); -    WebCore::JSReadableArrayBufferSinkController *controller = WebCore::JSReadableArrayBufferSinkController::create(vm, globalObject, structure, sinkPtr); +    WebCore::JSReadableArrayBufferSinkController* controller = WebCore::JSReadableArrayBufferSinkController::create(vm, globalObject, structure, sinkPtr);      *controllerValue = reinterpret_cast<void*>(JSC::JSValue::encode(controller));      return globalObject->assignToStream(JSC::JSValue::decode(stream), controller);  } @@ -1661,10 +1648,10 @@ extern "C" void ArrayBufferSink__onReady(JSC__JSValue controllerValue, JSC__JSVa  {      WebCore::JSReadableArrayBufferSinkController* controller = JSC::jsCast<WebCore::JSReadableArrayBufferSinkController*>(JSC::JSValue::decode(controllerValue).getObject()); -    JSC::JSFunction *function = controller->m_onPull.get(); +    JSC::JSFunction* function = controller->m_onPull.get();      if (function == nullptr)          return; -    JSC::JSGlobalObject *globalObject = controller->globalObject(); +    JSC::JSGlobalObject* globalObject = controller->globalObject();      auto callData = JSC::getCallData(function);      JSC::MarkedArgumentBuffer arguments; @@ -1677,19 +1664,18 @@ extern "C" void ArrayBufferSink__onReady(JSC__JSValue controllerValue, JSC__JSVa  extern "C" void ArrayBufferSink__onStart(JSC__JSValue controllerValue)  { -  }  extern "C" void ArrayBufferSink__onClose(JSC__JSValue controllerValue, JSC__JSValue reason)  {      WebCore::JSReadableArrayBufferSinkController* controller = JSC::jsCast<WebCore::JSReadableArrayBufferSinkController*>(JSC::JSValue::decode(controllerValue).getObject()); -    JSC::JSFunction *function = controller->m_onClose.get(); +    JSC::JSFunction* function = controller->m_onClose.get();      if (function == nullptr)          return;      // only call close once      controller->m_onClose.clear(); -    JSC::JSGlobalObject *globalObject = controller->globalObject(); +    JSC::JSGlobalObject* globalObject = controller->globalObject();      auto callData = JSC::getCallData(function);      JSC::MarkedArgumentBuffer arguments; @@ -1700,7 +1686,6 @@ extern "C" void ArrayBufferSink__onClose(JSC__JSValue controllerValue, JSC__JSVa      JSC::call(globalObject, function, callData, JSC::jsUndefined(), arguments);  } -  extern "C" JSC__JSValue FileSink__createObject(JSC__JSGlobalObject* arg0, void* sinkPtr)  {      auto& vm = arg0->vm(); @@ -1728,7 +1713,6 @@ extern "C" void FileSink__detachPtr(JSC__JSValue JSValue0)          sink->detach();          return;      } -              if (auto* controller = JSC::jsDynamicCast<WebCore::JSReadableFileSinkController*>(JSC::JSValue::decode(JSValue0))) {          controller->detach(); @@ -1736,13 +1720,13 @@ extern "C" void FileSink__detachPtr(JSC__JSValue JSValue0)      }  } -extern "C" JSC__JSValue FileSink__assignToStream(JSC__JSGlobalObject* arg0, JSC__JSValue stream, void* sinkPtr, void **controllerValue) +extern "C" JSC__JSValue FileSink__assignToStream(JSC__JSGlobalObject* arg0, JSC__JSValue stream, void* sinkPtr, void** controllerValue)  {      auto& vm = arg0->vm();      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(arg0);      JSC::Structure* structure = WebCore::getDOMStructure<WebCore::JSReadableFileSinkController>(vm, *globalObject); -    WebCore::JSReadableFileSinkController *controller = WebCore::JSReadableFileSinkController::create(vm, globalObject, structure, sinkPtr); +    WebCore::JSReadableFileSinkController* controller = WebCore::JSReadableFileSinkController::create(vm, globalObject, structure, sinkPtr);      *controllerValue = reinterpret_cast<void*>(JSC::JSValue::encode(controller));      return globalObject->assignToStream(JSC::JSValue::decode(stream), controller);  } @@ -1751,10 +1735,10 @@ extern "C" void FileSink__onReady(JSC__JSValue controllerValue, JSC__JSValue amt  {      WebCore::JSReadableFileSinkController* controller = JSC::jsCast<WebCore::JSReadableFileSinkController*>(JSC::JSValue::decode(controllerValue).getObject()); -    JSC::JSFunction *function = controller->m_onPull.get(); +    JSC::JSFunction* function = controller->m_onPull.get();      if (function == nullptr)          return; -    JSC::JSGlobalObject *globalObject = controller->globalObject(); +    JSC::JSGlobalObject* globalObject = controller->globalObject();      auto callData = JSC::getCallData(function);      JSC::MarkedArgumentBuffer arguments; @@ -1767,19 +1751,18 @@ extern "C" void FileSink__onReady(JSC__JSValue controllerValue, JSC__JSValue amt  extern "C" void FileSink__onStart(JSC__JSValue controllerValue)  { -  }  extern "C" void FileSink__onClose(JSC__JSValue controllerValue, JSC__JSValue reason)  {      WebCore::JSReadableFileSinkController* controller = JSC::jsCast<WebCore::JSReadableFileSinkController*>(JSC::JSValue::decode(controllerValue).getObject()); -    JSC::JSFunction *function = controller->m_onClose.get(); +    JSC::JSFunction* function = controller->m_onClose.get();      if (function == nullptr)          return;      // only call close once      controller->m_onClose.clear(); -    JSC::JSGlobalObject *globalObject = controller->globalObject(); +    JSC::JSGlobalObject* globalObject = controller->globalObject();      auto callData = JSC::getCallData(function);      JSC::MarkedArgumentBuffer arguments; @@ -1790,7 +1773,6 @@ extern "C" void FileSink__onClose(JSC__JSValue controllerValue, JSC__JSValue rea      JSC::call(globalObject, function, callData, JSC::jsUndefined(), arguments);  } -  extern "C" JSC__JSValue HTTPResponseSink__createObject(JSC__JSGlobalObject* arg0, void* sinkPtr)  {      auto& vm = arg0->vm(); @@ -1818,7 +1800,6 @@ extern "C" void HTTPResponseSink__detachPtr(JSC__JSValue JSValue0)          sink->detach();          return;      } -              if (auto* controller = JSC::jsDynamicCast<WebCore::JSReadableHTTPResponseSinkController*>(JSC::JSValue::decode(JSValue0))) {          controller->detach(); @@ -1826,13 +1807,13 @@ extern "C" void HTTPResponseSink__detachPtr(JSC__JSValue JSValue0)      }  } -extern "C" JSC__JSValue HTTPResponseSink__assignToStream(JSC__JSGlobalObject* arg0, JSC__JSValue stream, void* sinkPtr, void **controllerValue) +extern "C" JSC__JSValue HTTPResponseSink__assignToStream(JSC__JSGlobalObject* arg0, JSC__JSValue stream, void* sinkPtr, void** controllerValue)  {      auto& vm = arg0->vm();      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(arg0);      JSC::Structure* structure = WebCore::getDOMStructure<WebCore::JSReadableHTTPResponseSinkController>(vm, *globalObject); -    WebCore::JSReadableHTTPResponseSinkController *controller = WebCore::JSReadableHTTPResponseSinkController::create(vm, globalObject, structure, sinkPtr); +    WebCore::JSReadableHTTPResponseSinkController* controller = WebCore::JSReadableHTTPResponseSinkController::create(vm, globalObject, structure, sinkPtr);      *controllerValue = reinterpret_cast<void*>(JSC::JSValue::encode(controller));      return globalObject->assignToStream(JSC::JSValue::decode(stream), controller);  } @@ -1841,10 +1822,10 @@ extern "C" void HTTPResponseSink__onReady(JSC__JSValue controllerValue, JSC__JSV  {      WebCore::JSReadableHTTPResponseSinkController* controller = JSC::jsCast<WebCore::JSReadableHTTPResponseSinkController*>(JSC::JSValue::decode(controllerValue).getObject()); -    JSC::JSFunction *function = controller->m_onPull.get(); +    JSC::JSFunction* function = controller->m_onPull.get();      if (function == nullptr)          return; -    JSC::JSGlobalObject *globalObject = controller->globalObject(); +    JSC::JSGlobalObject* globalObject = controller->globalObject();      auto callData = JSC::getCallData(function);      JSC::MarkedArgumentBuffer arguments; @@ -1857,19 +1838,18 @@ extern "C" void HTTPResponseSink__onReady(JSC__JSValue controllerValue, JSC__JSV  extern "C" void HTTPResponseSink__onStart(JSC__JSValue controllerValue)  { -  }  extern "C" void HTTPResponseSink__onClose(JSC__JSValue controllerValue, JSC__JSValue reason)  {      WebCore::JSReadableHTTPResponseSinkController* controller = JSC::jsCast<WebCore::JSReadableHTTPResponseSinkController*>(JSC::JSValue::decode(controllerValue).getObject()); -    JSC::JSFunction *function = controller->m_onClose.get(); +    JSC::JSFunction* function = controller->m_onClose.get();      if (function == nullptr)          return;      // only call close once      controller->m_onClose.clear(); -    JSC::JSGlobalObject *globalObject = controller->globalObject(); +    JSC::JSGlobalObject* globalObject = controller->globalObject();      auto callData = JSC::getCallData(function);      JSC::MarkedArgumentBuffer arguments; @@ -1880,7 +1860,6 @@ extern "C" void HTTPResponseSink__onClose(JSC__JSValue controllerValue, JSC__JSV      JSC::call(globalObject, function, callData, JSC::jsUndefined(), arguments);  } -  extern "C" JSC__JSValue HTTPSResponseSink__createObject(JSC__JSGlobalObject* arg0, void* sinkPtr)  {      auto& vm = arg0->vm(); @@ -1908,7 +1887,6 @@ extern "C" void HTTPSResponseSink__detachPtr(JSC__JSValue JSValue0)          sink->detach();          return;      } -              if (auto* controller = JSC::jsDynamicCast<WebCore::JSReadableHTTPSResponseSinkController*>(JSC::JSValue::decode(JSValue0))) {          controller->detach(); @@ -1916,13 +1894,13 @@ extern "C" void HTTPSResponseSink__detachPtr(JSC__JSValue JSValue0)      }  } -extern "C" JSC__JSValue HTTPSResponseSink__assignToStream(JSC__JSGlobalObject* arg0, JSC__JSValue stream, void* sinkPtr, void **controllerValue) +extern "C" JSC__JSValue HTTPSResponseSink__assignToStream(JSC__JSGlobalObject* arg0, JSC__JSValue stream, void* sinkPtr, void** controllerValue)  {      auto& vm = arg0->vm();      Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(arg0);      JSC::Structure* structure = WebCore::getDOMStructure<WebCore::JSReadableHTTPSResponseSinkController>(vm, *globalObject); -    WebCore::JSReadableHTTPSResponseSinkController *controller = WebCore::JSReadableHTTPSResponseSinkController::create(vm, globalObject, structure, sinkPtr); +    WebCore::JSReadableHTTPSResponseSinkController* controller = WebCore::JSReadableHTTPSResponseSinkController::create(vm, globalObject, structure, sinkPtr);      *controllerValue = reinterpret_cast<void*>(JSC::JSValue::encode(controller));      return globalObject->assignToStream(JSC::JSValue::decode(stream), controller);  } @@ -1931,10 +1909,10 @@ extern "C" void HTTPSResponseSink__onReady(JSC__JSValue controllerValue, JSC__JS  {      WebCore::JSReadableHTTPSResponseSinkController* controller = JSC::jsCast<WebCore::JSReadableHTTPSResponseSinkController*>(JSC::JSValue::decode(controllerValue).getObject()); -    JSC::JSFunction *function = controller->m_onPull.get(); +    JSC::JSFunction* function = controller->m_onPull.get();      if (function == nullptr)          return; -    JSC::JSGlobalObject *globalObject = controller->globalObject(); +    JSC::JSGlobalObject* globalObject = controller->globalObject();      auto callData = JSC::getCallData(function);      JSC::MarkedArgumentBuffer arguments; @@ -1947,19 +1925,18 @@ extern "C" void HTTPSResponseSink__onReady(JSC__JSValue controllerValue, JSC__JS  extern "C" void HTTPSResponseSink__onStart(JSC__JSValue controllerValue)  { -  }  extern "C" void HTTPSResponseSink__onClose(JSC__JSValue controllerValue, JSC__JSValue reason)  {      WebCore::JSReadableHTTPSResponseSinkController* controller = JSC::jsCast<WebCore::JSReadableHTTPSResponseSinkController*>(JSC::JSValue::decode(controllerValue).getObject()); -    JSC::JSFunction *function = controller->m_onClose.get(); +    JSC::JSFunction* function = controller->m_onClose.get();      if (function == nullptr)          return;      // only call close once      controller->m_onClose.clear(); -    JSC::JSGlobalObject *globalObject = controller->globalObject(); +    JSC::JSGlobalObject* globalObject = controller->globalObject();      auto callData = JSC::getCallData(function);      JSC::MarkedArgumentBuffer arguments; @@ -1969,4 +1946,3 @@ extern "C" void HTTPSResponseSink__onClose(JSC__JSValue controllerValue, JSC__JS      arguments.append(JSC::JSValue::decode(reason));      JSC::call(globalObject, function, callData, JSC::jsUndefined(), arguments);  } - diff --git a/src/bun.js/bindings/JSSink.h b/src/bun.js/bindings/JSSink.h index 2c9d5e2a6..68caf12fc 100644 --- a/src/bun.js/bindings/JSSink.h +++ b/src/bun.js/bindings/JSSink.h @@ -1,6 +1,6 @@  // AUTO-GENERATED FILE. DO NOT EDIT. -// Generated by 'make generate-sink' at 2022-11-13T22:44:00.279Z +// Generated by 'make generate-sink' at 2022-11-20T12:51:04.403Z  //  #pragma once @@ -17,683 +17,578 @@ namespace WebCore {  using namespace JSC;  JSC_DECLARE_HOST_FUNCTION(functionStartDirectStream); -class JSArrayBufferSinkConstructor final : public JSC::InternalFunction {                                                                                                      -        public:                                                                                                                                                                      -            using Base = JSC::InternalFunction;                                                                                                                                      -            static JSArrayBufferSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype);  -            static constexpr SinkID Sink = SinkID::ArrayBufferSink; -                                                                                                                                                                                     -            static constexpr unsigned StructureFlags = Base::StructureFlags;                                                                                                         -            static constexpr bool needsDestruction = false;                                                                                                                          -                                                                                                                                                                                     -            DECLARE_EXPORT_INFO;                                                                                                                                                     -            template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -            {                                                                                                                                                                        -                if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                    return nullptr;                                                                                                                                                  -                return WebCore::subspaceForImpl<JSArrayBufferSinkConstructor, WebCore::UseCustomHeapCellType::No>(                                                                     -                    vm,                                                                                                                                                              -                    [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); },                                                                                  -                    [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); },                                                                -                    [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); },                                                                                        -                    [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); });                                                                     -            }                                                                                                                                                                        -                                                                                                                                                                                     -            static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -            {                                                                                                                                                                        -                return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info());                                                  -            }                                                                                                                                                                        -            void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype);    -             -             -            // Must be defined for each specialization class. -            static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); -                                                                                                                                                                -        private:                                                                                                                                                                     -            JSArrayBufferSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction)                                                                   -                : Base(vm, structure, nativeFunction, nativeFunction)                                                                                                                -                                                                                                                                                                                     -            {                                                                                                                                                                        -            }                                                                                                                                                                        -                                                                                                                                                                                     -            void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype);                                                      -        };                                                                                                                                                                           -                                                                                                                                                                                     -        class JSArrayBufferSink final : public JSC::JSDestructibleObject {                                                                                                               -        public:                                                                                                                                                                      -            using Base = JSC::JSDestructibleObject;                                                                                                                                  -            static JSArrayBufferSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr);        -            static constexpr SinkID Sink = SinkID::ArrayBufferSink;                                           -                                                                                                                                                                                     -            DECLARE_EXPORT_INFO;                                                                                                                                                     -            template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -            {                                                                                                                                                                        -                if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                    return nullptr;                                                                                                                                                  -                return WebCore::subspaceForImpl<JSArrayBufferSink, WebCore::UseCustomHeapCellType::No>(                                                                                  -                    vm,                                                                                                                                                              -                    [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); },                                                                                             -                    [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); },                                                                           -                    [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); },                                                                                                   -                    [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); });                                                                                -            }                                                                                                                                                                        -                                                                                                                                                                                     -            static void destroy(JSC::JSCell*);                                                                                                                                       -            static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -            {                                                                                                                                                                        -                return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());                                                  -            }                        -             -            static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); -                                                                                                                                                                                     -            ~JSArrayBufferSink();                                                                                                                                                        -                                                                                                                                                                                     -            void* wrapped() const { return m_sinkPtr; }                                                                                                                              - -            void detach() { -                m_sinkPtr = nullptr; - -            }                        - -            static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);                                                                                                                    -                                                                                                                                                                                     -            void* m_sinkPtr; -                                                                                                                                                                                     -            JSArrayBufferSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr)                                                                                                     -                : Base(vm, structure)                                                                                                                                                -            {                                                                                                                                                                        -                m_sinkPtr = sinkPtr; -            }                                                                                                                                                                        -                                                                                                                                                                                     -            void finishCreation(JSC::VM&); -        }; - -      - -        class JSReadableArrayBufferSinkController final : public JSC::JSDestructibleObject {                                                                                                               -            public:                                                                                                                                                                      -                using Base = JSC::JSDestructibleObject;                                                                                                                                  -                static JSReadableArrayBufferSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr);        -                static constexpr SinkID Sink = SinkID::ArrayBufferSink;                                           -                                                                                                                                                                                         -                DECLARE_EXPORT_INFO;                                                                                                                                                     -                template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -                {                                                                                                                                                                        -                    if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                        return nullptr;                                                                                                                                                  -                    return WebCore::subspaceForImpl<JSReadableArrayBufferSinkController, WebCore::UseCustomHeapCellType::No>(                                                                                  -                        vm,                                                                                                                                                              -                        [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); },                                                                                             -                        [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); },                                                                           -                        [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); },                                                                                                   -                        [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); });                                                                                -                }                                                                                                                                                                        -                                                                                                                                                                                         -                static void destroy(JSC::JSCell*);                                                                                                                                       -                static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -                {                                                                                                                                                                        -                    return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());                                                  -                } -                static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); -                                                                                                                                                                                         -                ~JSReadableArrayBufferSinkController();                                                                                                                                                        - - -                void* wrapped() const { return m_sinkPtr; }     -                void detach(); - -                void start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose); -                DECLARE_VISIT_CHILDREN; -                                                                                                                                                                                         -                static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); -                                                                  -                bool hasPendingActivity() { return m_hasPendingActivity; } - -                void* m_sinkPtr; -                bool m_hasPendingActivity; -                mutable WriteBarrier<JSC::JSFunction> m_onPull; -                mutable WriteBarrier<JSC::JSFunction> m_onClose; -                mutable JSC::Weak<JSObject> m_weakReadableStream; -                JSC::Weak<JSReadableArrayBufferSinkController> m_weakThis; -                                                                                                                                                                                         -                JSReadableArrayBufferSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr)                                                                                                     -                    : Base(vm, structure)                                                                                                                                                -                {                                                                                                                                                                        -                    m_sinkPtr = sinkPtr; -                    m_hasPendingActivity = true; -                    m_weakThis = JSC::Weak<JSReadableArrayBufferSinkController>(this, getOwner()); -                }                                                                                                                                                                        -                                                                                                                                                                                         -                void finishCreation(JSC::VM&); - -                class Owner final : public JSC::WeakHandleOwner { -                public: -                    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void* context, JSC::AbstractSlotVisitor&, const char**) final -                    { -                        auto* controller = JSC::jsCast<JSReadableArrayBufferSinkController*>(handle.slot()->asCell()); -                        return controller->hasPendingActivity(); -                    } -                    void finalize(JSC::Handle<JSC::Unknown>, void* context) final {} -                }; -             -                static JSC::WeakHandleOwner* getOwner() -                { -                    static NeverDestroyed<Owner> m_owner; -                    return &m_owner.get(); -                } -            }; +class JSArrayBufferSinkConstructor final : public JSC::InternalFunction { +public: +    using Base = JSC::InternalFunction; +    static JSArrayBufferSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype); +    static constexpr SinkID Sink = SinkID::ArrayBufferSink; + +    static constexpr unsigned StructureFlags = Base::StructureFlags; +    static constexpr bool needsDestruction = false; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSArrayBufferSinkConstructor, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); }); +    } + +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info()); +    } +    void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); + +    // Must be defined for each specialization class. +    static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); + +private: +    JSArrayBufferSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction) +        : Base(vm, structure, nativeFunction, nativeFunction) + +    { +    } + +    void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); +}; + +class JSArrayBufferSink final : public JSC::JSDestructibleObject { +public: +    using Base = JSC::JSDestructibleObject; +    static JSArrayBufferSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); +    static constexpr SinkID Sink = SinkID::ArrayBufferSink; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSArrayBufferSink, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); }); +    } + +    static void destroy(JSC::JSCell*); +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } + +    static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); + +    ~JSArrayBufferSink(); + +    void* wrapped() const { return m_sinkPtr; } +    DECLARE_VISIT_CHILDREN; + +    void detach() +    { +        m_sinkPtr = nullptr; +    } + +    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); + +    void* m_sinkPtr; + +    JSArrayBufferSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) +        : Base(vm, structure) +    { +        m_sinkPtr = sinkPtr; +    } + +    void finishCreation(JSC::VM&); +}; + +class JSReadableArrayBufferSinkController final : public JSC::JSDestructibleObject { +public: +    using Base = JSC::JSDestructibleObject; +    static JSReadableArrayBufferSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); +    static constexpr SinkID Sink = SinkID::ArrayBufferSink; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSReadableArrayBufferSinkController, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); }); +    } + +    static void destroy(JSC::JSCell*); +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } +    static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); + +    ~JSReadableArrayBufferSinkController(); + +    void* wrapped() const { return m_sinkPtr; } +    void detach(); + +    void start(JSC::JSGlobalObject* globalObject, JSC::JSValue readableStream, JSC::JSFunction* onPull, JSC::JSFunction* onClose); +    DECLARE_VISIT_CHILDREN; + +    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); + +    void* m_sinkPtr; +    mutable WriteBarrier<JSC::JSFunction> m_onPull; +    mutable WriteBarrier<JSC::JSFunction> m_onClose; +    mutable JSC::Weak<JSObject> m_weakReadableStream; + +    JSReadableArrayBufferSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) +        : Base(vm, structure) +    { +        m_sinkPtr = sinkPtr; +    } + +    void finishCreation(JSC::VM&); +};  JSC_DECLARE_CUSTOM_GETTER(functionArrayBufferSink__getter); -         -class JSFileSinkConstructor final : public JSC::InternalFunction {                                                                                                      -        public:                                                                                                                                                                      -            using Base = JSC::InternalFunction;                                                                                                                                      -            static JSFileSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype);  -            static constexpr SinkID Sink = SinkID::FileSink; -                                                                                                                                                                                     -            static constexpr unsigned StructureFlags = Base::StructureFlags;                                                                                                         -            static constexpr bool needsDestruction = false;                                                                                                                          -                                                                                                                                                                                     -            DECLARE_EXPORT_INFO;                                                                                                                                                     -            template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -            {                                                                                                                                                                        -                if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                    return nullptr;                                                                                                                                                  -                return WebCore::subspaceForImpl<JSFileSinkConstructor, WebCore::UseCustomHeapCellType::No>(                                                                     -                    vm,                                                                                                                                                              -                    [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); },                                                                                  -                    [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); },                                                                -                    [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); },                                                                                        -                    [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); });                                                                     -            }                                                                                                                                                                        -                                                                                                                                                                                     -            static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -            {                                                                                                                                                                        -                return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info());                                                  -            }                                                                                                                                                                        -            void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype);    -             -             -            // Must be defined for each specialization class. -            static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); -                                                                                                                                                                -        private:                                                                                                                                                                     -            JSFileSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction)                                                                   -                : Base(vm, structure, nativeFunction, nativeFunction)                                                                                                                -                                                                                                                                                                                     -            {                                                                                                                                                                        -            }                                                                                                                                                                        -                                                                                                                                                                                     -            void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype);                                                      -        };                                                                                                                                                                           -                                                                                                                                                                                     -        class JSFileSink final : public JSC::JSDestructibleObject {                                                                                                               -        public:                                                                                                                                                                      -            using Base = JSC::JSDestructibleObject;                                                                                                                                  -            static JSFileSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr);        -            static constexpr SinkID Sink = SinkID::FileSink;                                           -                                                                                                                                                                                     -            DECLARE_EXPORT_INFO;                                                                                                                                                     -            template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -            {                                                                                                                                                                        -                if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                    return nullptr;                                                                                                                                                  -                return WebCore::subspaceForImpl<JSFileSink, WebCore::UseCustomHeapCellType::No>(                                                                                  -                    vm,                                                                                                                                                              -                    [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); },                                                                                             -                    [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); },                                                                           -                    [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); },                                                                                                   -                    [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); });                                                                                -            }                                                                                                                                                                        -                                                                                                                                                                                     -            static void destroy(JSC::JSCell*);                                                                                                                                       -            static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -            {                                                                                                                                                                        -                return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());                                                  -            }                        -             -            static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); -                                                                                                                                                                                     -            ~JSFileSink();                                                                                                                                                        -                                                                                                                                                                                     -            void* wrapped() const { return m_sinkPtr; }                                                                                                                              - -            void detach() { -                m_sinkPtr = nullptr; - -            }                        - -            static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);                                                                                                                    -                                                                                                                                                                                     -            void* m_sinkPtr; -                                                                                                                                                                                     -            JSFileSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr)                                                                                                     -                : Base(vm, structure)                                                                                                                                                -            {                                                                                                                                                                        -                m_sinkPtr = sinkPtr; -            }                                                                                                                                                                        -                                                                                                                                                                                     -            void finishCreation(JSC::VM&); -        }; - -      - -        class JSReadableFileSinkController final : public JSC::JSDestructibleObject {                                                                                                               -            public:                                                                                                                                                                      -                using Base = JSC::JSDestructibleObject;                                                                                                                                  -                static JSReadableFileSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr);        -                static constexpr SinkID Sink = SinkID::FileSink;                                           -                                                                                                                                                                                         -                DECLARE_EXPORT_INFO;                                                                                                                                                     -                template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -                {                                                                                                                                                                        -                    if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                        return nullptr;                                                                                                                                                  -                    return WebCore::subspaceForImpl<JSReadableFileSinkController, WebCore::UseCustomHeapCellType::No>(                                                                                  -                        vm,                                                                                                                                                              -                        [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); },                                                                                             -                        [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); },                                                                           -                        [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); },                                                                                                   -                        [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); });                                                                                -                }                                                                                                                                                                        -                                                                                                                                                                                         -                static void destroy(JSC::JSCell*);                                                                                                                                       -                static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -                {                                                                                                                                                                        -                    return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());                                                  -                } -                static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); -                                                                                                                                                                                         -                ~JSReadableFileSinkController();                                                                                                                                                        - - -                void* wrapped() const { return m_sinkPtr; }     -                void detach(); - -                void start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose); -                DECLARE_VISIT_CHILDREN; -                                                                                                                                                                                         -                static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); -                                                                  -                bool hasPendingActivity() { return m_hasPendingActivity; } - -                void* m_sinkPtr; -                bool m_hasPendingActivity; -                mutable WriteBarrier<JSC::JSFunction> m_onPull; -                mutable WriteBarrier<JSC::JSFunction> m_onClose; -                mutable JSC::Weak<JSObject> m_weakReadableStream; -                JSC::Weak<JSReadableFileSinkController> m_weakThis; -                                                                                                                                                                                         -                JSReadableFileSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr)                                                                                                     -                    : Base(vm, structure)                                                                                                                                                -                {                                                                                                                                                                        -                    m_sinkPtr = sinkPtr; -                    m_hasPendingActivity = true; -                    m_weakThis = JSC::Weak<JSReadableFileSinkController>(this, getOwner()); -                }                                                                                                                                                                        -                                                                                                                                                                                         -                void finishCreation(JSC::VM&); - -                class Owner final : public JSC::WeakHandleOwner { -                public: -                    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void* context, JSC::AbstractSlotVisitor&, const char**) final -                    { -                        auto* controller = JSC::jsCast<JSReadableFileSinkController*>(handle.slot()->asCell()); -                        return controller->hasPendingActivity(); -                    } -                    void finalize(JSC::Handle<JSC::Unknown>, void* context) final {} -                }; -             -                static JSC::WeakHandleOwner* getOwner() -                { -                    static NeverDestroyed<Owner> m_owner; -                    return &m_owner.get(); -                } -            }; +class JSFileSinkConstructor final : public JSC::InternalFunction { +public: +    using Base = JSC::InternalFunction; +    static JSFileSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype); +    static constexpr SinkID Sink = SinkID::FileSink; + +    static constexpr unsigned StructureFlags = Base::StructureFlags; +    static constexpr bool needsDestruction = false; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSFileSinkConstructor, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); }); +    } + +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info()); +    } +    void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); + +    // Must be defined for each specialization class. +    static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); + +private: +    JSFileSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction) +        : Base(vm, structure, nativeFunction, nativeFunction) + +    { +    } + +    void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); +}; + +class JSFileSink final : public JSC::JSDestructibleObject { +public: +    using Base = JSC::JSDestructibleObject; +    static JSFileSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); +    static constexpr SinkID Sink = SinkID::FileSink; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSFileSink, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); }); +    } + +    static void destroy(JSC::JSCell*); +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } + +    static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); + +    ~JSFileSink(); + +    void* wrapped() const { return m_sinkPtr; } +    DECLARE_VISIT_CHILDREN; + +    void detach() +    { +        m_sinkPtr = nullptr; +    } + +    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); + +    void* m_sinkPtr; + +    JSFileSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) +        : Base(vm, structure) +    { +        m_sinkPtr = sinkPtr; +    } + +    void finishCreation(JSC::VM&); +}; + +class JSReadableFileSinkController final : public JSC::JSDestructibleObject { +public: +    using Base = JSC::JSDestructibleObject; +    static JSReadableFileSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); +    static constexpr SinkID Sink = SinkID::FileSink; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSReadableFileSinkController, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); }); +    } + +    static void destroy(JSC::JSCell*); +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } +    static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); + +    ~JSReadableFileSinkController(); + +    void* wrapped() const { return m_sinkPtr; } +    void detach(); + +    void start(JSC::JSGlobalObject* globalObject, JSC::JSValue readableStream, JSC::JSFunction* onPull, JSC::JSFunction* onClose); +    DECLARE_VISIT_CHILDREN; + +    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); + +    void* m_sinkPtr; +    mutable WriteBarrier<JSC::JSFunction> m_onPull; +    mutable WriteBarrier<JSC::JSFunction> m_onClose; +    mutable JSC::Weak<JSObject> m_weakReadableStream; + +    JSReadableFileSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) +        : Base(vm, structure) +    { +        m_sinkPtr = sinkPtr; +    } + +    void finishCreation(JSC::VM&); +};  JSC_DECLARE_CUSTOM_GETTER(functionFileSink__getter); -         -class JSHTTPResponseSinkConstructor final : public JSC::InternalFunction {                                                                                                      -        public:                                                                                                                                                                      -            using Base = JSC::InternalFunction;                                                                                                                                      -            static JSHTTPResponseSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype);  -            static constexpr SinkID Sink = SinkID::HTTPResponseSink; -                                                                                                                                                                                     -            static constexpr unsigned StructureFlags = Base::StructureFlags;                                                                                                         -            static constexpr bool needsDestruction = false;                                                                                                                          -                                                                                                                                                                                     -            DECLARE_EXPORT_INFO;                                                                                                                                                     -            template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -            {                                                                                                                                                                        -                if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                    return nullptr;                                                                                                                                                  -                return WebCore::subspaceForImpl<JSHTTPResponseSinkConstructor, WebCore::UseCustomHeapCellType::No>(                                                                     -                    vm,                                                                                                                                                              -                    [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); },                                                                                  -                    [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); },                                                                -                    [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); },                                                                                        -                    [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); });                                                                     -            }                                                                                                                                                                        -                                                                                                                                                                                     -            static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -            {                                                                                                                                                                        -                return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info());                                                  -            }                                                                                                                                                                        -            void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype);    -             -             -            // Must be defined for each specialization class. -            static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); -                                                                                                                                                                -        private:                                                                                                                                                                     -            JSHTTPResponseSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction)                                                                   -                : Base(vm, structure, nativeFunction, nativeFunction)                                                                                                                -                                                                                                                                                                                     -            {                                                                                                                                                                        -            }                                                                                                                                                                        -                                                                                                                                                                                     -            void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype);                                                      -        };                                                                                                                                                                           -                                                                                                                                                                                     -        class JSHTTPResponseSink final : public JSC::JSDestructibleObject {                                                                                                               -        public:                                                                                                                                                                      -            using Base = JSC::JSDestructibleObject;                                                                                                                                  -            static JSHTTPResponseSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr);        -            static constexpr SinkID Sink = SinkID::HTTPResponseSink;                                           -                                                                                                                                                                                     -            DECLARE_EXPORT_INFO;                                                                                                                                                     -            template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -            {                                                                                                                                                                        -                if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                    return nullptr;                                                                                                                                                  -                return WebCore::subspaceForImpl<JSHTTPResponseSink, WebCore::UseCustomHeapCellType::No>(                                                                                  -                    vm,                                                                                                                                                              -                    [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); },                                                                                             -                    [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); },                                                                           -                    [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); },                                                                                                   -                    [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); });                                                                                -            }                                                                                                                                                                        -                                                                                                                                                                                     -            static void destroy(JSC::JSCell*);                                                                                                                                       -            static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -            {                                                                                                                                                                        -                return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());                                                  -            }                        -             -            static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); -                                                                                                                                                                                     -            ~JSHTTPResponseSink();                                                                                                                                                        -                                                                                                                                                                                     -            void* wrapped() const { return m_sinkPtr; }                                                                                                                              - -            void detach() { -                m_sinkPtr = nullptr; - -            }                        - -            static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);                                                                                                                    -                                                                                                                                                                                     -            void* m_sinkPtr; -                                                                                                                                                                                     -            JSHTTPResponseSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr)                                                                                                     -                : Base(vm, structure)                                                                                                                                                -            {                                                                                                                                                                        -                m_sinkPtr = sinkPtr; -            }                                                                                                                                                                        -                                                                                                                                                                                     -            void finishCreation(JSC::VM&); -        }; - -      - -        class JSReadableHTTPResponseSinkController final : public JSC::JSDestructibleObject {                                                                                                               -            public:                                                                                                                                                                      -                using Base = JSC::JSDestructibleObject;                                                                                                                                  -                static JSReadableHTTPResponseSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr);        -                static constexpr SinkID Sink = SinkID::HTTPResponseSink;                                           -                                                                                                                                                                                         -                DECLARE_EXPORT_INFO;                                                                                                                                                     -                template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -                {                                                                                                                                                                        -                    if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                        return nullptr;                                                                                                                                                  -                    return WebCore::subspaceForImpl<JSReadableHTTPResponseSinkController, WebCore::UseCustomHeapCellType::No>(                                                                                  -                        vm,                                                                                                                                                              -                        [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); },                                                                                             -                        [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); },                                                                           -                        [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); },                                                                                                   -                        [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); });                                                                                -                }                                                                                                                                                                        -                                                                                                                                                                                         -                static void destroy(JSC::JSCell*);                                                                                                                                       -                static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -                {                                                                                                                                                                        -                    return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());                                                  -                } -                static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); -                                                                                                                                                                                         -                ~JSReadableHTTPResponseSinkController();                                                                                                                                                        - - -                void* wrapped() const { return m_sinkPtr; }     -                void detach(); - -                void start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose); -                DECLARE_VISIT_CHILDREN; -                                                                                                                                                                                         -                static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); -                                                                  -                bool hasPendingActivity() { return m_hasPendingActivity; } - -                void* m_sinkPtr; -                bool m_hasPendingActivity; -                mutable WriteBarrier<JSC::JSFunction> m_onPull; -                mutable WriteBarrier<JSC::JSFunction> m_onClose; -                mutable JSC::Weak<JSObject> m_weakReadableStream; -                JSC::Weak<JSReadableHTTPResponseSinkController> m_weakThis; -                                                                                                                                                                                         -                JSReadableHTTPResponseSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr)                                                                                                     -                    : Base(vm, structure)                                                                                                                                                -                {                                                                                                                                                                        -                    m_sinkPtr = sinkPtr; -                    m_hasPendingActivity = true; -                    m_weakThis = JSC::Weak<JSReadableHTTPResponseSinkController>(this, getOwner()); -                }                                                                                                                                                                        -                                                                                                                                                                                         -                void finishCreation(JSC::VM&); - -                class Owner final : public JSC::WeakHandleOwner { -                public: -                    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void* context, JSC::AbstractSlotVisitor&, const char**) final -                    { -                        auto* controller = JSC::jsCast<JSReadableHTTPResponseSinkController*>(handle.slot()->asCell()); -                        return controller->hasPendingActivity(); -                    } -                    void finalize(JSC::Handle<JSC::Unknown>, void* context) final {} -                }; -             -                static JSC::WeakHandleOwner* getOwner() -                { -                    static NeverDestroyed<Owner> m_owner; -                    return &m_owner.get(); -                } -            }; +class JSHTTPResponseSinkConstructor final : public JSC::InternalFunction { +public: +    using Base = JSC::InternalFunction; +    static JSHTTPResponseSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype); +    static constexpr SinkID Sink = SinkID::HTTPResponseSink; + +    static constexpr unsigned StructureFlags = Base::StructureFlags; +    static constexpr bool needsDestruction = false; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSHTTPResponseSinkConstructor, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); }); +    } + +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info()); +    } +    void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); + +    // Must be defined for each specialization class. +    static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); + +private: +    JSHTTPResponseSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction) +        : Base(vm, structure, nativeFunction, nativeFunction) + +    { +    } + +    void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); +}; + +class JSHTTPResponseSink final : public JSC::JSDestructibleObject { +public: +    using Base = JSC::JSDestructibleObject; +    static JSHTTPResponseSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); +    static constexpr SinkID Sink = SinkID::HTTPResponseSink; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSHTTPResponseSink, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); }); +    } + +    static void destroy(JSC::JSCell*); +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } + +    static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); + +    ~JSHTTPResponseSink(); + +    void* wrapped() const { return m_sinkPtr; } +    DECLARE_VISIT_CHILDREN; + +    void detach() +    { +        m_sinkPtr = nullptr; +    } + +    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); + +    void* m_sinkPtr; + +    JSHTTPResponseSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) +        : Base(vm, structure) +    { +        m_sinkPtr = sinkPtr; +    } + +    void finishCreation(JSC::VM&); +}; + +class JSReadableHTTPResponseSinkController final : public JSC::JSDestructibleObject { +public: +    using Base = JSC::JSDestructibleObject; +    static JSReadableHTTPResponseSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); +    static constexpr SinkID Sink = SinkID::HTTPResponseSink; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSReadableHTTPResponseSinkController, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); }); +    } + +    static void destroy(JSC::JSCell*); +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } +    static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); + +    ~JSReadableHTTPResponseSinkController(); + +    void* wrapped() const { return m_sinkPtr; } +    void detach(); + +    void start(JSC::JSGlobalObject* globalObject, JSC::JSValue readableStream, JSC::JSFunction* onPull, JSC::JSFunction* onClose); +    DECLARE_VISIT_CHILDREN; + +    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); + +    void* m_sinkPtr; +    mutable WriteBarrier<JSC::JSFunction> m_onPull; +    mutable WriteBarrier<JSC::JSFunction> m_onClose; +    mutable JSC::Weak<JSObject> m_weakReadableStream; + +    JSReadableHTTPResponseSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) +        : Base(vm, structure) +    { +        m_sinkPtr = sinkPtr; +    } + +    void finishCreation(JSC::VM&); +};  JSC_DECLARE_CUSTOM_GETTER(functionHTTPResponseSink__getter); -         -class JSHTTPSResponseSinkConstructor final : public JSC::InternalFunction {                                                                                                      -        public:                                                                                                                                                                      -            using Base = JSC::InternalFunction;                                                                                                                                      -            static JSHTTPSResponseSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype);  -            static constexpr SinkID Sink = SinkID::HTTPSResponseSink; -                                                                                                                                                                                     -            static constexpr unsigned StructureFlags = Base::StructureFlags;                                                                                                         -            static constexpr bool needsDestruction = false;                                                                                                                          -                                                                                                                                                                                     -            DECLARE_EXPORT_INFO;                                                                                                                                                     -            template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -            {                                                                                                                                                                        -                if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                    return nullptr;                                                                                                                                                  -                return WebCore::subspaceForImpl<JSHTTPSResponseSinkConstructor, WebCore::UseCustomHeapCellType::No>(                                                                     -                    vm,                                                                                                                                                              -                    [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); },                                                                                  -                    [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); },                                                                -                    [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); },                                                                                        -                    [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); });                                                                     -            }                                                                                                                                                                        -                                                                                                                                                                                     -            static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -            {                                                                                                                                                                        -                return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info());                                                  -            }                                                                                                                                                                        -            void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype);    -             -             -            // Must be defined for each specialization class. -            static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); -                                                                                                                                                                -        private:                                                                                                                                                                     -            JSHTTPSResponseSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction)                                                                   -                : Base(vm, structure, nativeFunction, nativeFunction)                                                                                                                -                                                                                                                                                                                     -            {                                                                                                                                                                        -            }                                                                                                                                                                        -                                                                                                                                                                                     -            void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype);                                                      -        };                                                                                                                                                                           -                                                                                                                                                                                     -        class JSHTTPSResponseSink final : public JSC::JSDestructibleObject {                                                                                                               -        public:                                                                                                                                                                      -            using Base = JSC::JSDestructibleObject;                                                                                                                                  -            static JSHTTPSResponseSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr);        -            static constexpr SinkID Sink = SinkID::HTTPSResponseSink;                                           -                                                                                                                                                                                     -            DECLARE_EXPORT_INFO;                                                                                                                                                     -            template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -            {                                                                                                                                                                        -                if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                    return nullptr;                                                                                                                                                  -                return WebCore::subspaceForImpl<JSHTTPSResponseSink, WebCore::UseCustomHeapCellType::No>(                                                                                  -                    vm,                                                                                                                                                              -                    [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); },                                                                                             -                    [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); },                                                                           -                    [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); },                                                                                                   -                    [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); });                                                                                -            }                                                                                                                                                                        -                                                                                                                                                                                     -            static void destroy(JSC::JSCell*);                                                                                                                                       -            static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -            {                                                                                                                                                                        -                return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());                                                  -            }                        -             -            static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); -                                                                                                                                                                                     -            ~JSHTTPSResponseSink();                                                                                                                                                        -                                                                                                                                                                                     -            void* wrapped() const { return m_sinkPtr; }                                                                                                                              - -            void detach() { -                m_sinkPtr = nullptr; - -            }                        - -            static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&);                                                                                                                    -                                                                                                                                                                                     -            void* m_sinkPtr; -                                                                                                                                                                                     -            JSHTTPSResponseSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr)                                                                                                     -                : Base(vm, structure)                                                                                                                                                -            {                                                                                                                                                                        -                m_sinkPtr = sinkPtr; -            }                                                                                                                                                                        -                                                                                                                                                                                     -            void finishCreation(JSC::VM&); -        }; - -      - -        class JSReadableHTTPSResponseSinkController final : public JSC::JSDestructibleObject {                                                                                                               -            public:                                                                                                                                                                      -                using Base = JSC::JSDestructibleObject;                                                                                                                                  -                static JSReadableHTTPSResponseSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr);        -                static constexpr SinkID Sink = SinkID::HTTPSResponseSink;                                           -                                                                                                                                                                                         -                DECLARE_EXPORT_INFO;                                                                                                                                                     -                template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm)                                                                 -                {                                                                                                                                                                        -                    if constexpr (mode == JSC::SubspaceAccess::Concurrently)                                                                                                             -                        return nullptr;                                                                                                                                                  -                    return WebCore::subspaceForImpl<JSReadableHTTPSResponseSinkController, WebCore::UseCustomHeapCellType::No>(                                                                                  -                        vm,                                                                                                                                                              -                        [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); },                                                                                             -                        [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); },                                                                           -                        [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); },                                                                                                   -                        [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); });                                                                                -                }                                                                                                                                                                        -                                                                                                                                                                                         -                static void destroy(JSC::JSCell*);                                                                                                                                       -                static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)                                                           -                {                                                                                                                                                                        -                    return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());                                                  -                } -                static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); -                                                                                                                                                                                         -                ~JSReadableHTTPSResponseSinkController();                                                                                                                                                        - - -                void* wrapped() const { return m_sinkPtr; }     -                void detach(); - -                void start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose); -                DECLARE_VISIT_CHILDREN; -                                                                                                                                                                                         -                static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); -                                                                  -                bool hasPendingActivity() { return m_hasPendingActivity; } - -                void* m_sinkPtr; -                bool m_hasPendingActivity; -                mutable WriteBarrier<JSC::JSFunction> m_onPull; -                mutable WriteBarrier<JSC::JSFunction> m_onClose; -                mutable JSC::Weak<JSObject> m_weakReadableStream; -                JSC::Weak<JSReadableHTTPSResponseSinkController> m_weakThis; -                                                                                                                                                                                         -                JSReadableHTTPSResponseSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr)                                                                                                     -                    : Base(vm, structure)                                                                                                                                                -                {                                                                                                                                                                        -                    m_sinkPtr = sinkPtr; -                    m_hasPendingActivity = true; -                    m_weakThis = JSC::Weak<JSReadableHTTPSResponseSinkController>(this, getOwner()); -                }                                                                                                                                                                        -                                                                                                                                                                                         -                void finishCreation(JSC::VM&); - -                class Owner final : public JSC::WeakHandleOwner { -                public: -                    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void* context, JSC::AbstractSlotVisitor&, const char**) final -                    { -                        auto* controller = JSC::jsCast<JSReadableHTTPSResponseSinkController*>(handle.slot()->asCell()); -                        return controller->hasPendingActivity(); -                    } -                    void finalize(JSC::Handle<JSC::Unknown>, void* context) final {} -                }; -             -                static JSC::WeakHandleOwner* getOwner() -                { -                    static NeverDestroyed<Owner> m_owner; -                    return &m_owner.get(); -                } -            }; +class JSHTTPSResponseSinkConstructor final : public JSC::InternalFunction { +public: +    using Base = JSC::InternalFunction; +    static JSHTTPSResponseSinkConstructor* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, JSC::JSObject* prototype); +    static constexpr SinkID Sink = SinkID::HTTPSResponseSink; + +    static constexpr unsigned StructureFlags = Base::StructureFlags; +    static constexpr bool needsDestruction = false; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSHTTPSResponseSinkConstructor, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkConstructor.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkConstructor = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSinkConstructor.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkConstructor = WTFMove(space); }); +    } + +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::InternalFunctionType, StructureFlags), info()); +    } +    void initializeProperties(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); + +    // Must be defined for each specialization class. +    static JSC::EncodedJSValue JSC_HOST_CALL_ATTRIBUTES construct(JSC::JSGlobalObject*, JSC::CallFrame*); + +private: +    JSHTTPSResponseSinkConstructor(JSC::VM& vm, JSC::Structure* structure, JSC::NativeFunction nativeFunction) +        : Base(vm, structure, nativeFunction, nativeFunction) + +    { +    } + +    void finishCreation(JSC::VM&, JSC::JSGlobalObject* globalObject, JSC::JSObject* prototype); +}; + +class JSHTTPSResponseSink final : public JSC::JSDestructibleObject { +public: +    using Base = JSC::JSDestructibleObject; +    static JSHTTPSResponseSink* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); +    static constexpr SinkID Sink = SinkID::HTTPSResponseSink; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSHTTPSResponseSink, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSink.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSink = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSink.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSink = WTFMove(space); }); +    } + +    static void destroy(JSC::JSCell*); +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } + +    static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); + +    ~JSHTTPSResponseSink(); + +    void* wrapped() const { return m_sinkPtr; } +    DECLARE_VISIT_CHILDREN; + +    void detach() +    { +        m_sinkPtr = nullptr; +    } + +    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); + +    void* m_sinkPtr; + +    JSHTTPSResponseSink(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) +        : Base(vm, structure) +    { +        m_sinkPtr = sinkPtr; +    } + +    void finishCreation(JSC::VM&); +}; + +class JSReadableHTTPSResponseSinkController final : public JSC::JSDestructibleObject { +public: +    using Base = JSC::JSDestructibleObject; +    static JSReadableHTTPSResponseSinkController* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure, void* sinkPtr); +    static constexpr SinkID Sink = SinkID::HTTPSResponseSink; + +    DECLARE_EXPORT_INFO; +    template<typename, JSC::SubspaceAccess mode> static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) +    { +        if constexpr (mode == JSC::SubspaceAccess::Concurrently) +            return nullptr; +        return WebCore::subspaceForImpl<JSReadableHTTPSResponseSinkController, WebCore::UseCustomHeapCellType::No>( +            vm, +            [](auto& spaces) { return spaces.m_clientSubspaceForJSSinkController.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForJSSinkController = WTFMove(space); }, +            [](auto& spaces) { return spaces.m_subspaceForJSSinkController.get(); }, +            [](auto& spaces, auto&& space) { spaces.m_subspaceForJSSinkController = WTFMove(space); }); +    } + +    static void destroy(JSC::JSCell*); +    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype) +    { +        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info()); +    } +    static JSObject* createPrototype(VM& vm, JSDOMGlobalObject& globalObject); + +    ~JSReadableHTTPSResponseSinkController(); + +    void* wrapped() const { return m_sinkPtr; } +    void detach(); + +    void start(JSC::JSGlobalObject* globalObject, JSC::JSValue readableStream, JSC::JSFunction* onPull, JSC::JSFunction* onClose); +    DECLARE_VISIT_CHILDREN; + +    static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); + +    void* m_sinkPtr; +    mutable WriteBarrier<JSC::JSFunction> m_onPull; +    mutable WriteBarrier<JSC::JSFunction> m_onClose; +    mutable JSC::Weak<JSObject> m_weakReadableStream; + +    JSReadableHTTPSResponseSinkController(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr) +        : Base(vm, structure) +    { +        m_sinkPtr = sinkPtr; +    } + +    void finishCreation(JSC::VM&); +};  JSC_DECLARE_CUSTOM_GETTER(functionHTTPSResponseSink__getter); -         -  JSObject* createJSSinkPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, WebCore::SinkID sinkID);  JSObject* createJSSinkControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject* globalObject, WebCore::SinkID sinkID);  Structure* createJSSinkControllerStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, WebCore::SinkID sinkID); diff --git a/src/bun.js/scripts/generate-jssink.js b/src/bun.js/scripts/generate-jssink.js index 0e9d3bb50..174efcb06 100644 --- a/src/bun.js/scripts/generate-jssink.js +++ b/src/bun.js/scripts/generate-jssink.js @@ -96,7 +96,8 @@ function header() {              ~${className}();                                                                                                                                                        -            void* wrapped() const { return m_sinkPtr; }                                                                                                                              +            void* wrapped() const { return m_sinkPtr; }     +            DECLARE_VISIT_CHILDREN;                                                                                                                                       void detach() {                  m_sinkPtr = nullptr; @@ -154,41 +155,19 @@ function header() {                  DECLARE_VISIT_CHILDREN;                  static void analyzeHeap(JSCell*, JSC::HeapAnalyzer&); -                                                                  -                bool hasPendingActivity() { return m_hasPendingActivity; }                  void* m_sinkPtr; -                bool m_hasPendingActivity;                  mutable WriteBarrier<JSC::JSFunction> m_onPull;                  mutable WriteBarrier<JSC::JSFunction> m_onClose;                  mutable JSC::Weak<JSObject> m_weakReadableStream; -                JSC::Weak<${controller}> m_weakThis;                  ${controller}(JSC::VM& vm, JSC::Structure* structure, void* sinkPtr)                                                                                                                          : Base(vm, structure)                                                                                                                                                                 {                                                                                                                                                                                             m_sinkPtr = sinkPtr; -                    m_hasPendingActivity = true; -                    m_weakThis = JSC::Weak<${controller}>(this, getOwner());                  }                                                                                                                                                                                         void finishCreation(JSC::VM&); - -                class Owner final : public JSC::WeakHandleOwner { -                public: -                    bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void* context, JSC::AbstractSlotVisitor&, const char**) final -                    { -                        auto* controller = JSC::jsCast<${controller}*>(handle.slot()->asCell()); -                        return controller->hasPendingActivity(); -                    } -                    void finalize(JSC::Handle<JSC::Unknown>, void* context) final {} -                }; -             -                static JSC::WeakHandleOwner* getOwner() -                { -                    static NeverDestroyed<Owner> m_owner; -                    return &m_owner.get(); -                }              };  JSC_DECLARE_CUSTOM_GETTER(function${name}__getter); @@ -405,8 +384,6 @@ JSC_DEFINE_HOST_FUNCTION(${controller}__close, (JSC::JSGlobalObject * lexicalGlo      controller->detach();      ${name}__close(lexicalGlobalObject, ptr); -    // Release the controller right before close. -    controller->m_hasPendingActivity = false;      return JSC::JSValue::encode(JSC::jsUndefined());  } @@ -643,7 +620,7 @@ void JS${controllerName}::detach() {      auto readableStream = m_weakReadableStream.get();      auto onClose = m_onClose.get();      m_onClose.clear(); - +          if (readableStream && onClose) {          JSC::JSGlobalObject *globalObject = this->globalObject();          auto callData = JSC::getCallData(onClose); @@ -760,11 +737,26 @@ void ${controller}::visitChildrenImpl(JSCell* cell, Visitor& visitor)      Base::visitChildren(thisObject, visitor);      visitor.append(thisObject->m_onPull);      visitor.append(thisObject->m_onClose); -    visitor.append(thisObject->m_weakReadableStream); +    void* ptr = thisObject->m_sinkPtr; +    if (ptr) +      visitor.addOpaqueRoot(ptr);  }  DEFINE_VISIT_CHILDREN(${controller}); +template<typename Visitor> +void ${className}::visitChildrenImpl(JSCell* cell, Visitor& visitor) +{ +    ${className}* thisObject = jsCast<${className}*>(cell); +    ASSERT_GC_OBJECT_INHERITS(thisObject, info()); +    Base::visitChildren(thisObject, visitor); +    void* ptr = thisObject->m_sinkPtr; +    if (ptr) +      visitor.addOpaqueRoot(ptr); +} + +DEFINE_VISIT_CHILDREN(${className}); +  void ${controller}::start(JSC::JSGlobalObject *globalObject, JSC::JSValue readableStream, JSC::JSFunction *onPull, JSC::JSFunction *onClose) {      this->m_weakReadableStream = JSC::Weak<JSC::JSObject>(readableStream.getObject()); | 
