Jacek Caban (@jacek) commented about dlls/mshtml/htmltextnode.c:
return E_OUTOFMEMORY;
ret->node.vtbl = &HTMLDOMTextNodeImplVtbl; ret->IHTMLDOMTextNode_iface.lpVtbl = &HTMLDOMTextNodeVtbl; ret->IHTMLDOMTextNode2_iface.lpVtbl = &HTMLDOMTextNode2Vtbl;
HTMLDOMNode_Init(doc, &ret->node, nsnode, &Text_dispex); + init_char_data(&ret->node, &ret->character_data);
nsres = nsIDOMNode_QueryInterface(nsnode, &IID_nsIDOMText, (void**)&ret->nstext); assert(nsres == NS_OK && (nsIDOMNode*)ret->nstext == ret->node.nsnode);
`nsIDOMText` inherits from `nsIDOMCharacterData` and you QI for it anyway. You could just pass that as ``nsIDOMCharacterData` to `init_char_data` and avoid additional QI there. This way, doctype special-case would be handled in comment's constructor instead of shared code. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/6887#note_88815