Cuándo honra Delphi `en línea 'y cuándo no?
Estaba tratando de optimizar una pieza de código que tiene esta construcción:
while (i > 0) do begin
Dec(i);
Esto parece ineficiente, así que intenté hacer esto:
while (Dec(i) >= 0) do begin
Eso no funciona porque Dec es un procedimiento y no una función.
Así que lo reescribo a:
procedure Withloop;
var
....
function Decr(var a: integer): integer; inline;
begin
Dec(a);
Result:= a;
end;
...
while (Decr(i) >= 0) do begin
Pero esto se compila en:
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
in embargo, en otra parte del programa, incorpora una función muy bien.
Qué regla de oro (o regla estricta) puedo usar para saber que Delphi honrará lainline
directiva @