Notes to self for when this MR is merged: **Follow-up: Fast-path For-Each iteration over SAFEARRAY** Once this series merges, a straightforward follow-up is to bypass the IEnumVARIANT COM dispatch when the For-Each iterator is a SAFEARRAY. - Call a helper (safearray_iter_next) that reads elements directly from the array data, avoiding the COM vtable call and one intermediate VariantCopy per iteration. - For non-refcounted element types (VT_I2, VT_I4, VT_R8, etc.) skip VariantCopyInd/VariantClear too — plain struct assignment is enough. - Non-SAFEARRAY iterators (IDispatch collections, etc.) keep the current IEnumVARIANT_Next path. - Applies to both interp_enumnext and interp_enumnext_local (the compile-time-bound variant introduced in this series). Measured on Wine, 1M-element integer array: - empty For-Each body: 16ms → 8ms (2×) - acc = acc + v: 102ms → 86ms (~16%) Modest impact on realistic workloads, but the code is small and principled (eliminates COM overhead at no API cost). -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10515#note_136796