Jacek Caban (@jacek) commented about dlls/jscript/jscript.h:
+ + if(op == GC_TRAVERSE_UNLINK) { + jsval_t val = *link; + *link = jsval_undefined(); + jsval_release(val); + return S_OK; + } + + if(!is_object_instance(*link) || !(jsdisp = to_jsdisp(get_object(*link))) || jsdisp->ctx != obj->ctx) + return S_OK; + if(op == GC_TRAVERSE_SPECULATIVELY) + jsdisp->ref--; + else if(jsdisp->gc_marked) + return heap_stack_push(arg, jsdisp); + return S_OK; +} It doesn't make sense to have those as inlines, IMHO. I'd suggest to move those to move those to GC code and use an opaque gc_ctx struct here instead of void * here.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/1635#note_19024