Не мерял производительность. Как минимум несколько вызовов функций на каждый [ с остановкой поиска спецсимвола и последующим возобновлением.
А так всё верно. Я давно не тестировал большое число скриптов и модов в плане загрузки. Но так как в ЕРМ реально нет конструкции комментариев, хоть мы и выделяем их визуально, то метки проверяется. Если сочтёте, что не критично и визуально лучше, то почему бы и нет. Я сторонник кода, в котором не нужно комментировать каждую строчку, а лишь блоки строк. Надеюсь, с Эры 3.0.0 такой код можно будет писать.
Code:
while Scanner.FindCharset(SPECIAL_CHARS) do begin
Scanner.GetCurrChar(c);
case c of
'!': begin
Scanner.GotoNextChar;
if Scanner.GetCurrChar(c) then begin
case c of
'!': begin
if Scanner.GetCharAtRelPos(+1, c) and (c = '!') then begin
FlushMarked;
Scanner.SkipChars('!');
MarkPos;
end else begin
ParseCmd;
end;
end; // .case '!'
'?': begin
if IsErm2 then begin
FinalizeLocalVarsPools;
InitLocalVarsPools;
end;
'#': begin
ParseCmd;
end; // .case '!'
end; // .switch c
end; // .if
end; // .case '!'
'$', '@': begin
if IsErm2 then begin
HandleLocalVar(c);
end else begin
Scanner.GotoNextChar;
end;
end;
'[': begin
if Scanner.GetCharAtRelPos(+1, c) and (c = ':') then begin
ParseLabel(GLOBAL_SCOPE);
end else begin
Scanner.GotoNextChar;
end;
end; // .case '['
end; // .switch c
end; // .while