I studied the compiler internals by debugging it.
Does TViHashList have any documentation or diagram or anything? It differs from many other hash maps. Is it based on some other code which is documented?
TFPHashObjectList is based on it. It is used for all symbols but also for predefined directives. How about setting its capacity initially in such cases, like:
procedure InitScanner;
begin
turbo_scannerdirectives:=TFPHashObjectList.Create;
+ turbo_scannerdirectives.Capacity:=150;Less GetMem() calls, copying data and recalculating hashes.
For predefined directives and tokens a "perfect hash" would be perfect. :) I mentioned it in this MR
https://gitlab.com/freepascal.org/fpc/source/-/merge_requests/126
Juha
