Thanks, that makes sense as an end state and I agree a unified, tagged representation would help global variable binding (and likely what I ran into in !10393). One thing worth flagging about this MR specifically: the new tree isn't a third tree alongside the two in `ScriptDisp`. The `var_tree` and `func_tree` live on `ScriptDisp` and hold global script-defined symbols, whereas the `dispid_cache` this MR adds lives on `named_item_t`: one per host item, keyed by host member name, holding `DISPID`s resolved through that item's `IDispatch`, and dropped together with that item's dispatch. So it has a different owner and a different lifetime than the `ScriptDisp` trees, and it wouldn't fold into them directly: consolidating `var_tree` + `func_tree` into one tagged tree (variable / function / host property -> payload) is a separate change from caching per-named-item host `DISPID`s. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/11136#note_143587