Я пытался оптимизировать фрагмент кода, имеющий такую конструкцию:
while (i > 0) do begin
Dec(i);
Это выглядит неэффективно, поэтому я попытался сделать это:
while (Dec(i) >= 0) do begin
Это не работает, потому что Dec - это процедура, а не функция.
Поэтому я переписываю это:
procedure Withloop;
var
....
function Decr(var a: integer): integer; inline;
begin
Dec(a);
Result:= a;
end;
...
while (Decr(i) >= 0) do begin
Но это компилируется в:
SDIMAIN.pas.448: while (Decr(i) >= 0) do begin
00468EE5 8BC4 mov eax,esp
00468EE7 E8D0FEFFFF call Decr <<--- A call??
00468EEC 85C0 test eax,eax
00468EEE 0F8D12FFFFFF jnl $00468e06
00468EF4 EB01 jmp $00468ef7
Тем не менее, в другой части программы, она прекрасно вписывает функцию.
Какое практическое правило (или жесткое правило) я могу использовать, чтобы знать, что Delphi будет соблюдать директиву inline
?