Te doy la enhorabuena por lo bien que has redactado el problema, cuando es
dificil de explicarlo desde cero.
Trash
-------
Fijate que estas usando la variable Trash para crear 3 objetos distintos
Código Delphi
[-]
If Token = '{' then
begin
Trash := TTrashLine.Create;
tambien:
Código Delphi
[-]
until (Token = '}') or (k = LinesOfCode.Count - 1);
Trash := TTrashLine.Create;
Código Delphi
[-]
if Token <> '}' then
begin
Trash := TTrashLine.Create;
Esto significa que al crear el segundo, ya no podrás acceder al primero,
porque se pierde la referencia.
Deberías tener 3 variables declararadas, algo así como :
TrashOpen para hacer referencia al parentesis abierto
TrashClose idem para el cerrado.
TrashCount para el último (que no sé bien para qué se usa)
Lineas Físicas Vs Lógicas.
-------------------------
Podrías ver que la linea termine en punto y coma, es la única forma de ver
que una linea lógica ha acabado.
Por cierto, muy interesante el proyecto, ¿será Open Source?
saludos