This implements mshtml's cycle collection for JS objects so that they can be part of gecko's CC graph and have circular refs dealt with. It only does this during a Full CC, not incremental phases as we can't be part of gecko's "purple buffer" without replacing the entire refcounting logic to gecko's (which doesn't seem desirable as it will be too slow, nor possible, since we still need the current one for normal jscript without gecko). Full CC is forced when doing jscript garbage collection, and otherwise we are ignoring reporting jscript objects during incremental collection. The way it does it now is to fakingly report the current wine-specific-refcount to gecko only when traversing. This is fine when we are doing Full CC without being part of a purple buffer, to integrate existing jscript objects' refcounting into the gecko CC. -- v2: mshtml/tests: Test that the WeakMap can handle external/host objects. mshtml: Unlink the mshtml node from the gecko node during unlink. jscript/mshtml: Traverse external objects that have gecko CC participants jscript: Use get_host_disp in the vtbl when retrieving the host outer jscript: Replace the addref/release methods for host objects with jscript: Get rid of the obj parameter in gc_process_linked_val. jscript: Get rid of the obj parameter in gc_process_linked_obj. jscript: Use no_gc_traverse for host functions and constructors. https://gitlab.winehq.org/wine/wine/-/merge_requests/10045