VBScript identifiers are ASCII-only, Windows rejects all non-ASCII characters (Latin-1, Cyrillic, CJK) at the lexer level with error 1032 "Invalid character". Replace the locale-aware `wcsicmp()` with an inline ASCII-only `vbs_wcsicmp()` for all identifier comparisons. This avoids the expensive locale grab/free cycle (`get_current_locale_noalloc`/`free_locinfo`) that dominated profiling at 87–95% of CPU time in identifier lookup paths. Also restrict the lexer's `is_identifier_char()` and identifier-start check to ASCII-only, matching Windows behavior. Tests added for non-ASCII character rejection (é, ß, ü, Cyrillic) in identifiers. ### Benchmark results (best-of-3, before → after) | Benchmark | Before | After | Change | |---|---:|---:|---:| | Class prop read ×500k | 2558 ms | 160 ms | **−93.7%** | | GetRef loop ×200k | 15988 ms | 296 ms | **−98.1%** | | Empty For 10M | 4808 ms | 242 ms | **−95.0%** | | Nested For 10M | 6367 ms | 253 ms | **−96.0%** | | Local vars 10M | 9437 ms | 390 ms | **−95.9%** | | Dict.Exists ×100k | 300 ms | 113 ms | **−62.3%** | | If boolvar 10M | 7882 ms | 988 ms | **−87.5%** | | String concat ×2000 | 78 ms | 70 ms | −10.3% | Identifier-heavy operations see **10–50× speedups**. String concat (I/O-bound, not lookup-bound) is unchanged as expected. -- v3: vbscript: Use ASCII-only case-insensitive compare for identifier lookups. https://gitlab.winehq.org/wine/wine/-/merge_requests/10544